From 460991ecf4fbeca2c0f8c39874b39a0885d6f67d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 17 Jul 2021 12:48:35 +0200 Subject: [PATCH 01/63] Feature: Persistant rotation of numbered auto/netsave after restart (#9397) It was always starting from 0 on openttd restart. Now the most recent auto/netsave number will be used as a base to generate the next filename. --- src/fios.cpp | 57 ++++++++++++++++++++++++++++++++++ src/fios.h | 12 +++++++ src/network/network_client.cpp | 4 +-- src/openttd.cpp | 2 +- src/saveload/saveload.cpp | 17 ++-------- src/saveload/saveload.h | 3 +- 6 files changed, 77 insertions(+), 18 deletions(-) diff --git a/src/fios.cpp b/src/fios.cpp index c59bcfb210..0491c1e51b 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #ifndef _WIN32 # include @@ -745,3 +746,59 @@ void ScanScenarios() { _scanner.Scan(true); } + +/** + * Constructs FiosNumberedSaveName. Initial number is the most recent save, or -1 if not found. + * @param prefix The prefix to use to generate a filename. +*/ +FiosNumberedSaveName::FiosNumberedSaveName(const std::string &prefix) : prefix(prefix), number(-1) +{ + static std::optional _autosave_path; + if (!_autosave_path) _autosave_path = FioFindDirectory(AUTOSAVE_DIR); + + static std::string _prefix; ///< Static as the lambda needs access to it. + + /* Callback for FiosFileScanner. */ + static fios_getlist_callback_proc *proc = [](SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last) { + if (strcasecmp(ext, ".sav") == 0 && StrStartsWith(file, _prefix)) return FIOS_TYPE_FILE; + return FIOS_TYPE_INVALID; + }; + + /* Prefix to check in the callback. */ + _prefix = *_autosave_path + this->prefix; + + /* Get the save list. */ + FileList list; + FiosFileScanner scanner(SLO_SAVE, proc, list); + scanner.Scan(".sav", _autosave_path->c_str(), false); + + /* Find the number for the most recent save, if any. */ + if (list.begin() != list.end()) { + SortingBits order = _savegame_sort_order; + _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING; + std::sort(list.begin(), list.end()); + _savegame_sort_order = order; + + std::string_view name = list.begin()->title; + std::from_chars(name.data() + this->prefix.size(), name.data() + name.size(), this->number); + } +} + +/** + * Generate a savegame name and number according to _settings_client.gui.max_num_autosaves. + * @return A filename in format ".sav". +*/ +std::string FiosNumberedSaveName::Filename() +{ + if (++this->number >= _settings_client.gui.max_num_autosaves) this->number = 0; + return fmt::format("{}{}.sav", this->prefix, this->number); +} + +/** + * Generate an extension for a savegame name. + * @return An extension in format "-.sav". +*/ +std::string FiosNumberedSaveName::Extension() +{ + return fmt::format("-{}.sav", this->prefix); +} diff --git a/src/fios.h b/src/fios.h index 34504d5e00..c0e5162975 100644 --- a/src/fios.h +++ b/src/fios.h @@ -125,4 +125,16 @@ std::string FiosMakeSavegameName(const char *name); FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last); +/** + * A savegame name automatically numbered. + */ +struct FiosNumberedSaveName { + FiosNumberedSaveName(const std::string &prefix); + std::string Filename(); + std::string Extension(); +private: + std::string prefix; + int number; +}; + #endif /* FIOS_H */ diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 9f08062f35..d38437cc14 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -132,8 +132,8 @@ struct PacketReader : LoadFilter { */ void ClientNetworkEmergencySave() { - static int _netsave_ctr = 0; - DoAutoOrNetsave(_netsave_ctr, true); + static FiosNumberedSaveName _netsave_ctr("netsave"); + DoAutoOrNetsave(_netsave_ctr); } diff --git a/src/openttd.cpp b/src/openttd.cpp index 711df58c43..0ea1fa75d9 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1393,7 +1393,7 @@ void StateGameLoop() */ static void DoAutosave() { - static int _autosave_ctr = 0; + static FiosNumberedSaveName _autosave_ctr("autosave"); DoAutoOrNetsave(_autosave_ctr); } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index d771bf526d..c8a1a0d29c 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -3328,26 +3328,15 @@ SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, * @param counter A reference to the counter variable to be used for rotating the file name. * @param netsave Indicates if this is a regular autosave or a netsave. */ -void DoAutoOrNetsave(int &counter, bool netsave) +void DoAutoOrNetsave(FiosNumberedSaveName &counter) { char buf[MAX_PATH]; if (_settings_client.gui.keep_all_autosave) { GenerateDefaultSaveName(buf, lastof(buf)); - if (!netsave) { - strecat(buf, ".sav", lastof(buf)); - } else { - strecat(buf, "-netsave.sav", lastof(buf)); - } + strecat(buf, counter.Extension().c_str(), lastof(buf)); } else { - /* Generate a savegame name and number according to _settings_client.gui.max_num_autosaves. */ - if (!netsave) { - seprintf(buf, lastof(buf), "autosave%d.sav", counter); - } else { - seprintf(buf, lastof(buf), "netsave%d.sav", counter); - } - - if (++counter >= _settings_client.gui.max_num_autosaves) counter = 0; + strecpy(buf, counter.Filename().c_str(), lastof(buf)); } Debug(sl, 2, "Autosaving to '{}'", buf); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index d79bc1416e..3047cbfd8b 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -11,6 +11,7 @@ #define SAVELOAD_H #include "../fileio_type.h" +#include "../fios.h" #include "../strings_type.h" #include "../core/span_type.hpp" #include @@ -381,7 +382,7 @@ void WaitTillSaved(); void ProcessAsyncSaveFinish(); void DoExitSave(); -void DoAutoOrNetsave(int &counter, bool netsave = false); +void DoAutoOrNetsave(FiosNumberedSaveName &counter); SaveOrLoadResult SaveWithFilter(struct SaveFilter *writer, bool threaded); SaveOrLoadResult LoadWithFilter(struct LoadFilter *reader); From ab601115a906a576d4af53509a8ee14e455f6a3f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 17 Jul 2021 17:26:50 +0200 Subject: [PATCH 02/63] Fix 75b6051b: removing items from the ini could leave the group in a bad state (#9445) --- src/ini_load.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ini_load.cpp b/src/ini_load.cpp index 0663ef1e48..06d6efb33c 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -112,8 +112,9 @@ void IniGroup::RemoveItem(const std::string &name) if (item->name != name) continue; *prev = item->next; - if (this->last_item == &this->item) { - this->last_item = &item->next; + /* "last_item" is a pointer to the "real-last-item"->next. */ + if (this->last_item == &item->next) { + this->last_item = prev; } item->next = nullptr; From 3479e59eea1c1a0241497bac28b68dfd8809672b Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 17 Jul 2021 18:50:07 +0000 Subject: [PATCH 03/63] Update: Translations from eints korean: 2 changes by telk5093 catalan: 3 changes by J0anJosep french: 17 changes by glx22 portuguese: 1 change by azulcosta portuguese (brazilian): 15 changes by Vimerum --- src/lang/brazilian_portuguese.txt | 15 +++++++++++++++ src/lang/catalan.txt | 3 +++ src/lang/french.txt | 18 +++++++++++++++++- src/lang/korean.txt | 2 ++ src/lang/portuguese.txt | 1 + 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 91b25fc1c9..27a3a5018c 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1997,7 +1997,9 @@ STR_FACE_EARRING :Brinco: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Alterar gravata ou brinco ############ Next lines match ServerGameType +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Local STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Público +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Apenas por convite ############ End of leave-in-this-order # Network server list @@ -2032,6 +2034,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Versão STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}IP do servidor: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Data de inicio: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Data atual: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Script de jogo: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Protegido por senha! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVIDOR DESLIGADO STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVIDOR CHEIO @@ -2052,6 +2055,7 @@ STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Iniciar um servidor próprio STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Coloque seu nome +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Insira o endereço do servidor ou o código de convite # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Iniciar novo jogo @@ -2137,6 +2141,10 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Edita o STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Nome do servidor STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibilidade STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Se outras pessoas podem ver seu servidor na lista pública +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Código de convite +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Código de convite que outros jogadores podem usar para se juntar a esse servidor +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Tipo de conexão +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Se e como seu servidor pode ser acessado por outros STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Jogador STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nome STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Seu nome de jogador @@ -2156,6 +2164,10 @@ STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Esse é STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s} / {NUM} empresa{P "" s} ############ Begin of ConnectionType +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Jogadores remotos não podem se conectar +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Público +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Atrás de um NAT ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar @@ -2285,6 +2297,9 @@ STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}O servid STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servidor está reiniciando...{}Aguarde... STR_NETWORK_MESSAGE_KICKED :*** {STRING} foi kickado. Motivo: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Falha no registro do servidor +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Seu servidor não permite conexões remotas +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Outros jogadores não poderão se conectar ao seu servidor # Content downloading window STR_CONTENT_TITLE :{WHITE}Baixando conteúdo diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 74e6955be3..c31fe6503a 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1998,6 +1998,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Canvia l ############ Next lines match ServerGameType STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Pública +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Només invitació ############ End of leave-in-this-order # Network server list @@ -2032,6 +2033,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Versió STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Adreça del servidor: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Data inicial: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Data actual: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Script de partida: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Protegit per contrasenya! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVIDOR DESCONNECTAT STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVIDOR PLÉ @@ -2285,6 +2287,7 @@ STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}El servi STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}El servidor està reiniciant...{}Espera un moment... STR_NETWORK_MESSAGE_KICKED :*** S'ha expulsat {STRING}. Motiu: {STRING} +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}El registre al servidor ha fallat. # Content downloading window STR_CONTENT_TITLE :{WHITE}Descàrregues de contingut diff --git a/src/lang/french.txt b/src/lang/french.txt index f0d0e89b0c..5e1168c852 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1997,7 +1997,9 @@ STR_FACE_EARRING :Boucle d'oreill STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Modifier la cravate ou la boucle d'oreille ############ Next lines match ServerGameType +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Local STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Public +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Invitation uniquement ############ End of leave-in-this-order # Network server list @@ -2032,6 +2034,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Version STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Adresse du serveur{NBSP}: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Date de début{NBSP}: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Date courante{NBSP}: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Script de jeu{NBSP}: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Protégée par mot de passe{NBSP}! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVEUR HORS-LIGNE STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVEUR PLEIN @@ -2047,11 +2050,12 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Recherch STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Recherche LAN STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Rechercher des serveurs sur le réseau local STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Ajouter un serveur -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Ajouter un serveur à la liste de ceux parmi lesquels des parties en cours seront toujours cherchées +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Ajouter un serveur à la liste. Ce peut être soit une adresse de serveur, soit un code d'invitation STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Héberger/créer un serveur de jeu STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Démarrer son propre serveur, sur cet ordinateur-ci STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Entrer votre nom +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Entrer l'adresse du serveur, ou le code d'invitation # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Commencer une nouvelle partie @@ -2137,6 +2141,10 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Éditer STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Nom du serveur STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibilité STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Possibilité pour les autres personnes de voir votre serveur dans la liste publique +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Code d'invitation +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Code d'invitation que les autres joueurs peuvent utiliser pour rejoindre ce serveur +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Type de connexion +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Si et comment votre serveur peut être vu par les autres STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Joueur STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nom STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Votre nom de jeu @@ -2153,8 +2161,13 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nouvelle compa STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Créer une nouvelle compagnie et la rejoindre STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}C'est vous STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}C'est l'hôte du jeu +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} client{P "" s} / {NUM} compagnie{P "" s} ############ Begin of ConnectionType +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Les joueurs distants ne peuvent pas se connecter +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Public +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Derrière un NAT ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Exclure @@ -2284,6 +2297,9 @@ STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Le serve STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Le serveur redémarre...{}Veuillez patienter... STR_NETWORK_MESSAGE_KICKED :*** {STRING} a été exclu. Raison{NBSP}: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Échec de l'enregistrement du serveur +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Votre serveur n'autorise pas les connexions distantes +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Les autres joueurs ne pourront pas se connecter à votre serveur # Content downloading window STR_CONTENT_TITLE :{WHITE}Téléchargement de modules diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 0274d18058..f62ad318ec 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2034,6 +2034,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}서버 STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}서버 주소: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}시작 날짜: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}현재 날짜: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}게임 스크립트: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}비밀번호가 걸려있습니다! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}서버 오프라인 STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}서버가 꽉 참 @@ -2166,6 +2167,7 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}접속 STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}로컬 STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}다른 플레이어가 접속할 수 없게 됩니다 STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}공개 +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}공유기 우회 ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :추방 diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index d31ae34386..e0ffe8a3f9 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2167,6 +2167,7 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cl STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Jogadores remotos não conseguem conetar STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Público +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Atrás de NAT ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar From 09a7825d1e03de58a5496a3eb11aa7bf6823ae18 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Sun, 18 Jul 2021 11:05:46 +0200 Subject: [PATCH 04/63] Remove: the concept of UnknownGRFs These were filled with "" (before 8a2da49) and later their name would get filled via UDP requests to the server. These UDP packets do not exist anymore, so they will always remain "". Remove that logic and just use the generic translated error GRF UNKNOWN string instead. --- src/network/core/game_info.cpp | 5 +--- src/network/network_gamelist.cpp | 5 +--- src/newgrf_config.cpp | 47 -------------------------------- src/newgrf_config.h | 4 --- 4 files changed, 2 insertions(+), 59 deletions(-) diff --git a/src/network/core/game_info.cpp b/src/network/core/game_info.cpp index 32b8fdb75b..d3c0491ba2 100644 --- a/src/network/core/game_info.cpp +++ b/src/network/core/game_info.cpp @@ -166,10 +166,7 @@ static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config) /* Find the matching GRF file */ const GRFConfig *f = FindGRFConfig(config->ident.grfid, FGCM_EXACT, config->ident.md5sum); if (f == nullptr) { - /* Don't know the GRF, so mark game incompatible and the (possibly) - * already resolved name for this GRF (another server has sent the - * name of the GRF already */ - config->name = FindUnknownGRFName(config->ident.grfid, config->ident.md5sum, true); + AddGRFTextToList(config->name, GetString(STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN)); config->status = GCS_NOT_FOUND; } else { config->filename = f->filename; diff --git a/src/network/network_gamelist.cpp b/src/network/network_gamelist.cpp index d4843ff673..ef5405dd2c 100644 --- a/src/network/network_gamelist.cpp +++ b/src/network/network_gamelist.cpp @@ -125,10 +125,7 @@ void NetworkAfterNewGRFScan() const GRFConfig *f = FindGRFConfig(c->ident.grfid, FGCM_EXACT, c->ident.md5sum); if (f == nullptr) { - /* Don't know the GRF, so mark game incompatible and the (possibly) - * already resolved name for this GRF (another server has sent the - * name of the GRF already. */ - c->name = FindUnknownGRFName(c->ident.grfid, c->ident.md5sum, true); + /* Don't know the GRF (anymore), so mark game incompatible. */ c->status = GCS_NOT_FOUND; /* If we miss a file, we're obviously incompatible. */ diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index addf6a1478..f6242e4f5d 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -753,53 +753,6 @@ const GRFConfig *FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 return best; } -/** Structure for UnknownGRFs; this is a lightweight variant of GRFConfig */ -struct UnknownGRF : public GRFIdentifier { - GRFTextWrapper name; ///< Name of the GRF. - - UnknownGRF() = default; - UnknownGRF(const UnknownGRF &other) = default; - UnknownGRF(UnknownGRF &&other) = default; - UnknownGRF(uint32 grfid, const uint8 *_md5sum) : GRFIdentifier(grfid, _md5sum), name(new GRFTextList) {} -}; - -/** - * Finds the name of a NewGRF in the list of names for unknown GRFs. An - * unknown GRF is a GRF where the .grf is not found during scanning. - * - * The names are resolved via UDP calls to servers that should know the name, - * though the replies may not come. This leaves "" as name, though - * that shouldn't matter _very_ much as they need GRF crawler or so to look - * up the GRF anyway and that works better with the GRF ID. - * - * @param grfid the GRF ID part of the 'unique' GRF identifier - * @param md5sum the MD5 checksum part of the 'unique' GRF identifier - * @param create whether to create a new GRFConfig if the GRFConfig did not - * exist in the fake list of GRFConfigs. - * @return The GRFTextWrapper of the name of the GRFConfig with the given GRF ID - * and MD5 checksum or nullptr when it does not exist and create is false. - * This value must NEVER be freed by the caller. - */ -GRFTextWrapper FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create) -{ - static std::vector unknown_grfs; - - for (const auto &grf : unknown_grfs) { - if (grf.grfid == grfid) { - if (memcmp(md5sum, grf.md5sum, sizeof(grf.md5sum)) == 0) return grf.name; - } - } - - if (!create) return nullptr; - - unknown_grfs.emplace_back(grfid, md5sum); - UnknownGRF &grf = unknown_grfs.back(); - - AddGRFTextToList(grf.name, UNKNOWN_GRF_NAME_PLACEHOLDER); - - return grf.name; -} - /** * Retrieve a NewGRF from the current config by its grfid. * @param grfid grf to look for. diff --git a/src/newgrf_config.h b/src/newgrf_config.h index 3b3da962ea..6f4b5c0028 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -234,10 +234,6 @@ char *GRFBuildParamList(char *dst, const GRFConfig *c, const char *last); /* In newgrf_gui.cpp */ void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config); -/** For communication about GRFs over the network */ -#define UNKNOWN_GRF_NAME_PLACEHOLDER "" -GRFTextWrapper FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create); - void UpdateNewGRFScanStatus(uint num, const char *name); void UpdateNewGRFConfigPalette(int32 new_value = 0); From 5dd524139fe46c0ea28206e30fb2311acb72ae82 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Sun, 18 Jul 2021 11:08:47 +0200 Subject: [PATCH 05/63] Fix c921f6d: [Network] Documentation of Game Info packet was not updated --- src/network/core/game_info.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/network/core/game_info.h b/src/network/core/game_info.h index 8d9824b188..a1719acd7e 100644 --- a/src/network/core/game_info.h +++ b/src/network/core/game_info.h @@ -25,6 +25,9 @@ * Version: Bytes: Description: * all 1 the version of this packet's structure * + * 5+ 4 version number of the Game Script (-1 is case none is selected). + * 5+ var string with the name of the Game Script. + * * 4+ 1 number of GRFs attached (n) * 4+ n * 20 unique identifier for GRF files. Consists of: * - one 4 byte variable with the GRF ID From 3eaa4706325556bfb1351d2ff392b5bc205fd238 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Sun, 18 Jul 2021 13:42:01 +0200 Subject: [PATCH 06/63] Feature: [Network] Optionally send NewGRF names with NewGRFs in GameInfo Before 8a2da49 the NewGRF names were synchronized using UDP packets, however those have been removed. With this a new version of the GameInfo packet is introduced that allows to specify the type of serialisation happens for NewGRFs. Either only the GRF ID and checksum, or those two plus the name of the NewGRF. On this request for local servers will send the NewGRFs names. The Game Coordinator will get the names on the first registration, and after that only the GRF ID and checksum. --- src/network/core/config.h | 2 +- src/network/core/game_info.cpp | 58 +++++++++++++++++++++++------ src/network/core/game_info.h | 46 +++++++++++++++++++---- src/network/network_coordinator.cpp | 5 ++- 4 files changed, 89 insertions(+), 22 deletions(-) diff --git a/src/network/core/config.h b/src/network/core/config.h index 6039c42523..ccc9cd263d 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -47,7 +47,7 @@ static const uint16 TCP_MTU = 32767; ///< Numbe static const uint16 COMPAT_MTU = 1460; ///< Number of bytes we can pack in a single packet for backward compatibility static const byte NETWORK_GAME_ADMIN_VERSION = 1; ///< What version of the admin network do we use? -static const byte NETWORK_GAME_INFO_VERSION = 5; ///< What version of game-info do we use? +static const byte NETWORK_GAME_INFO_VERSION = 6; ///< What version of game-info do we use? static const byte NETWORK_COMPANY_INFO_VERSION = 6; ///< What version of company info is this? static const byte NETWORK_COORDINATOR_VERSION = 3; ///< What version of game-coordinator-protocol do we use? diff --git a/src/network/core/game_info.cpp b/src/network/core/game_info.cpp index d3c0491ba2..138053b054 100644 --- a/src/network/core/game_info.cpp +++ b/src/network/core/game_info.cpp @@ -159,14 +159,15 @@ const NetworkServerGameInfo *GetCurrentNetworkServerGameInfo() * a NetworkGameInfo. Only grfid and md5sum are set, the rest is zero. This * function must set all appropriate fields. This GRF is later appended to * the grfconfig list of the NetworkGameInfo. - * @param config the GRF to handle. + * @param config The GRF to handle. + * @param name The name of the NewGRF, empty when unknown. */ -static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config) +static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config, std::string name) { /* Find the matching GRF file */ const GRFConfig *f = FindGRFConfig(config->ident.grfid, FGCM_EXACT, config->ident.md5sum); if (f == nullptr) { - AddGRFTextToList(config->name, GetString(STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN)); + AddGRFTextToList(config->name, name.empty() ? GetString(STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN) : name); config->status = GCS_NOT_FOUND; } else { config->filename = f->filename; @@ -182,7 +183,7 @@ static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config) * @param p the packet to write the data to. * @param info the NetworkGameInfo struct to serialize from. */ -void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info) +void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info, bool send_newgrf_names) { p->Send_uint8 (NETWORK_GAME_INFO_VERSION); @@ -194,6 +195,9 @@ void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info) /* Update the documentation in game_info.h on changes * to the NetworkGameInfo wire-protocol! */ + /* NETWORK_GAME_INFO_VERSION = 6 */ + p->Send_uint8(send_newgrf_names ? NST_GRFID_MD5_NAME : NST_GRFID_MD5); + /* NETWORK_GAME_INFO_VERSION = 5 */ GameInfo *game_info = Game::GetInfo(); p->Send_uint32(game_info == nullptr ? -1 : (uint32)game_info->GetVersion()); @@ -216,7 +220,10 @@ void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info) /* Send actual GRF Identifications */ for (c = info->grfconfig; c != nullptr; c = c->next) { - if (!HasBit(c->flags, GCF_STATIC)) SerializeGRFIdentifier(p, &c->ident); + if (HasBit(c->flags, GCF_STATIC)) continue; + + SerializeGRFIdentifier(p, &c->ident); + if (send_newgrf_names) p->Send_string(c->GetName()); } } @@ -232,12 +239,10 @@ void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info) /* NETWORK_GAME_INFO_VERSION = 1 */ p->Send_string(info->server_name); p->Send_string(info->server_revision); - p->Send_uint8 (0); // Used to be server-lang. p->Send_bool (info->use_password); p->Send_uint8 (info->clients_max); p->Send_uint8 (info->clients_on); p->Send_uint8 (info->spectators_on); - p->Send_string(""); // Used to be map-name. p->Send_uint16(info->map_width); p->Send_uint16(info->map_height); p->Send_uint8 (info->landscape); @@ -254,6 +259,7 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info) static const Date MAX_DATE = ConvertYMDToDate(MAX_YEAR, 11, 31); // December is month 11 byte game_info_version = p->Recv_uint8(); + NewGRFSerializationType newgrf_serialisation = NST_GRFID_MD5; /* * Please observe the order. @@ -264,6 +270,11 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info) * to the NetworkGameInfo wire-protocol! */ switch (game_info_version) { + case 6: + newgrf_serialisation = (NewGRFSerializationType)p->Recv_uint8(); + if (newgrf_serialisation >= NST_END) return; + FALLTHROUGH; + case 5: { info->gamescript_version = (int)p->Recv_uint32(); info->gamescript_name = p->Recv_string(NETWORK_NAME_LENGTH); @@ -279,9 +290,23 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info) if (num_grfs > NETWORK_MAX_GRF_COUNT) return; for (i = 0; i < num_grfs; i++) { + NamedGRFIdentifier grf; + switch (newgrf_serialisation) { + case NST_GRFID_MD5: + DeserializeGRFIdentifier(p, &grf.ident); + break; + + case NST_GRFID_MD5_NAME: + DeserializeGRFIdentifierWithName(p, &grf); + break; + + default: + NOT_REACHED(); + } + GRFConfig *c = new GRFConfig(); - DeserializeGRFIdentifier(p, &c->ident); - HandleIncomingNetworkGameInfoGRFConfig(c); + c->ident = grf.ident; + HandleIncomingNetworkGameInfoGRFConfig(c, grf.name); /* Append GRFConfig to the list */ *dst = c; @@ -304,7 +329,7 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info) case 1: info->server_name = p->Recv_string(NETWORK_NAME_LENGTH); info->server_revision = p->Recv_string(NETWORK_REVISION_LENGTH); - p->Recv_uint8 (); // Used to contain server-lang. + if (game_info_version < 6) p->Recv_uint8 (); // Used to contain server-lang. info->use_password = p->Recv_bool (); info->clients_max = p->Recv_uint8 (); info->clients_on = p->Recv_uint8 (); @@ -313,7 +338,7 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info) info->game_date = p->Recv_uint16() + DAYS_TILL_ORIGINAL_BASE_YEAR; info->start_date = p->Recv_uint16() + DAYS_TILL_ORIGINAL_BASE_YEAR; } - while (p->Recv_uint8() != 0) {} // Used to contain the map-name. + if (game_info_version < 6) while (p->Recv_uint8() != 0) {} // Used to contain the map-name. info->map_width = p->Recv_uint16(); info->map_height = p->Recv_uint16(); info->landscape = p->Recv_uint8 (); @@ -350,3 +375,14 @@ void DeserializeGRFIdentifier(Packet *p, GRFIdentifier *grf) grf->md5sum[j] = p->Recv_uint8(); } } + +/** + * Deserializes the NamedGRFIdentifier (GRF ID, MD5 checksum and name) from the packet + * @param p the packet to read the data from. + * @param grf the NamedGRFIdentifier to deserialize. + */ +void DeserializeGRFIdentifierWithName(Packet *p, NamedGRFIdentifier *grf) +{ + DeserializeGRFIdentifier(p, &grf->ident); + grf->name = p->Recv_string(NETWORK_GRF_NAME_LENGTH); +} diff --git a/src/network/core/game_info.h b/src/network/core/game_info.h index a1719acd7e..1d17b6f410 100644 --- a/src/network/core/game_info.h +++ b/src/network/core/game_info.h @@ -25,14 +25,27 @@ * Version: Bytes: Description: * all 1 the version of this packet's structure * + * 6+ 1 type of storage for the NewGRFs below: + * 0 = NewGRF ID and MD5 checksum. + * Used as default for version 5 and below, and for + * later game updates to the Game Coordinator. + * 1 = NewGRF ID, MD5 checksum and name. + * Used for direct requests and the first game + * update to Game Coordinator. + * * 5+ 4 version number of the Game Script (-1 is case none is selected). * 5+ var string with the name of the Game Script. * - * 4+ 1 number of GRFs attached (n) - * 4+ n * 20 unique identifier for GRF files. Consists of: - * - one 4 byte variable with the GRF ID - * - 16 bytes (sent sequentially) for the MD5 checksum - * of the GRF + * 4+ 1 number of GRFs attached (n). + * 4+ n * var identifiers for GRF files. Consists of: + * Note: the 'vN' refers to packet version and 'type' + * refers to the v6+ type of storage for the NewGRFs. + * - 4 byte variable with the GRF ID. + * For v4, v5, and v6+ in case of type 0 and/or type 1. + * - 16 bytes with the MD5 checksum of the GRF. + * For v4, v5, and v6+ in case of type 0 and/or type 1. + * - string with name of NewGRF. + * For v6+ in case of type 1. * * 3+ 4 current game date in days since 1-1-0 (DMY) * 3+ 4 game introduction date in days since 1-1-0 (DMY) @@ -43,7 +56,7 @@ * * 1+ var string with the name of the server * 1+ var string with the revision of the server - * 1+ 1 the language run on the server + * 1 - 5 1 the language run on the server * (0 = any, 1 = English, 2 = German, 3 = French) * 1+ 1 whether the server uses a password (0 = no, 1 = yes) * 1+ 1 maximum number of clients allowed on the server @@ -51,7 +64,7 @@ * 1+ 1 number of spectators on the server * 1 & 2 2 current game date in days since 1-1-1920 (DMY) * 1 & 2 2 game introduction date in days since 1-1-1920 (DMY) - * 1+ var string with the name of the map + * 1 - 5 var string with the name of the map * 1+ 2 width of the map in tiles * 1+ 2 height of the map in tiles * 1+ 1 type of map: @@ -59,6 +72,13 @@ * 1+ 1 whether the server is dedicated (0 = no, 1 = yes) */ +/** The different types/ways a NewGRF can be serialized in the GameInfo since version 6. */ +enum NewGRFSerializationType { + NST_GRFID_MD5 = 0, ///< Unique GRF ID and MD5 checksum. + NST_GRFID_MD5_NAME = 1, ///< Unique GRF ID, MD5 checksum and name. + NST_END ///< The end of the list (period). +}; + /** * The game information that is sent from the server to the client. */ @@ -92,6 +112,15 @@ struct NetworkGameInfo : NetworkServerGameInfo { bool compatible; ///< Can we connect to this server or not? (based on server_revision _and_ grf_match }; +/** + * Container to hold the GRF identifier (GRF ID + MD5 checksum) and the name + * associated with that NewGRF. + */ +struct NamedGRFIdentifier { + GRFIdentifier ident; ///< The unique identifier of the NewGRF. + std::string name; ///< The name of the NewGRF. +}; + extern NetworkServerGameInfo _network_game_info; std::string_view GetNetworkRevisionString(); @@ -102,9 +131,10 @@ void FillStaticNetworkServerGameInfo(); const NetworkServerGameInfo *GetCurrentNetworkServerGameInfo(); void DeserializeGRFIdentifier(Packet *p, GRFIdentifier *grf); +void DeserializeGRFIdentifierWithName(Packet *p, NamedGRFIdentifier *grf); void SerializeGRFIdentifier(Packet *p, const GRFIdentifier *grf); void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info); -void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info); +void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info, bool send_newgrf_names = true); #endif /* NETWORK_CORE_GAME_INFO_H */ diff --git a/src/network/network_coordinator.cpp b/src/network/network_coordinator.cpp index bf8e062611..ab0f210505 100644 --- a/src/network/network_coordinator.cpp +++ b/src/network/network_coordinator.cpp @@ -410,13 +410,14 @@ void ClientNetworkCoordinatorSocketHandler::Register() void ClientNetworkCoordinatorSocketHandler::SendServerUpdate() { Debug(net, 6, "Sending server update to Game Coordinator"); - this->next_update = std::chrono::steady_clock::now() + NETWORK_COORDINATOR_DELAY_BETWEEN_UPDATES; Packet *p = new Packet(PACKET_COORDINATOR_SERVER_UPDATE, TCP_MTU); p->Send_uint8(NETWORK_COORDINATOR_VERSION); - SerializeNetworkGameInfo(p, GetCurrentNetworkServerGameInfo()); + SerializeNetworkGameInfo(p, GetCurrentNetworkServerGameInfo(), this->next_update.time_since_epoch() != std::chrono::nanoseconds::zero()); this->SendPacket(p); + + this->next_update = std::chrono::steady_clock::now() + NETWORK_COORDINATOR_DELAY_BETWEEN_UPDATES; } /** From 386ef4dac3c42a4454fb9cdfdcf7d6acfa9a3d0a Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sat, 17 Jul 2021 23:42:43 +0200 Subject: [PATCH 07/63] Feature: [Game Coordinator] Send NewGRF names to the client --- src/network/core/config.h | 2 +- src/network/core/game_info.cpp | 10 +++++++++- src/network/core/game_info.h | 12 +++++++++++- src/network/core/tcp_coordinator.cpp | 2 ++ src/network/core/tcp_coordinator.h | 25 +++++++++++++++++++++++++ src/network/network_coordinator.cpp | 15 ++++++++++++++- src/network/network_coordinator.h | 4 ++++ 7 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/network/core/config.h b/src/network/core/config.h index ccc9cd263d..1b66c26cf9 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -49,7 +49,7 @@ static const uint16 COMPAT_MTU = 1460; ///< Numbe static const byte NETWORK_GAME_ADMIN_VERSION = 1; ///< What version of the admin network do we use? static const byte NETWORK_GAME_INFO_VERSION = 6; ///< What version of game-info do we use? static const byte NETWORK_COMPANY_INFO_VERSION = 6; ///< What version of company info is this? -static const byte NETWORK_COORDINATOR_VERSION = 3; ///< What version of game-coordinator-protocol do we use? +static const byte NETWORK_COORDINATOR_VERSION = 4; ///< What version of game-coordinator-protocol do we use? static const uint NETWORK_NAME_LENGTH = 80; ///< The maximum length of the server name and map name, in bytes including '\0' static const uint NETWORK_COMPANY_NAME_LENGTH = 128; ///< The maximum length of the company name, in bytes including '\0' diff --git a/src/network/core/game_info.cpp b/src/network/core/game_info.cpp index 138053b054..85d66807b8 100644 --- a/src/network/core/game_info.cpp +++ b/src/network/core/game_info.cpp @@ -254,7 +254,7 @@ void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info, bool * @param p the packet to read the data from. * @param info the NetworkGameInfo to deserialize into. */ -void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info) +void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info, const GameInfoNewGRFLookupTable *newgrf_lookup_table) { static const Date MAX_DATE = ConvertYMDToDate(MAX_YEAR, 11, 31); // December is month 11 @@ -300,6 +300,14 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info) DeserializeGRFIdentifierWithName(p, &grf); break; + case NST_LOOKUP_ID: { + if (newgrf_lookup_table == nullptr) return; + auto it = newgrf_lookup_table->find(p->Recv_uint32()); + if (it == newgrf_lookup_table->end()) return; + grf = it->second; + break; + } + default: NOT_REACHED(); } diff --git a/src/network/core/game_info.h b/src/network/core/game_info.h index 1d17b6f410..91fd96ad9d 100644 --- a/src/network/core/game_info.h +++ b/src/network/core/game_info.h @@ -17,6 +17,8 @@ #include "../../newgrf_config.h" #include "../../date_type.h" +#include + /* * NetworkGameInfo has several revisions which we still need to support on the * wire. The table below shows the version and size for each field of the @@ -32,6 +34,9 @@ * 1 = NewGRF ID, MD5 checksum and name. * Used for direct requests and the first game * update to Game Coordinator. + * 2 = Index in NewGRF lookup table. + * Used for sending server listing from the Game + * Coordinator to the clients. * * 5+ 4 version number of the Game Script (-1 is case none is selected). * 5+ var string with the name of the Game Script. @@ -46,6 +51,8 @@ * For v4, v5, and v6+ in case of type 0 and/or type 1. * - string with name of NewGRF. * For v6+ in case of type 1. + * - 4 byte lookup table index. + * For v6+ in case of type 2. * * 3+ 4 current game date in days since 1-1-0 (DMY) * 3+ 4 game introduction date in days since 1-1-0 (DMY) @@ -76,6 +83,7 @@ enum NewGRFSerializationType { NST_GRFID_MD5 = 0, ///< Unique GRF ID and MD5 checksum. NST_GRFID_MD5_NAME = 1, ///< Unique GRF ID, MD5 checksum and name. + NST_LOOKUP_ID = 2, ///< Unique ID into a lookup table that is sent before. NST_END ///< The end of the list (period). }; @@ -120,6 +128,8 @@ struct NamedGRFIdentifier { GRFIdentifier ident; ///< The unique identifier of the NewGRF. std::string name; ///< The name of the NewGRF. }; +/** Lookup table for the GameInfo in case of #NST_LOOKUP_ID. */ +typedef std::unordered_map GameInfoNewGRFLookupTable; extern NetworkServerGameInfo _network_game_info; @@ -134,7 +144,7 @@ void DeserializeGRFIdentifier(Packet *p, GRFIdentifier *grf); void DeserializeGRFIdentifierWithName(Packet *p, NamedGRFIdentifier *grf); void SerializeGRFIdentifier(Packet *p, const GRFIdentifier *grf); -void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info); +void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info, const GameInfoNewGRFLookupTable *newgrf_lookup_table = nullptr); void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info, bool send_newgrf_names = true); #endif /* NETWORK_CORE_GAME_INFO_H */ diff --git a/src/network/core/tcp_coordinator.cpp b/src/network/core/tcp_coordinator.cpp index abcff9579c..75f3f246f0 100644 --- a/src/network/core/tcp_coordinator.cpp +++ b/src/network/core/tcp_coordinator.cpp @@ -42,6 +42,7 @@ bool NetworkCoordinatorSocketHandler::HandlePacket(Packet *p) case PACKET_COORDINATOR_GC_STUN_REQUEST: return this->Receive_GC_STUN_REQUEST(p); case PACKET_COORDINATOR_SERCLI_STUN_RESULT: return this->Receive_SERCLI_STUN_RESULT(p); case PACKET_COORDINATOR_GC_STUN_CONNECT: return this->Receive_GC_STUN_CONNECT(p); + case PACKET_COORDINATOR_GC_NEWGRF_LOOKUP: return this->Receive_GC_NEWGRF_LOOKUP(p); default: Debug(net, 0, "[tcp/coordinator] Received invalid packet type {}", type); @@ -100,3 +101,4 @@ bool NetworkCoordinatorSocketHandler::Receive_GC_DIRECT_CONNECT(Packet *p) { ret bool NetworkCoordinatorSocketHandler::Receive_GC_STUN_REQUEST(Packet *p) { return this->ReceiveInvalidPacket(PACKET_COORDINATOR_GC_STUN_REQUEST); } bool NetworkCoordinatorSocketHandler::Receive_SERCLI_STUN_RESULT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_COORDINATOR_SERCLI_STUN_RESULT); } bool NetworkCoordinatorSocketHandler::Receive_GC_STUN_CONNECT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_COORDINATOR_GC_STUN_CONNECT); } +bool NetworkCoordinatorSocketHandler::Receive_GC_NEWGRF_LOOKUP(Packet *p) { return this->ReceiveInvalidPacket(PACKET_COORDINATOR_GC_NEWGRF_LOOKUP); } diff --git a/src/network/core/tcp_coordinator.h b/src/network/core/tcp_coordinator.h index 40502e7e3f..b5395ad73a 100644 --- a/src/network/core/tcp_coordinator.h +++ b/src/network/core/tcp_coordinator.h @@ -41,6 +41,7 @@ enum PacketCoordinatorType { PACKET_COORDINATOR_GC_STUN_REQUEST, ///< Game Coordinator tells client/server to initiate a STUN request. PACKET_COORDINATOR_SERCLI_STUN_RESULT, ///< Client/server informs the Game Coordinator of the result of the STUN request. PACKET_COORDINATOR_GC_STUN_CONNECT, ///< Game Coordinator tells client/server to connect() reusing the STUN local address. + PACKET_COORDINATOR_GC_NEWGRF_LOOKUP, ///< Game Coordinator informs client about NewGRF lookup table updates needed for GC_LISTING. PACKET_COORDINATOR_END, ///< Must ALWAYS be on the end of this list!! (period) }; @@ -125,6 +126,7 @@ protected: * uint8 Game Coordinator protocol version. * uint8 Game-info version used by this client. * string Revision of the client. + * uint32 (Game Coordinator protocol >= 4) Cursor as received from GC_NEWGRF_LOOKUP, or zero. * * @param p The packet that was just received. * @return True upon success, otherwise false. @@ -263,6 +265,29 @@ protected: */ virtual bool Receive_GC_STUN_CONNECT(Packet *p); + /** + * Game Coordinator informs the client of updates for the NewGRFs lookup table + * as used by the NewGRF deserialization in GC_LISTING. + * This packet is sent after a CLIENT_LISTING request, but before GC_LISTING. + * + * uint32 Lookup table cursor. + * uint16 Number of NewGRFs in the packet, with for each of the NewGRFs: + * uint32 Lookup table index for the NewGRF. + * uint32 Unique NewGRF ID. + * byte[16] MD5 checksum of the NewGRF + * string Name of the NewGRF. + * + * The lookup table built using these packets are used by the deserialisation + * of the NewGRFs for servers in the GC_LISTING. These updates are additive, + * i.e. each update will add NewGRFs but never remove them. However, this + * lookup table is specific to the connection with the Game Coordinator, and + * should be considered invalid after disconnecting from the Game Coordinator. + * + * @param p The packet that was just received. + * @return True upon success, otherwise false. + */ + virtual bool Receive_GC_NEWGRF_LOOKUP(Packet *p); + bool HandlePacket(Packet *p); public: /** diff --git a/src/network/network_coordinator.cpp b/src/network/network_coordinator.cpp index ab0f210505..21937c7c6f 100644 --- a/src/network/network_coordinator.cpp +++ b/src/network/network_coordinator.cpp @@ -231,7 +231,7 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_LISTING(Packet *p) /* Read the NetworkGameInfo from the packet. */ NetworkGameInfo ngi = {}; - DeserializeNetworkGameInfo(p, &ngi); + DeserializeNetworkGameInfo(p, &ngi, &this->newgrf_lookup_table); /* Now we know the connection string, we can add it to our list. */ NetworkGameList *item = NetworkGameListAddItem(connection_string); @@ -347,6 +347,18 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_STUN_CONNECT(Packet *p) return true; } +bool ClientNetworkCoordinatorSocketHandler::Receive_GC_NEWGRF_LOOKUP(Packet *p) +{ + this->newgrf_lookup_table_cursor = p->Recv_uint32(); + + uint16 newgrfs = p->Recv_uint16(); + for (; newgrfs> 0; newgrfs--) { + uint32 index = p->Recv_uint32(); + DeserializeGRFIdentifierWithName(p, &this->newgrf_lookup_table[index]); + } + return true; +} + void ClientNetworkCoordinatorSocketHandler::Connect() { /* We are either already connected or are trying to connect. */ @@ -433,6 +445,7 @@ void ClientNetworkCoordinatorSocketHandler::GetListing() p->Send_uint8(NETWORK_COORDINATOR_VERSION); p->Send_uint8(NETWORK_GAME_INFO_VERSION); p->Send_string(_openttd_revision); + p->Send_uint32(this->newgrf_lookup_table_cursor); this->SendPacket(p); } diff --git a/src/network/network_coordinator.h b/src/network/network_coordinator.h index f6859f859f..63ced51210 100644 --- a/src/network/network_coordinator.h +++ b/src/network/network_coordinator.h @@ -54,6 +54,9 @@ private: std::map>> stun_handlers; ///< All pending STUN handlers, stored by token:family. TCPConnecter *game_connecter = nullptr; ///< Pending connecter to the game server. + uint32 newgrf_lookup_table_cursor = 0; ///< Last received cursor for the #GameInfoNewGRFLookupTable updates. + GameInfoNewGRFLookupTable newgrf_lookup_table; ///< Table to look up NewGRFs in the GC_LISTING packets. + protected: bool Receive_GC_ERROR(Packet *p) override; bool Receive_GC_REGISTER_ACK(Packet *p) override; @@ -63,6 +66,7 @@ protected: bool Receive_GC_DIRECT_CONNECT(Packet *p) override; bool Receive_GC_STUN_REQUEST(Packet *p) override; bool Receive_GC_STUN_CONNECT(Packet *p) override; + bool Receive_GC_NEWGRF_LOOKUP(Packet *p) override; public: /** The idle timeout; when to close the connection because it's idle. */ From 9421cb1e2cf05da208872bc16a0ac6cd19100a73 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 18 Jul 2021 18:50:19 +0000 Subject: [PATCH 08/63] Update: Translations from eints estonian: 1 change by siimsoni russian: 20 changes by Ln-Wolf --- src/lang/estonian.txt | 1 + src/lang/russian.txt | 25 ++++++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 2e6aaf0bc9..0693fce86a 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2099,6 +2099,7 @@ STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tee serv STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Tee oma server STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Sisesta enda nimi +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Sisesta serveri aadress või kutse kood # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Mitmikmängu alustamine diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 3cd55cf755..ea4623f6f3 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2147,7 +2147,9 @@ STR_FACE_EARRING :Серьга: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Изменить галстук или серьгу ############ Next lines match ServerGameType -STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Частный +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Локальный +STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Публичный +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :По приглашению ############ End of leave-in-this-order # Network server list @@ -2165,8 +2167,8 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Разм STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Размер карты игры{}Нажмите для сортировки по площади STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Дата STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Текущая дата -STR_NETWORK_SERVER_LIST_YEARS_CAPTION :{BLACK}Года -STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP :{BLACK}Количество лет{}в игре +STR_NETWORK_SERVER_LIST_YEARS_CAPTION :{BLACK}Лет +STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP :{BLACK}Количество лет, прошедших в игре STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Язык, версия сервера и{NBSP}т.{NBSP}п. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Выберите игру из списка @@ -2182,6 +2184,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Вер STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Адрес сервера: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Дата начала: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Текущая дата: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Игровой скрипт: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Защищён паролем! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}СЕРВЕР ОТКЛЮЧЁН STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}СЕРВЕР ЗАПОЛНЕН @@ -2197,11 +2200,12 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Поис STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Искать в ЛВС STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Поиск серверов в локальной сети STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Добавить сервер -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Добавить сервер в список, который будет автоматически проверяться на идущие игры +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Добавить в список новый сервер. Можно указать адрес сервера или код-приглашение. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Запуск сервера -STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Запуск сервера на вашем компьютере. К этой игре смогут подсоединяться другие игроки. +STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Запуск сервера на вашем компьютере STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Введите ваше имя +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Введите адрес сервера или код-приглашение # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Запуск новой сетевой игры @@ -2287,6 +2291,10 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Смен STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Название сервера STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Видимость STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Видимость вашего сервера в публичном списке +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Приглашение +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Код-приглашение, с помощью которого другие игроки смогут подключиться к вашему серверу +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Подключение +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Способ подключения других игроков к вашему серверу STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Игрок STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Имя STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Ваше игровое имя @@ -2306,6 +2314,10 @@ STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Это STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} клиент{P "" а ов} / {NUM} компани{P я и й} ############ Begin of ConnectionType +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Локальное +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Другие игроки не могут подключиться +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Публичное +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Сервер за NAT ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Отключить @@ -2435,6 +2447,9 @@ STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Серв STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Сервер перезапускается...{}Пожалуйста, подождите... STR_NETWORK_MESSAGE_KICKED :*** {STRING} был исключён из игры. Причина: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Не удалось зарегистрировать сервер +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Клиентские подключения к вашему серверу запрещены +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Другие игроки не смогут подключиться к вашему серверу # Content downloading window STR_CONTENT_TITLE :{WHITE}Загрузка контента From 1e529e16329b905e625bb69cc501edbc478186bc Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 19 Jul 2021 10:36:35 +0100 Subject: [PATCH 09/63] Fix: [Fluidsynth] Crash when debug output enabled (#9446) --- src/music/fluidsynth.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp index dc1a0a3196..211bc959eb 100644 --- a/src/music/fluidsynth.cpp +++ b/src/music/fluidsynth.cpp @@ -65,7 +65,7 @@ const char *MusicDriver_FluidSynth::Start(const StringList ¶m) const char *sfont_name = GetDriverParam(param, "soundfont"); int sfont_id; - Debug(driver, 1, "Fluidsynth: sf {}", sfont_name); + Debug(driver, 1, "Fluidsynth: sf {}", sfont_name != nullptr ? sfont_name : "(null)"); /* Create the settings. */ _midi.settings = new_fluid_settings(); From d1cf56609defb1ea8bd5d642f6df1bccb000d7d6 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 19 Jul 2021 18:53:13 +0000 Subject: [PATCH 10/63] Update: Translations from eints german: 1 change by danidoedel --- src/lang/german.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/german.txt b/src/lang/german.txt index bd41434e1e..fc474cfa36 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2165,6 +2165,7 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} Cl STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Lokal STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Nicht-lokale Spieler können sich nicht verbinden STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Öffentlich +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Hinter NAT ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Hinauswerfen From 9b0bb21f3b0cb9fb29ef7413900752eca5421b2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Mon, 19 Jul 2021 22:38:36 +0200 Subject: [PATCH 11/63] Fix 57734fd: Don't enable rename button for network clients in build vehicle window (#9452) --- src/build_vehicle_gui.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index f88a7ee144..547ac3e003 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1097,9 +1097,6 @@ struct BuildVehicleWindow : Window { * So we just hide it, and enlarge the Rename button by the now vacant place. */ if (this->listview_mode) this->GetWidget(WID_BV_BUILD_SEL)->SetDisplayedPlane(SZSP_NONE); - /* disable renaming engines in network games if you are not the server */ - this->SetWidgetDisabledState(WID_BV_RENAME, _networking && !_network_server); - NWidgetCore *widget = this->GetWidget(WID_BV_LIST); widget->tool_tip = STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP + type; @@ -1608,7 +1605,10 @@ struct BuildVehicleWindow : Window { this->GenerateBuildList(); this->vscroll->SetCount((uint)this->eng_list.size()); - this->SetWidgetsDisabledState(this->sel_engine == INVALID_ENGINE, WID_BV_SHOW_HIDE, WID_BV_BUILD, WID_BV_RENAME, WIDGET_LIST_END); + this->SetWidgetsDisabledState(this->sel_engine == INVALID_ENGINE, WID_BV_SHOW_HIDE, WID_BV_BUILD, WIDGET_LIST_END); + + /* Disable renaming engines in network games if you are not the server. */ + this->SetWidgetDisabledState(WID_BV_RENAME, this->sel_engine == INVALID_ENGINE || (_networking && !_network_server)); this->DrawWidgets(); From 1e439979f7e359543fdb0c86238d51f64e161625 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 19 Jul 2021 12:41:31 +0100 Subject: [PATCH 12/63] Fix: OverflowSafeInt negation not handling INT64_MIN INT64_MIN negated is above INT64_MAX, and would overflow. Instead, when negating INT64_MIN make it INT64_MAX. This does mean that -(-(INT64_MIN)) != INT64_MIN. --- src/core/overflowsafe_type.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp index 2b1edeeded..0a9df59203 100644 --- a/src/core/overflowsafe_type.hpp +++ b/src/core/overflowsafe_type.hpp @@ -34,7 +34,7 @@ public: inline OverflowSafeInt& operator = (const OverflowSafeInt& other) { this->m_value = other.m_value; return *this; } - inline OverflowSafeInt operator - () const { return OverflowSafeInt(-this->m_value); } + inline OverflowSafeInt operator - () const { return OverflowSafeInt(this->m_value == T_MIN ? T_MAX : -this->m_value); } /** * Safe implementation of addition. From 3d0d9edafd9199c0bd17e983e8f31e417b85d25d Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 19 Jul 2021 12:53:08 +0100 Subject: [PATCH 13/63] Fix: OverflowSafeInt could underflow Notably, a company with an extremely negative amount of money would suddenly become very rich --- src/core/overflowsafe_type.hpp | 42 ++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp index 0a9df59203..00d0dfca15 100644 --- a/src/core/overflowsafe_type.hpp +++ b/src/core/overflowsafe_type.hpp @@ -39,25 +39,41 @@ public: /** * Safe implementation of addition. * @param other the amount to add - * @note when the addition would yield more than T_MAX (or less than T_MIN), - * it will be T_MAX (respectively T_MIN). + * @note when the addition would yield more than T_MAX, it will be T_MAX. */ inline OverflowSafeInt& operator += (const OverflowSafeInt& other) { - if ((T_MAX - abs(other.m_value)) < abs(this->m_value) && - (this->m_value < 0) == (other.m_value < 0)) { - this->m_value = (this->m_value < 0) ? T_MIN : T_MAX ; + if (this->m_value > 0 && other.m_value > 0 && (T_MAX - other.m_value) < this->m_value) { + this->m_value = T_MAX; + } else if (this->m_value < 0 && other.m_value < 0 && (this->m_value == T_MIN || other.m_value == T_MIN || ((T_MAX + this->m_value) + other.m_value < (T_MIN + T_MAX)))) { + this->m_value = T_MIN; } else { this->m_value += other.m_value; } return *this; } + /** + * Safe implementation of subtraction. + * @param other the amount to subtract + * @note when the subtraction would yield less than T_MIN, it will be T_MIN. + */ + inline OverflowSafeInt& operator -= (const OverflowSafeInt& other) + { + if (this->m_value > 0 && other.m_value < 0 && (T_MAX + other.m_value) < this->m_value) { + this->m_value = T_MAX; + } else if (this->m_value < 0 && other.m_value > 0 && (T_MAX + this->m_value) < (T_MIN + T_MAX) + other.m_value) { + this->m_value = T_MIN; + } else { + this->m_value -= other.m_value; + } + return *this; + } + /* Operators for addition and subtraction */ inline OverflowSafeInt operator + (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result += other; return result; } inline OverflowSafeInt operator + (const int other) const { OverflowSafeInt result = *this; result += (int64)other; return result; } inline OverflowSafeInt operator + (const uint other) const { OverflowSafeInt result = *this; result += (int64)other; return result; } - inline OverflowSafeInt& operator -= (const OverflowSafeInt& other) { return *this += (-other); } inline OverflowSafeInt operator - (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result -= other; return result; } inline OverflowSafeInt operator - (const int other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; } inline OverflowSafeInt operator - (const uint other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; } @@ -75,10 +91,18 @@ public: */ inline OverflowSafeInt& operator *= (const int factor) { - if (factor != 0 && (T_MAX / abs(factor)) < abs(this->m_value)) { - this->m_value = ((this->m_value < 0) == (factor < 0)) ? T_MAX : T_MIN ; + if (factor == -1) { + this->m_value = (this->m_value == T_MIN) ? T_MAX : -this->m_value; + } else if (factor > 0 && this->m_value > 0 && (T_MAX / factor) < this->m_value) { + this->m_value = T_MAX; + } else if (factor > 0 && this->m_value < 0 && (T_MIN / factor) > this->m_value) { + this->m_value = T_MIN; + } else if (factor < 0 && this->m_value > 0 && (T_MIN / factor) < this->m_value) { + this->m_value = T_MIN; + } else if (factor < 0 && this->m_value < 0 && (T_MAX / factor) > this->m_value) { + this->m_value = T_MAX; } else { - this->m_value *= factor ; + this->m_value *= factor; } return *this; } From e6e2a67aa10b39f322677bc144da230593de2d78 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 19 Jul 2021 12:58:36 +0100 Subject: [PATCH 14/63] Codechange: Use GCC/clang builtins for overflow safety when supported --- src/core/overflowsafe_type.hpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp index 00d0dfca15..3f2948551c 100644 --- a/src/core/overflowsafe_type.hpp +++ b/src/core/overflowsafe_type.hpp @@ -12,6 +12,12 @@ #include "math_func.hpp" +#ifdef __has_builtin +# if __has_builtin(__builtin_add_overflow) && __has_builtin(__builtin_sub_overflow) && __has_builtin(__builtin_mul_overflow) +# define HAS_OVERFLOW_BUILTINS +# endif +#endif + /** * Overflow safe template for integers, i.e. integers that will never overflow * you multiply the maximum value with 2, or add 2, or subtract something from @@ -43,6 +49,11 @@ public: */ inline OverflowSafeInt& operator += (const OverflowSafeInt& other) { +#ifdef HAS_OVERFLOW_BUILTINS + if (unlikely(__builtin_add_overflow(this->m_value, other.m_value, &this->m_value))) { + this->m_value = (other.m_value < 0) ? T_MIN : T_MAX; + } +#else if (this->m_value > 0 && other.m_value > 0 && (T_MAX - other.m_value) < this->m_value) { this->m_value = T_MAX; } else if (this->m_value < 0 && other.m_value < 0 && (this->m_value == T_MIN || other.m_value == T_MIN || ((T_MAX + this->m_value) + other.m_value < (T_MIN + T_MAX)))) { @@ -50,6 +61,7 @@ public: } else { this->m_value += other.m_value; } +#endif return *this; } @@ -60,6 +72,11 @@ public: */ inline OverflowSafeInt& operator -= (const OverflowSafeInt& other) { +#ifdef HAS_OVERFLOW_BUILTINS + if (unlikely(__builtin_sub_overflow(this->m_value, other.m_value, &this->m_value))) { + this->m_value = (other.m_value < 0) ? T_MAX : T_MIN; + } +#else if (this->m_value > 0 && other.m_value < 0 && (T_MAX + other.m_value) < this->m_value) { this->m_value = T_MAX; } else if (this->m_value < 0 && other.m_value > 0 && (T_MAX + this->m_value) < (T_MIN + T_MAX) + other.m_value) { @@ -67,6 +84,7 @@ public: } else { this->m_value -= other.m_value; } +#endif return *this; } @@ -91,6 +109,12 @@ public: */ inline OverflowSafeInt& operator *= (const int factor) { +#ifdef HAS_OVERFLOW_BUILTINS + bool is_result_positive = (this->m_value < 0) == (factor < 0); // -ve * -ve == +ve + if (unlikely(__builtin_mul_overflow(this->m_value, factor, &this->m_value))) { + this->m_value = is_result_positive ? T_MAX : T_MIN; + } +#else if (factor == -1) { this->m_value = (this->m_value == T_MIN) ? T_MAX : -this->m_value; } else if (factor > 0 && this->m_value > 0 && (T_MAX / factor) < this->m_value) { @@ -104,6 +128,7 @@ public: } else { this->m_value *= factor; } +#endif return *this; } @@ -176,4 +201,6 @@ template inline OverflowSafeInt OverflowSafeInt64; typedef OverflowSafeInt OverflowSafeInt32; +#undef HAS_OVERFLOW_BUILTINS + #endif /* OVERFLOWSAFE_TYPE_HPP */ From 549a58731f332e8056eb3b35f6110b92b3c25350 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Tue, 20 Jul 2021 08:19:00 +0100 Subject: [PATCH 15/63] Codechange: Remove (unused) ability to specify min/max of OverflowSafeInt --- src/core/overflowsafe_type.hpp | 45 ++++++++++++++++--------------- src/script/api/script_company.cpp | 4 +-- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp index 3f2948551c..01400df0ad 100644 --- a/src/core/overflowsafe_type.hpp +++ b/src/core/overflowsafe_type.hpp @@ -12,6 +12,8 @@ #include "math_func.hpp" +#include + #ifdef __has_builtin # if __has_builtin(__builtin_add_overflow) && __has_builtin(__builtin_sub_overflow) && __has_builtin(__builtin_mul_overflow) # define HAS_OVERFLOW_BUILTINS @@ -23,13 +25,14 @@ * you multiply the maximum value with 2, or add 2, or subtract something from * the minimum value, etc. * @param T the type these integers are stored with. - * @param T_MAX the maximum value for the integers. - * @param T_MIN the minimum value for the integers. */ -template +template class OverflowSafeInt { private: + static constexpr T T_MAX = std::numeric_limits::max(); + static constexpr T T_MIN = std::numeric_limits::min(); + /** The non-overflow safe backend to store the value in. */ T m_value; public: @@ -175,31 +178,31 @@ public: }; /* Sometimes we got int64 operator OverflowSafeInt instead of vice versa. Handle that properly */ -template inline OverflowSafeInt operator + (int64 a, OverflowSafeInt b) { return b + a; } -template inline OverflowSafeInt operator - (int64 a, OverflowSafeInt b) { return -b + a; } -template inline OverflowSafeInt operator * (int64 a, OverflowSafeInt b) { return b * a; } -template inline OverflowSafeInt operator / (int64 a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } +template inline OverflowSafeInt operator + (int64 a, OverflowSafeInt b) { return b + a; } +template inline OverflowSafeInt operator - (int64 a, OverflowSafeInt b) { return -b + a; } +template inline OverflowSafeInt operator * (int64 a, OverflowSafeInt b) { return b * a; } +template inline OverflowSafeInt operator / (int64 a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } /* Sometimes we got int operator OverflowSafeInt instead of vice versa. Handle that properly */ -template inline OverflowSafeInt operator + (int a, OverflowSafeInt b) { return b + a; } -template inline OverflowSafeInt operator - (int a, OverflowSafeInt b) { return -b + a; } -template inline OverflowSafeInt operator * (int a, OverflowSafeInt b) { return b * a; } -template inline OverflowSafeInt operator / (int a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } +template inline OverflowSafeInt operator + (int a, OverflowSafeInt b) { return b + a; } +template inline OverflowSafeInt operator - (int a, OverflowSafeInt b) { return -b + a; } +template inline OverflowSafeInt operator * (int a, OverflowSafeInt b) { return b * a; } +template inline OverflowSafeInt operator / (int a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } /* Sometimes we got uint operator OverflowSafeInt instead of vice versa. Handle that properly */ -template inline OverflowSafeInt operator + (uint a, OverflowSafeInt b) { return b + a; } -template inline OverflowSafeInt operator - (uint a, OverflowSafeInt b) { return -b + a; } -template inline OverflowSafeInt operator * (uint a, OverflowSafeInt b) { return b * a; } -template inline OverflowSafeInt operator / (uint a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } +template inline OverflowSafeInt operator + (uint a, OverflowSafeInt b) { return b + a; } +template inline OverflowSafeInt operator - (uint a, OverflowSafeInt b) { return -b + a; } +template inline OverflowSafeInt operator * (uint a, OverflowSafeInt b) { return b * a; } +template inline OverflowSafeInt operator / (uint a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } /* Sometimes we got byte operator OverflowSafeInt instead of vice versa. Handle that properly */ -template inline OverflowSafeInt operator + (byte a, OverflowSafeInt b) { return b + (uint)a; } -template inline OverflowSafeInt operator - (byte a, OverflowSafeInt b) { return -b + (uint)a; } -template inline OverflowSafeInt operator * (byte a, OverflowSafeInt b) { return b * (uint)a; } -template inline OverflowSafeInt operator / (byte a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } +template inline OverflowSafeInt operator + (byte a, OverflowSafeInt b) { return b + (uint)a; } +template inline OverflowSafeInt operator - (byte a, OverflowSafeInt b) { return -b + (uint)a; } +template inline OverflowSafeInt operator * (byte a, OverflowSafeInt b) { return b * (uint)a; } +template inline OverflowSafeInt operator / (byte a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } -typedef OverflowSafeInt OverflowSafeInt64; -typedef OverflowSafeInt OverflowSafeInt32; +typedef OverflowSafeInt OverflowSafeInt64; +typedef OverflowSafeInt OverflowSafeInt32; #undef HAS_OVERFLOW_BUILTINS diff --git a/src/script/api/script_company.cpp b/src/script/api/script_company.cpp index 9f5722c100..dddcc950c7 100644 --- a/src/script/api/script_company.cpp +++ b/src/script/api/script_company.cpp @@ -140,9 +140,9 @@ if (quarter > EARLIEST_QUARTER) return -1; if (quarter == CURRENT_QUARTER) { - return ::Company::Get(company)->cur_economy.delivered_cargo.GetSum >(); + return ::Company::Get(company)->cur_economy.delivered_cargo.GetSum(); } - return ::Company::Get(company)->old_economy[quarter - 1].delivered_cargo.GetSum >(); + return ::Company::Get(company)->old_economy[quarter - 1].delivered_cargo.GetSum(); } /* static */ int32 ScriptCompany::GetQuarterlyPerformanceRating(ScriptCompany::CompanyID company, uint32 quarter) From f1dfc2f482daa69d037f7c80b5744547c34f5628 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Tue, 20 Jul 2021 09:05:08 +0100 Subject: [PATCH 16/63] Codechange: Make OverflowSafeInt constexpr --- src/core/overflowsafe_type.hpp | 153 +++++++++++++++++---------------- 1 file changed, 80 insertions(+), 73 deletions(-) diff --git a/src/core/overflowsafe_type.hpp b/src/core/overflowsafe_type.hpp index 01400df0ad..0976a090be 100644 --- a/src/core/overflowsafe_type.hpp +++ b/src/core/overflowsafe_type.hpp @@ -36,21 +36,21 @@ private: /** The non-overflow safe backend to store the value in. */ T m_value; public: - OverflowSafeInt() : m_value(0) { } + constexpr OverflowSafeInt() : m_value(0) { } - OverflowSafeInt(const OverflowSafeInt& other) { this->m_value = other.m_value; } - OverflowSafeInt(const int64 int_) { this->m_value = int_; } + constexpr OverflowSafeInt(const OverflowSafeInt& other) : m_value(other.m_value) { } + constexpr OverflowSafeInt(const int64 int_) : m_value(int_) { } - inline OverflowSafeInt& operator = (const OverflowSafeInt& other) { this->m_value = other.m_value; return *this; } + inline constexpr OverflowSafeInt& operator = (const OverflowSafeInt& other) { this->m_value = other.m_value; return *this; } - inline OverflowSafeInt operator - () const { return OverflowSafeInt(this->m_value == T_MIN ? T_MAX : -this->m_value); } + inline constexpr OverflowSafeInt operator - () const { return OverflowSafeInt(this->m_value == T_MIN ? T_MAX : -this->m_value); } /** * Safe implementation of addition. * @param other the amount to add * @note when the addition would yield more than T_MAX, it will be T_MAX. */ - inline OverflowSafeInt& operator += (const OverflowSafeInt& other) + inline constexpr OverflowSafeInt& operator += (const OverflowSafeInt& other) { #ifdef HAS_OVERFLOW_BUILTINS if (unlikely(__builtin_add_overflow(this->m_value, other.m_value, &this->m_value))) { @@ -73,7 +73,7 @@ public: * @param other the amount to subtract * @note when the subtraction would yield less than T_MIN, it will be T_MIN. */ - inline OverflowSafeInt& operator -= (const OverflowSafeInt& other) + inline constexpr OverflowSafeInt& operator -= (const OverflowSafeInt& other) { #ifdef HAS_OVERFLOW_BUILTINS if (unlikely(__builtin_sub_overflow(this->m_value, other.m_value, &this->m_value))) { @@ -91,18 +91,18 @@ public: return *this; } - /* Operators for addition and subtraction */ - inline OverflowSafeInt operator + (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result += other; return result; } - inline OverflowSafeInt operator + (const int other) const { OverflowSafeInt result = *this; result += (int64)other; return result; } - inline OverflowSafeInt operator + (const uint other) const { OverflowSafeInt result = *this; result += (int64)other; return result; } - inline OverflowSafeInt operator - (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result -= other; return result; } - inline OverflowSafeInt operator - (const int other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; } - inline OverflowSafeInt operator - (const uint other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; } + /* Operators for addition and subtraction. */ + inline constexpr OverflowSafeInt operator + (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result += other; return result; } + inline constexpr OverflowSafeInt operator + (const int other) const { OverflowSafeInt result = *this; result += (int64)other; return result; } + inline constexpr OverflowSafeInt operator + (const uint other) const { OverflowSafeInt result = *this; result += (int64)other; return result; } + inline constexpr OverflowSafeInt operator - (const OverflowSafeInt& other) const { OverflowSafeInt result = *this; result -= other; return result; } + inline constexpr OverflowSafeInt operator - (const int other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; } + inline constexpr OverflowSafeInt operator - (const uint other) const { OverflowSafeInt result = *this; result -= (int64)other; return result; } - inline OverflowSafeInt& operator ++ () { return *this += 1; } - inline OverflowSafeInt& operator -- () { return *this += -1; } - inline OverflowSafeInt operator ++ (int) { OverflowSafeInt org = *this; *this += 1; return org; } - inline OverflowSafeInt operator -- (int) { OverflowSafeInt org = *this; *this += -1; return org; } + inline constexpr OverflowSafeInt& operator ++ () { return *this += 1; } + inline constexpr OverflowSafeInt& operator -- () { return *this += -1; } + inline constexpr OverflowSafeInt operator ++ (int) { OverflowSafeInt org = *this; *this += 1; return org; } + inline constexpr OverflowSafeInt operator -- (int) { OverflowSafeInt org = *this; *this += -1; return org; } /** * Safe implementation of multiplication. @@ -110,10 +110,10 @@ public: * @note when the multiplication would yield more than T_MAX (or less than T_MIN), * it will be T_MAX (respectively T_MIN). */ - inline OverflowSafeInt& operator *= (const int factor) + inline constexpr OverflowSafeInt& operator *= (const int factor) { #ifdef HAS_OVERFLOW_BUILTINS - bool is_result_positive = (this->m_value < 0) == (factor < 0); // -ve * -ve == +ve + const bool is_result_positive = (this->m_value < 0) == (factor < 0); // -ve * -ve == +ve if (unlikely(__builtin_mul_overflow(this->m_value, factor, &this->m_value))) { this->m_value = is_result_positive ? T_MAX : T_MIN; } @@ -135,75 +135,82 @@ public: return *this; } - /* Operators for multiplication */ - inline OverflowSafeInt operator * (const int64 factor) const { OverflowSafeInt result = *this; result *= factor; return result; } - inline OverflowSafeInt operator * (const int factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; } - inline OverflowSafeInt operator * (const uint factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; } - inline OverflowSafeInt operator * (const uint16 factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; } - inline OverflowSafeInt operator * (const byte factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; } + /* Operators for multiplication. */ + inline constexpr OverflowSafeInt operator * (const int64 factor) const { OverflowSafeInt result = *this; result *= factor; return result; } + inline constexpr OverflowSafeInt operator * (const int factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; } + inline constexpr OverflowSafeInt operator * (const uint factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; } + inline constexpr OverflowSafeInt operator * (const uint16 factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; } + inline constexpr OverflowSafeInt operator * (const byte factor) const { OverflowSafeInt result = *this; result *= (int64)factor; return result; } - /* Operators for division */ - inline OverflowSafeInt& operator /= (const int64 divisor) { this->m_value /= divisor; return *this; } - inline OverflowSafeInt operator / (const OverflowSafeInt& divisor) const { OverflowSafeInt result = *this; result /= divisor.m_value; return result; } - inline OverflowSafeInt operator / (const int divisor) const { OverflowSafeInt result = *this; result /= divisor; return result; } - inline OverflowSafeInt operator / (const uint divisor) const { OverflowSafeInt result = *this; result /= (int)divisor; return result; } + /* Operators for division. */ + inline constexpr OverflowSafeInt& operator /= (const int64 divisor) { this->m_value /= divisor; return *this; } + inline constexpr OverflowSafeInt operator / (const OverflowSafeInt& divisor) const { OverflowSafeInt result = *this; result /= divisor.m_value; return result; } + inline constexpr OverflowSafeInt operator / (const int divisor) const { OverflowSafeInt result = *this; result /= divisor; return result; } + inline constexpr OverflowSafeInt operator / (const uint divisor) const { OverflowSafeInt result = *this; result /= (int)divisor; return result; } /* Operators for modulo */ - inline OverflowSafeInt& operator %= (const int divisor) { this->m_value %= divisor; return *this; } - inline OverflowSafeInt operator % (const int divisor) const { OverflowSafeInt result = *this; result %= divisor; return result; } + inline constexpr OverflowSafeInt& operator %= (const int divisor) { this->m_value %= divisor; return *this; } + inline constexpr OverflowSafeInt operator % (const int divisor) const { OverflowSafeInt result = *this; result %= divisor; return result; } - /* Operators for shifting */ - inline OverflowSafeInt& operator <<= (const int shift) { this->m_value <<= shift; return *this; } - inline OverflowSafeInt operator << (const int shift) const { OverflowSafeInt result = *this; result <<= shift; return result; } - inline OverflowSafeInt& operator >>= (const int shift) { this->m_value >>= shift; return *this; } - inline OverflowSafeInt operator >> (const int shift) const { OverflowSafeInt result = *this; result >>= shift; return result; } + /* Operators for shifting. */ + inline constexpr OverflowSafeInt& operator <<= (const int shift) { this->m_value <<= shift; return *this; } + inline constexpr OverflowSafeInt operator << (const int shift) const { OverflowSafeInt result = *this; result <<= shift; return result; } + inline constexpr OverflowSafeInt& operator >>= (const int shift) { this->m_value >>= shift; return *this; } + inline constexpr OverflowSafeInt operator >> (const int shift) const { OverflowSafeInt result = *this; result >>= shift; return result; } - /* Operators for (in)equality when comparing overflow safe ints */ - inline bool operator == (const OverflowSafeInt& other) const { return this->m_value == other.m_value; } - inline bool operator != (const OverflowSafeInt& other) const { return !(*this == other); } - inline bool operator > (const OverflowSafeInt& other) const { return this->m_value > other.m_value; } - inline bool operator >= (const OverflowSafeInt& other) const { return this->m_value >= other.m_value; } - inline bool operator < (const OverflowSafeInt& other) const { return !(*this >= other); } - inline bool operator <= (const OverflowSafeInt& other) const { return !(*this > other); } + /* Operators for (in)equality when comparing overflow safe ints. */ + inline constexpr bool operator == (const OverflowSafeInt& other) const { return this->m_value == other.m_value; } + inline constexpr bool operator != (const OverflowSafeInt& other) const { return !(*this == other); } + inline constexpr bool operator > (const OverflowSafeInt& other) const { return this->m_value > other.m_value; } + inline constexpr bool operator >= (const OverflowSafeInt& other) const { return this->m_value >= other.m_value; } + inline constexpr bool operator < (const OverflowSafeInt& other) const { return !(*this >= other); } + inline constexpr bool operator <= (const OverflowSafeInt& other) const { return !(*this > other); } - /* Operators for (in)equality when comparing non-overflow safe ints */ - inline bool operator == (const int other) const { return this->m_value == other; } - inline bool operator != (const int other) const { return !(*this == other); } - inline bool operator > (const int other) const { return this->m_value > other; } - inline bool operator >= (const int other) const { return this->m_value >= other; } - inline bool operator < (const int other) const { return !(*this >= other); } - inline bool operator <= (const int other) const { return !(*this > other); } + /* Operators for (in)equality when comparing non-overflow safe ints. */ + inline constexpr bool operator == (const int other) const { return this->m_value == other; } + inline constexpr bool operator != (const int other) const { return !(*this == other); } + inline constexpr bool operator > (const int other) const { return this->m_value > other; } + inline constexpr bool operator >= (const int other) const { return this->m_value >= other; } + inline constexpr bool operator < (const int other) const { return !(*this >= other); } + inline constexpr bool operator <= (const int other) const { return !(*this > other); } - inline operator int64 () const { return this->m_value; } + inline constexpr operator int64 () const { return this->m_value; } }; -/* Sometimes we got int64 operator OverflowSafeInt instead of vice versa. Handle that properly */ -template inline OverflowSafeInt operator + (int64 a, OverflowSafeInt b) { return b + a; } -template inline OverflowSafeInt operator - (int64 a, OverflowSafeInt b) { return -b + a; } -template inline OverflowSafeInt operator * (int64 a, OverflowSafeInt b) { return b * a; } -template inline OverflowSafeInt operator / (int64 a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } -/* Sometimes we got int operator OverflowSafeInt instead of vice versa. Handle that properly */ -template inline OverflowSafeInt operator + (int a, OverflowSafeInt b) { return b + a; } -template inline OverflowSafeInt operator - (int a, OverflowSafeInt b) { return -b + a; } -template inline OverflowSafeInt operator * (int a, OverflowSafeInt b) { return b * a; } -template inline OverflowSafeInt operator / (int a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } +/* Sometimes we got int64 operator OverflowSafeInt instead of vice versa. Handle that properly. */ +template inline constexpr OverflowSafeInt operator + (const int64 a, const OverflowSafeInt b) { return b + a; } +template inline constexpr OverflowSafeInt operator - (const int64 a, const OverflowSafeInt b) { return -b + a; } +template inline constexpr OverflowSafeInt operator * (const int64 a, const OverflowSafeInt b) { return b * a; } +template inline constexpr OverflowSafeInt operator / (const int64 a, const OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } -/* Sometimes we got uint operator OverflowSafeInt instead of vice versa. Handle that properly */ -template inline OverflowSafeInt operator + (uint a, OverflowSafeInt b) { return b + a; } -template inline OverflowSafeInt operator - (uint a, OverflowSafeInt b) { return -b + a; } -template inline OverflowSafeInt operator * (uint a, OverflowSafeInt b) { return b * a; } -template inline OverflowSafeInt operator / (uint a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } +/* Sometimes we got int operator OverflowSafeInt instead of vice versa. Handle that properly. */ +template inline constexpr OverflowSafeInt operator + (const int a, const OverflowSafeInt b) { return b + a; } +template inline constexpr OverflowSafeInt operator - (const int a, const OverflowSafeInt b) { return -b + a; } +template inline constexpr OverflowSafeInt operator * (const int a, const OverflowSafeInt b) { return b * a; } +template inline constexpr OverflowSafeInt operator / (const int a, const OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } -/* Sometimes we got byte operator OverflowSafeInt instead of vice versa. Handle that properly */ -template inline OverflowSafeInt operator + (byte a, OverflowSafeInt b) { return b + (uint)a; } -template inline OverflowSafeInt operator - (byte a, OverflowSafeInt b) { return -b + (uint)a; } -template inline OverflowSafeInt operator * (byte a, OverflowSafeInt b) { return b * (uint)a; } -template inline OverflowSafeInt operator / (byte a, OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } +/* Sometimes we got uint operator OverflowSafeInt instead of vice versa. Handle that properly. */ +template inline constexpr OverflowSafeInt operator + (const uint a, const OverflowSafeInt b) { return b + a; } +template inline constexpr OverflowSafeInt operator - (const uint a, const OverflowSafeInt b) { return -b + a; } +template inline constexpr OverflowSafeInt operator * (const uint a, const OverflowSafeInt b) { return b * a; } +template inline constexpr OverflowSafeInt operator / (const uint a, const OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } + +/* Sometimes we got byte operator OverflowSafeInt instead of vice versa. Handle that properly. */ +template inline constexpr OverflowSafeInt operator + (const byte a, const OverflowSafeInt b) { return b + (uint)a; } +template inline constexpr OverflowSafeInt operator - (const byte a, const OverflowSafeInt b) { return -b + (uint)a; } +template inline constexpr OverflowSafeInt operator * (const byte a, const OverflowSafeInt b) { return b * (uint)a; } +template inline constexpr OverflowSafeInt operator / (const byte a, const OverflowSafeInt b) { return (OverflowSafeInt)a / (int)b; } typedef OverflowSafeInt OverflowSafeInt64; typedef OverflowSafeInt OverflowSafeInt32; +/* Some basic "unit tests". Also has the bonus of confirming that constexpr is working. */ +static_assert(OverflowSafeInt32(INT32_MIN) - 1 == OverflowSafeInt32(INT32_MIN)); +static_assert(OverflowSafeInt32(INT32_MAX) + 1 == OverflowSafeInt32(INT32_MAX)); +static_assert(OverflowSafeInt32(INT32_MAX) * 2 == OverflowSafeInt32(INT32_MAX)); +static_assert(OverflowSafeInt32(INT32_MIN) * 2 == OverflowSafeInt32(INT32_MIN)); + #undef HAS_OVERFLOW_BUILTINS #endif /* OVERFLOWSAFE_TYPE_HPP */ From 8a361340037d6908c9a4df10aefdb58860a22b80 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 19 Jul 2021 19:32:22 +0200 Subject: [PATCH 17/63] Fix: [Network] rework when to close connections and inform Game Coordinator if needed --- src/network/network.cpp | 2 +- src/network/network_coordinator.cpp | 61 ++++++++++++++--------------- src/network/network_coordinator.h | 2 +- 3 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index d5d6d8282d..e9ef6300a4 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -595,7 +595,7 @@ void NetworkClose(bool close_admins) MyClient::my_client->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT); } - _network_coordinator_client.CloseAllTokens(); + _network_coordinator_client.CloseAllConnections(); } TCPConnecter::KillAll(); diff --git a/src/network/network_coordinator.cpp b/src/network/network_coordinator.cpp index 21937c7c6f..9fe1e78f0e 100644 --- a/src/network/network_coordinator.cpp +++ b/src/network/network_coordinator.cpp @@ -144,7 +144,11 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_ERROR(Packet *p) return false; case NETWORK_COORDINATOR_ERROR_INVALID_INVITE_CODE: { - this->CloseToken(detail); + auto connecter_pre_it = this->connecter_pre.find(detail); + if (connecter_pre_it != this->connecter_pre.end()) { + connecter_pre_it->second->SetFailure(); + this->connecter_pre.erase(connecter_pre_it); + } /* Mark the server as offline. */ NetworkGameList *item = NetworkGameListAddItem(detail); @@ -258,15 +262,15 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_CONNECTING(Packet *p) std::string invite_code = p->Recv_string(NETWORK_INVITE_CODE_LENGTH); /* Find the connecter based on the invite code. */ - auto connecter_it = this->connecter_pre.find(invite_code); - if (connecter_it == this->connecter_pre.end()) { + auto connecter_pre_it = this->connecter_pre.find(invite_code); + if (connecter_pre_it == this->connecter_pre.end()) { this->CloseConnection(); return false; } /* Now store it based on the token. */ - this->connecter[token] = connecter_it->second; - this->connecter_pre.erase(connecter_it); + this->connecter[token] = connecter_pre_it->second; + this->connecter_pre.erase(connecter_pre_it); return true; } @@ -274,14 +278,6 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_CONNECTING(Packet *p) bool ClientNetworkCoordinatorSocketHandler::Receive_GC_CONNECT_FAILED(Packet *p) { std::string token = p->Recv_string(NETWORK_TOKEN_LENGTH); - - auto connecter_it = this->connecter.find(token); - if (connecter_it != this->connecter.end()) { - connecter_it->second->SetFailure(); - this->connecter.erase(connecter_it); - } - - /* Close all remaining connections. */ this->CloseToken(token); return true; @@ -382,7 +378,7 @@ NetworkRecvStatus ClientNetworkCoordinatorSocketHandler::CloseConnection(bool er _network_server_connection_type = CONNECTION_TYPE_UNKNOWN; this->next_update = {}; - this->CloseAllTokens(); + this->CloseAllConnections(); SetWindowDirty(WC_CLIENT_LIST, 0); @@ -524,11 +520,14 @@ void ClientNetworkCoordinatorSocketHandler::ConnectSuccess(const std::string &to p->Send_string(token); this->SendPacket(p); + /* Find the connecter; it can happen it no longer exist, in cases where + * we aborted the connect but the Game Coordinator was already in the + * processes of connecting us. */ auto connecter_it = this->connecter.find(token); - assert(connecter_it != this->connecter.end()); - - connecter_it->second->SetConnected(sock); - this->connecter.erase(connecter_it); + if (connecter_it != this->connecter.end()) { + connecter_it->second->SetConnected(sock); + this->connecter.erase(connecter_it); + } } /* Close all remaining connections. */ @@ -552,6 +551,11 @@ void ClientNetworkCoordinatorSocketHandler::StunResult(const std::string &token, this->SendPacket(p); } +/** + * Close the STUN handler. + * @param token The token used for the STUN handlers. + * @param family The family of STUN handlers to close. AF_UNSPEC to close all STUN handlers for this token. + */ void ClientNetworkCoordinatorSocketHandler::CloseStunHandler(const std::string &token, uint8 family) { auto stun_it = this->stun_handlers.find(token); @@ -581,12 +585,6 @@ void ClientNetworkCoordinatorSocketHandler::CloseStunHandler(const std::string & */ void ClientNetworkCoordinatorSocketHandler::CloseToken(const std::string &token) { - /* Ensure all other pending connection attempts are also killed. */ - if (this->game_connecter != nullptr) { - this->game_connecter->Kill(); - this->game_connecter = nullptr; - } - /* Close all remaining STUN connections. */ this->CloseStunHandler(token); @@ -596,17 +594,12 @@ void ClientNetworkCoordinatorSocketHandler::CloseToken(const std::string &token) connecter_it->second->SetFailure(); this->connecter.erase(connecter_it); } - auto connecter_pre_it = this->connecter_pre.find(token); - if (connecter_pre_it != this->connecter_pre.end()) { - connecter_pre_it->second->SetFailure(); - this->connecter_pre.erase(connecter_pre_it); - } } /** * Close all pending connection tokens. */ -void ClientNetworkCoordinatorSocketHandler::CloseAllTokens() +void ClientNetworkCoordinatorSocketHandler::CloseAllConnections() { /* Ensure all other pending connection attempts are also killed. */ if (this->game_connecter != nullptr) { @@ -618,11 +611,17 @@ void ClientNetworkCoordinatorSocketHandler::CloseAllTokens() for (auto &[token, it] : this->connecter) { this->CloseStunHandler(token); it->SetFailure(); + + /* Inform the Game Coordinator he can stop trying to connect us to the server. */ + this->ConnectFailure(token, 0); } + this->stun_handlers.clear(); + this->connecter.clear(); + + /* Also close any pending invite-code requests. */ for (auto &[invite_code, it] : this->connecter_pre) { it->SetFailure(); } - this->connecter.clear(); this->connecter_pre.clear(); } diff --git a/src/network/network_coordinator.h b/src/network/network_coordinator.h index 63ced51210..6a7c79e70f 100644 --- a/src/network/network_coordinator.h +++ b/src/network/network_coordinator.h @@ -86,7 +86,7 @@ public: void Connect(); void CloseToken(const std::string &token); - void CloseAllTokens(); + void CloseAllConnections(); void CloseStunHandler(const std::string &token, uint8 family = AF_UNSPEC); void Register(); From fa1e27994dd1284f6fefbe08c47a5c4145ccf00d Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 5 May 2021 10:47:01 +0200 Subject: [PATCH 18/63] Feature: allow the use of TURN to connect client and server together TURN is a last resort, used only if all other methods failed. TURN is a relay approach to connect client and server together, where openttd.org (by default) is the middleman. It is very unlikely either the client or server cannot connect to the STUN server, as they are both already connected to the Game Coordinator. But in the odd case it does fail, estabilishing the connection fails without any further possibility to recover. --- docs/game_coordinator.md | 19 ++++ src/lang/english.txt | 14 +++ src/network/CMakeLists.txt | 2 + src/network/core/CMakeLists.txt | 2 + src/network/core/config.h | 3 +- src/network/core/tcp_coordinator.cpp | 2 + src/network/core/tcp_coordinator.h | 16 +++ src/network/core/tcp_turn.cpp | 71 +++++++++++++ src/network/core/tcp_turn.h | 79 ++++++++++++++ src/network/network_coordinator.cpp | 83 ++++++++++++++- src/network/network_coordinator.h | 9 ++ src/network/network_gui.cpp | 102 ++++++++++++++++++ src/network/network_gui.h | 1 + src/network/network_turn.cpp | 135 ++++++++++++++++++++++++ src/network/network_turn.h | 41 +++++++ src/settings_gui.cpp | 5 + src/settings_type.h | 8 ++ src/table/settings/network_settings.ini | 14 +++ src/widgets/network_widget.h | 9 ++ src/window.cpp | 1 + src/window_type.h | 6 ++ 21 files changed, 620 insertions(+), 2 deletions(-) create mode 100644 src/network/core/tcp_turn.cpp create mode 100644 src/network/core/tcp_turn.h create mode 100644 src/network/network_turn.cpp create mode 100644 src/network/network_turn.h diff --git a/docs/game_coordinator.md b/docs/game_coordinator.md index e8260f2e1c..8bf07d8027 100644 --- a/docs/game_coordinator.md +++ b/docs/game_coordinator.md @@ -62,3 +62,22 @@ server can continue to talk to each other. Some NAT gateways do not allow this method; for those this attempt will fail, and this also means that it is not possible to create a connection between the client and server. + +## 3) Via TURN + +As a last resort, the Game Coordinator can decide to connect the client and +server together via TURN. TURN is a relay service, relaying the messages +between client and server. + +As the client and server can already connect to the Game Coordinator, it is +very likely this is successful. + +It is important to note that a relay service has full view of the traffic +send between client and server, and as such it is important that you trust +the relay service used. +For official binaries, this relay service is hosted by openttd.org. The relay +service as hosted by openttd.org only validates it is relaying valid OpenTTD +packets and does no further inspection of the payload itself. +Although in our experience most patch-packs also use the services as offered +by openttd.org, it is possible they use different services. Please be mindful +about this. diff --git a/src/lang/english.txt b/src/lang/english.txt index 277190e1a8..44d226cbf2 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1439,6 +1439,12 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Double click STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Single click (when focussed) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Single click (immediately) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Use relay service: {STRING2} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :If creating a connection to the server fails, one can use a relay service to create a connection. "Never" disallows this, "ask" will ask first, "allow" will allow it without asking +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Never +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Ask +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Allow + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Right-click emulation: {STRING2} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Select the method to emulate right mouse-button clicks STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Click @@ -1791,6 +1797,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Cargo distribution STR_CONFIG_SETTING_AI :{ORANGE}Competitors STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computer players +STR_CONFIG_SETTING_NETWORK :{ORANGE}Network STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recommended) @@ -2167,6 +2174,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Remote players can't connect STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Public STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Behind NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via relay ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick @@ -2180,6 +2188,12 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Are you STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Are you sure you want to delete company '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Are you sure you want to reset the password of company '{COMPANY}'? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Use relay? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Failed to establish a connection between you and the server.{}Would you like to relay this session via '{RAW_STRING}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}No +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Yes, this once +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Yes, don't ask again + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectators diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index 8b01579189..ac500a22cf 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -26,6 +26,8 @@ add_files( network_server.h network_stun.cpp network_stun.h + network_turn.cpp + network_turn.h network_type.h network_udp.cpp network_udp.h diff --git a/src/network/core/CMakeLists.txt b/src/network/core/CMakeLists.txt index bcecad38c8..756fa9e8f3 100644 --- a/src/network/core/CMakeLists.txt +++ b/src/network/core/CMakeLists.txt @@ -30,6 +30,8 @@ add_files( tcp_listen.h tcp_stun.cpp tcp_stun.h + tcp_turn.cpp + tcp_turn.h udp.cpp udp.h ) diff --git a/src/network/core/config.h b/src/network/core/config.h index 1b66c26cf9..10ec070f06 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -22,6 +22,7 @@ static const char * const NETWORK_CONTENT_MIRROR_URL = "/bananas"; static const uint16 NETWORK_COORDINATOR_SERVER_PORT = 3976; ///< The default port of the Game Coordinator server (TCP) static const uint16 NETWORK_STUN_SERVER_PORT = 3975; ///< The default port of the STUN server (TCP) +static const uint16 NETWORK_TURN_SERVER_PORT = 3974; ///< The default port of the TURN server (TCP) static const uint16 NETWORK_CONTENT_SERVER_PORT = 3978; ///< The default port of the content server (TCP) static const uint16 NETWORK_CONTENT_MIRROR_PORT = 80; ///< The default port of the content mirror (TCP) static const uint16 NETWORK_DEFAULT_PORT = 3979; ///< The default port of the game server (TCP & UDP) @@ -49,7 +50,7 @@ static const uint16 COMPAT_MTU = 1460; ///< Numbe static const byte NETWORK_GAME_ADMIN_VERSION = 1; ///< What version of the admin network do we use? static const byte NETWORK_GAME_INFO_VERSION = 6; ///< What version of game-info do we use? static const byte NETWORK_COMPANY_INFO_VERSION = 6; ///< What version of company info is this? -static const byte NETWORK_COORDINATOR_VERSION = 4; ///< What version of game-coordinator-protocol do we use? +static const byte NETWORK_COORDINATOR_VERSION = 5; ///< What version of game-coordinator-protocol do we use? static const uint NETWORK_NAME_LENGTH = 80; ///< The maximum length of the server name and map name, in bytes including '\0' static const uint NETWORK_COMPANY_NAME_LENGTH = 128; ///< The maximum length of the company name, in bytes including '\0' diff --git a/src/network/core/tcp_coordinator.cpp b/src/network/core/tcp_coordinator.cpp index 75f3f246f0..44395a905b 100644 --- a/src/network/core/tcp_coordinator.cpp +++ b/src/network/core/tcp_coordinator.cpp @@ -43,6 +43,7 @@ bool NetworkCoordinatorSocketHandler::HandlePacket(Packet *p) case PACKET_COORDINATOR_SERCLI_STUN_RESULT: return this->Receive_SERCLI_STUN_RESULT(p); case PACKET_COORDINATOR_GC_STUN_CONNECT: return this->Receive_GC_STUN_CONNECT(p); case PACKET_COORDINATOR_GC_NEWGRF_LOOKUP: return this->Receive_GC_NEWGRF_LOOKUP(p); + case PACKET_COORDINATOR_GC_TURN_CONNECT: return this->Receive_GC_TURN_CONNECT(p); default: Debug(net, 0, "[tcp/coordinator] Received invalid packet type {}", type); @@ -102,3 +103,4 @@ bool NetworkCoordinatorSocketHandler::Receive_GC_STUN_REQUEST(Packet *p) { retur bool NetworkCoordinatorSocketHandler::Receive_SERCLI_STUN_RESULT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_COORDINATOR_SERCLI_STUN_RESULT); } bool NetworkCoordinatorSocketHandler::Receive_GC_STUN_CONNECT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_COORDINATOR_GC_STUN_CONNECT); } bool NetworkCoordinatorSocketHandler::Receive_GC_NEWGRF_LOOKUP(Packet *p) { return this->ReceiveInvalidPacket(PACKET_COORDINATOR_GC_NEWGRF_LOOKUP); } +bool NetworkCoordinatorSocketHandler::Receive_GC_TURN_CONNECT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_COORDINATOR_GC_TURN_CONNECT); } diff --git a/src/network/core/tcp_coordinator.h b/src/network/core/tcp_coordinator.h index b5395ad73a..dea61cdec1 100644 --- a/src/network/core/tcp_coordinator.h +++ b/src/network/core/tcp_coordinator.h @@ -42,6 +42,7 @@ enum PacketCoordinatorType { PACKET_COORDINATOR_SERCLI_STUN_RESULT, ///< Client/server informs the Game Coordinator of the result of the STUN request. PACKET_COORDINATOR_GC_STUN_CONNECT, ///< Game Coordinator tells client/server to connect() reusing the STUN local address. PACKET_COORDINATOR_GC_NEWGRF_LOOKUP, ///< Game Coordinator informs client about NewGRF lookup table updates needed for GC_LISTING. + PACKET_COORDINATOR_GC_TURN_CONNECT, ///< Game Coordinator tells client/server to connect to a specific TURN server. PACKET_COORDINATOR_END, ///< Must ALWAYS be on the end of this list!! (period) }; @@ -53,6 +54,7 @@ enum ConnectionType { CONNECTION_TYPE_ISOLATED, ///< The Game Coordinator failed to find a way to connect to your server. Nobody will be able to join. CONNECTION_TYPE_DIRECT, ///< The Game Coordinator can directly connect to your server. CONNECTION_TYPE_STUN, ///< The Game Coordinator can connect to your server via a STUN request. + CONNECTION_TYPE_TURN, ///< The Game Coordinator needs you to connect to a relay. }; /** @@ -288,6 +290,20 @@ protected: */ virtual bool Receive_GC_NEWGRF_LOOKUP(Packet *p); + /** + * Game Coordinator requests that we make a connection to the indicated + * peer, which is a TURN server. + * + * string Token to track the current connect request. + * uint8 Tracking number to track current connect request. + * string Ticket to hand over to the TURN server. + * string Connection string of the TURN server. + * + * @param p The packet that was just received. + * @return True upon success, otherwise false. + */ + virtual bool Receive_GC_TURN_CONNECT(Packet *p); + bool HandlePacket(Packet *p); public: /** diff --git a/src/network/core/tcp_turn.cpp b/src/network/core/tcp_turn.cpp new file mode 100644 index 0000000000..026b641943 --- /dev/null +++ b/src/network/core/tcp_turn.cpp @@ -0,0 +1,71 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** + * @file tcp_turn.cpp Basic functions to receive and send TURN packets. + */ + +#include "../../stdafx.h" +#include "../../date_func.h" +#include "../../debug.h" +#include "tcp_turn.h" + +#include "../../safeguards.h" + +/** + * Handle the given packet, i.e. pass it to the right + * parser receive command. + * @param p the packet to handle + * @return true if we should immediately handle further packets, false otherwise + */ +bool NetworkTurnSocketHandler::HandlePacket(Packet *p) +{ + PacketTurnType type = (PacketTurnType)p->Recv_uint8(); + + switch (type) { + case PACKET_TURN_TURN_ERROR: return this->Receive_TURN_ERROR(p); + case PACKET_TURN_SERCLI_CONNECT: return this->Receive_SERCLI_CONNECT(p); + case PACKET_TURN_TURN_CONNECTED: return this->Receive_TURN_CONNECTED(p); + + default: + Debug(net, 0, "[tcp/turn] Received invalid packet type {}", type); + return false; + } +} + +/** + * Receive a packet at TCP level + * @return Whether at least one packet was received. + */ +bool NetworkTurnSocketHandler::ReceivePackets() +{ + Packet *p; + static const int MAX_PACKETS_TO_RECEIVE = 4; + int i = MAX_PACKETS_TO_RECEIVE; + while (--i != 0 && (p = this->ReceivePacket()) != nullptr) { + bool cont = this->HandlePacket(p); + delete p; + if (!cont) return true; + } + + return i != MAX_PACKETS_TO_RECEIVE - 1; +} + +/** + * Helper for logging receiving invalid packets. + * @param type The received packet type. + * @return Always false, as it's an error. + */ +bool NetworkTurnSocketHandler::ReceiveInvalidPacket(PacketTurnType type) +{ + Debug(net, 0, "[tcp/turn] Received illegal packet type {}", type); + return false; +} + +bool NetworkTurnSocketHandler::Receive_TURN_ERROR(Packet *p) { return this->ReceiveInvalidPacket(PACKET_TURN_TURN_ERROR); } +bool NetworkTurnSocketHandler::Receive_SERCLI_CONNECT(Packet *p) { return this->ReceiveInvalidPacket(PACKET_TURN_SERCLI_CONNECT); } +bool NetworkTurnSocketHandler::Receive_TURN_CONNECTED(Packet *p) { return this->ReceiveInvalidPacket(PACKET_TURN_TURN_CONNECTED); } diff --git a/src/network/core/tcp_turn.h b/src/network/core/tcp_turn.h new file mode 100644 index 0000000000..0823731993 --- /dev/null +++ b/src/network/core/tcp_turn.h @@ -0,0 +1,79 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** + * @file tcp_turn.h Basic functions to receive and send TCP packets to/from the TURN server. + */ + +#ifndef NETWORK_CORE_TCP_TURN_H +#define NETWORK_CORE_TCP_TURN_H + +#include "os_abstraction.h" +#include "tcp.h" +#include "packet.h" +#include "game_info.h" + +/** Enum with all types of TCP TURN packets. The order MUST not be changed. **/ +enum PacketTurnType { + PACKET_TURN_TURN_ERROR, ///< TURN server is unable to relay. + PACKET_TURN_SERCLI_CONNECT, ///< Client or server is connecting to the TURN server. + PACKET_TURN_TURN_CONNECTED, ///< TURN server indicates the socket is now being relayed. + PACKET_TURN_END, ///< Must ALWAYS be on the end of this list!! (period) +}; + +/** Base socket handler for all TURN TCP sockets. */ +class NetworkTurnSocketHandler : public NetworkTCPSocketHandler { +protected: + bool ReceiveInvalidPacket(PacketTurnType type); + + /** + * TURN server was unable to connect the client or server based on the + * token. Most likely cause is an invalid token or the other side that + * hasn't connected in a reasonable amount of time. + * + * @param p The packet that was just received. + * @return True upon success, otherwise false. + */ + virtual bool Receive_TURN_ERROR(Packet *p); + + /** + * Client or servers wants to connect to the TURN server (on request by + * the Game Coordinator). + * + * uint8 Game Coordinator protocol version. + * string Token to track the current TURN request. + * + * @param p The packet that was just received. + * @return True upon success, otherwise false. + */ + virtual bool Receive_SERCLI_CONNECT(Packet *p); + + /** + * TURN server has connected client and server together and will now relay + * all packets to each other. No further TURN packets should be send over + * this socket, and the socket should be handed over to the game protocol. + * + * string Hostname of the peer. This can be used to check if a client is not banned etc. + * + * @param p The packet that was just received. + * @return True upon success, otherwise false. + */ + virtual bool Receive_TURN_CONNECTED(Packet *p); + + bool HandlePacket(Packet *p); +public: + /** + * Create a new cs socket handler for a given cs. + * @param s the socket we are connected with. + * @param address IP etc. of the client. + */ + NetworkTurnSocketHandler(SOCKET s = INVALID_SOCKET) : NetworkTCPSocketHandler(s) {} + + bool ReceivePackets(); +}; + +#endif /* NETWORK_CORE_TCP_TURN_H */ diff --git a/src/network/network_coordinator.cpp b/src/network/network_coordinator.cpp index 9fe1e78f0e..6456ac9e89 100644 --- a/src/network/network_coordinator.cpp +++ b/src/network/network_coordinator.cpp @@ -18,6 +18,7 @@ #include "network.h" #include "network_coordinator.h" #include "network_gamelist.h" +#include "network_gui.h" #include "network_internal.h" #include "network_server.h" #include "network_stun.h" @@ -193,6 +194,7 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_REGISTER_ACK(Packet *p) case CONNECTION_TYPE_ISOLATED: connection_type = "Remote players can't connect"; break; case CONNECTION_TYPE_DIRECT: connection_type = "Public"; break; case CONNECTION_TYPE_STUN: connection_type = "Behind NAT"; break; + case CONNECTION_TYPE_TURN: connection_type = "Via relay"; break; case CONNECTION_TYPE_UNKNOWN: // Never returned from Game Coordinator. default: connection_type = "Unknown"; break; // Should never happen, but don't fail if it does. @@ -355,6 +357,50 @@ bool ClientNetworkCoordinatorSocketHandler::Receive_GC_NEWGRF_LOOKUP(Packet *p) return true; } +bool ClientNetworkCoordinatorSocketHandler::Receive_GC_TURN_CONNECT(Packet *p) +{ + std::string token = p->Recv_string(NETWORK_TOKEN_LENGTH); + uint8 tracking_number = p->Recv_uint8(); + std::string ticket = p->Recv_string(NETWORK_TOKEN_LENGTH); + std::string connection_string = p->Recv_string(NETWORK_HOSTNAME_PORT_LENGTH); + + /* Ensure all other pending connection attempts are killed. */ + if (this->game_connecter != nullptr) { + this->game_connecter->Kill(); + this->game_connecter = nullptr; + } + + this->turn_handlers[token] = ClientNetworkTurnSocketHandler::Turn(token, tracking_number, ticket, connection_string); + + if (!_network_server) { + switch (_settings_client.network.use_relay_service) { + case URS_NEVER: + this->ConnectFailure(token, 0); + break; + + case URS_ASK: + ShowNetworkAskRelay(connection_string, token); + break; + + case URS_ALLOW: + this->StartTurnConnection(token); + break; + } + } else { + this->StartTurnConnection(token); + } + + return true; +} + +void ClientNetworkCoordinatorSocketHandler::StartTurnConnection(std::string &token) +{ + auto turn_it = this->turn_handlers.find(token); + if (turn_it == this->turn_handlers.end()) return; + + turn_it->second->Connect(); +} + void ClientNetworkCoordinatorSocketHandler::Connect() { /* We are either already connected or are trying to connect. */ @@ -579,14 +625,34 @@ void ClientNetworkCoordinatorSocketHandler::CloseStunHandler(const std::string & } } +/** + * Close the TURN handler. + * @param token The token used for the TURN handler. + */ +void ClientNetworkCoordinatorSocketHandler::CloseTurnHandler(const std::string &token) +{ + CloseWindowByClass(WC_NETWORK_ASK_RELAY); + + auto turn_it = this->turn_handlers.find(token); + if (turn_it == this->turn_handlers.end()) return; + + turn_it->second->CloseConnection(); + turn_it->second->CloseSocket(); + + /* We don't remove turn_handler here, as we can be called from within that + * turn_handler instance, so our object cannot be free'd yet. Instead, we + * check later if the connection is closed, and free the object then. */ +} + /** * Close everything related to this connection token. * @param token The connection token to close. */ void ClientNetworkCoordinatorSocketHandler::CloseToken(const std::string &token) { - /* Close all remaining STUN connections. */ + /* Close all remaining STUN / TURN connections. */ this->CloseStunHandler(token); + this->CloseTurnHandler(token); /* Close the caller of the connection attempt. */ auto connecter_it = this->connecter.find(token); @@ -610,12 +676,14 @@ void ClientNetworkCoordinatorSocketHandler::CloseAllConnections() /* Mark any pending connecters as failed. */ for (auto &[token, it] : this->connecter) { this->CloseStunHandler(token); + this->CloseTurnHandler(token); it->SetFailure(); /* Inform the Game Coordinator he can stop trying to connect us to the server. */ this->ConnectFailure(token, 0); } this->stun_handlers.clear(); + this->turn_handlers.clear(); this->connecter.clear(); /* Also close any pending invite-code requests. */ @@ -697,4 +765,17 @@ void ClientNetworkCoordinatorSocketHandler::SendReceive() stun_handler->SendReceive(); } } + + /* Check for handlers that are not connecting nor connected. Destroy those objects. */ + for (auto turn_it = this->turn_handlers.begin(); turn_it != this->turn_handlers.end(); /* nothing */) { + if (turn_it->second->connect_started && turn_it->second->connecter == nullptr && !turn_it->second->IsConnected()) { + turn_it = this->turn_handlers.erase(turn_it); + } else { + turn_it++; + } + } + + for (const auto &[token, turn_handler] : this->turn_handlers) { + turn_handler->SendReceive(); + } } diff --git a/src/network/network_coordinator.h b/src/network/network_coordinator.h index 6a7c79e70f..42e16d91dc 100644 --- a/src/network/network_coordinator.h +++ b/src/network/network_coordinator.h @@ -12,6 +12,7 @@ #include "core/tcp_coordinator.h" #include "network_stun.h" +#include "network_turn.h" #include /** @@ -42,6 +43,10 @@ * - a) Server/client connect, client sends CLIENT_CONNECTED to Game Coordinator. * - b) Server/client connect fails, both send SERCLI_CONNECT_FAILED to Game Coordinator. * - Game Coordinator tries other combination if available. + * 3) TURN? + * - Game Coordinator sends GC_TURN_CONNECT to server/client. + * - a) Server/client connect, client sends CLIENT_CONNECTED to Game Coordinator. + * - b) Server/client connect fails, both send SERCLI_CONNECT_FAILED to Game Coordinator. * - If all fails, Game Coordinator sends GC_CONNECT_FAILED to indicate no connection is possible. */ @@ -52,6 +57,7 @@ private: std::map connecter; ///< Based on tokens, the current connecters that are pending. std::map connecter_pre; ///< Based on invite codes, the current connecters that are pending. std::map>> stun_handlers; ///< All pending STUN handlers, stored by token:family. + std::map> turn_handlers; ///< Pending TURN handler (if any), stored by token. TCPConnecter *game_connecter = nullptr; ///< Pending connecter to the game server. uint32 newgrf_lookup_table_cursor = 0; ///< Last received cursor for the #GameInfoNewGRFLookupTable updates. @@ -67,6 +73,7 @@ protected: bool Receive_GC_STUN_REQUEST(Packet *p) override; bool Receive_GC_STUN_CONNECT(Packet *p) override; bool Receive_GC_NEWGRF_LOOKUP(Packet *p) override; + bool Receive_GC_TURN_CONNECT(Packet *p) override; public: /** The idle timeout; when to close the connection because it's idle. */ @@ -88,12 +95,14 @@ public: void CloseToken(const std::string &token); void CloseAllConnections(); void CloseStunHandler(const std::string &token, uint8 family = AF_UNSPEC); + void CloseTurnHandler(const std::string &token); void Register(); void SendServerUpdate(); void GetListing(); void ConnectToServer(const std::string &invite_code, TCPServerConnecter *connecter); + void StartTurnConnection(std::string &token); }; extern ClientNetworkCoordinatorSocketHandler _network_coordinator_client; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 1368ac0ad9..a535962b53 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2699,3 +2699,105 @@ void ShowNetworkCompanyPasswordWindow(Window *parent) new NetworkCompanyPasswordWindow(&_network_company_password_window_desc, parent); } + +/** + * Window used for asking the user if he is okay using a TURN server. + */ +struct NetworkAskRelayWindow : public Window { + std::string connection_string; ///< The TURN server we want to connect to. + std::string token; ///< The token for this connection. + + NetworkAskRelayWindow(WindowDesc *desc, Window *parent, const std::string &connection_string, const std::string &token) : Window(desc), connection_string(connection_string), token(token) + { + this->parent = parent; + this->InitNested(0); + } + + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override + { + if (widget == WID_NAR_TEXT) { + *size = GetStringBoundingBox(STR_NETWORK_ASK_RELAY_TEXT); + size->height = GetStringHeight(STR_NETWORK_ASK_RELAY_TEXT, size->width - WD_FRAMETEXT_LEFT - WD_FRAMETEXT_RIGHT) + WD_FRAMETEXT_BOTTOM + WD_FRAMETEXT_TOP; + } + } + + void DrawWidget(const Rect &r, int widget) const override + { + if (widget == WID_NAR_TEXT) { + DrawStringMultiLine(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, r.top + WD_FRAMETEXT_TOP, r.bottom - WD_FRAMETEXT_BOTTOM, STR_NETWORK_ASK_RELAY_TEXT, TC_FROMSTRING, SA_CENTER); + } + } + + void FindWindowPlacementAndResize(int def_width, int def_height) override + { + /* Position query window over the calling window, ensuring it's within screen bounds. */ + this->left = Clamp(parent->left + (parent->width / 2) - (this->width / 2), 0, _screen.width - this->width); + this->top = Clamp(parent->top + (parent->height / 2) - (this->height / 2), 0, _screen.height - this->height); + this->SetDirty(); + } + + void SetStringParameters(int widget) const override + { + switch (widget) { + case WID_NAR_TEXT: + SetDParamStr(0, this->connection_string); + break; + } + } + + void OnClick(Point pt, int widget, int click_count) override + { + switch (widget) { + case WID_NAR_NO: + _network_coordinator_client.ConnectFailure(this->token, 0); + this->Close(); + break; + + case WID_NAR_YES_ONCE: + _network_coordinator_client.StartTurnConnection(this->token); + this->Close(); + break; + + case WID_NAR_YES_ALWAYS: + _settings_client.network.use_relay_service = URS_ALLOW; + _network_coordinator_client.StartTurnConnection(this->token); + this->Close(); + break; + } + } +}; + +static const NWidgetPart _nested_network_ask_relay_widgets[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_RED), + NWidget(WWT_CAPTION, COLOUR_RED, WID_NAR_CAPTION), SetDataTip(STR_NETWORK_ASK_RELAY_CAPTION, STR_NULL), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_RED), SetPIP(0, 0, 8), + NWidget(WWT_TEXT, COLOUR_RED, WID_NAR_TEXT), SetAlignment(SA_HOR_CENTER), SetFill(1, 1), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 15, 10), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NAR_NO), SetMinimalSize(71, 12), SetFill(1, 1), SetDataTip(STR_NETWORK_ASK_RELAY_NO, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NAR_YES_ONCE), SetMinimalSize(71, 12), SetFill(1, 1), SetDataTip(STR_NETWORK_ASK_RELAY_YES_ONCE, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_YELLOW, WID_NAR_YES_ALWAYS), SetMinimalSize(71, 12), SetFill(1, 1), SetDataTip(STR_NETWORK_ASK_RELAY_YES_ALWAYS, STR_NULL), + EndContainer(), + EndContainer(), +}; + +static WindowDesc _network_ask_relay_desc( + WDP_CENTER, nullptr, 0, 0, + WC_NETWORK_ASK_RELAY, WC_NONE, + WDF_MODAL, + _nested_network_ask_relay_widgets, lengthof(_nested_network_ask_relay_widgets) +); + +/** + * Show a modal confirmation window with "no" / "yes, once" / "yes, always" buttons. + * @param connection_string The relay server we want to connect to. + * @param token The token for this connection. + */ +void ShowNetworkAskRelay(const std::string &connection_string, const std::string &token) +{ + CloseWindowByClass(WC_NETWORK_ASK_RELAY); + + Window *parent = FindWindowById(WC_MAIN_WINDOW, 0); + new NetworkAskRelayWindow(&_network_ask_relay_desc, parent, connection_string, token); +} diff --git a/src/network/network_gui.h b/src/network/network_gui.h index 855d7d53c6..06b501cb5d 100644 --- a/src/network/network_gui.h +++ b/src/network/network_gui.h @@ -39,5 +39,6 @@ struct NetworkCompanyInfo : NetworkCompanyStats { NetworkCompanyInfo *GetLobbyCompanyInfo(CompanyID company); NetworkGameList *GetLobbyGameInfo(); +void ShowNetworkAskRelay(const std::string &connection_string, const std::string &token); #endif /* NETWORK_GUI_H */ diff --git a/src/network/network_turn.cpp b/src/network/network_turn.cpp new file mode 100644 index 0000000000..e04bec47ca --- /dev/null +++ b/src/network/network_turn.cpp @@ -0,0 +1,135 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file network_turn.cpp TURN sending/receiving part of the network protocol. */ + +#include "../stdafx.h" +#include "../debug.h" +#include "../error.h" +#include "../strings_func.h" +#include "network_coordinator.h" +#include "network_turn.h" + +#include "table/strings.h" + +#include "../safeguards.h" + +/** Connect to the TURN server. */ +class NetworkTurnConnecter : public TCPConnecter { +private: + ClientNetworkTurnSocketHandler *handler; + +public: + /** + * Initiate the connecting. + * @param connection_string The address of the TURN server. + */ + NetworkTurnConnecter(ClientNetworkTurnSocketHandler *handler, const std::string &connection_string) : TCPConnecter(connection_string, NETWORK_TURN_SERVER_PORT), handler(handler) {} + + void OnFailure() override + { + this->handler->connecter = nullptr; + + this->handler->ConnectFailure(); + } + + void OnConnect(SOCKET s) override + { + this->handler->connecter = nullptr; + + handler->sock = s; + } +}; + +bool ClientNetworkTurnSocketHandler::Receive_TURN_ERROR(Packet *p) +{ + this->ConnectFailure(); + + return false; +} + +bool ClientNetworkTurnSocketHandler::Receive_TURN_CONNECTED(Packet *p) +{ + std::string hostname = p->Recv_string(NETWORK_HOSTNAME_LENGTH); + + /* Act like we no longer have a socket, as we are handing it over to the + * game handler. */ + SOCKET game_sock = this->sock; + this->sock = INVALID_SOCKET; + + NetworkAddress address = NetworkAddress(hostname, NETWORK_DEFAULT_PORT); + _network_coordinator_client.ConnectSuccess(this->token, game_sock, address); + + return false; +} + +/** + * Connect to the TURN server. + */ +void ClientNetworkTurnSocketHandler::Connect() +{ + this->connect_started = true; + this->connecter = new NetworkTurnConnecter(this, this->connection_string); +} + +/** + * Prepare a TURN connection. + * Not until you run Connect() on the resulting instance will it start setting + * up the TURN connection. + * @param token The token as received from the Game Coordinator. + * @param tracking_number The tracking number as recieved from the Game Coordinator. + * @param ticket The ticket as received from the Game Coordinator. + * @param connection_string Connection string of the TURN server. + * @return The handler for this TURN connection. + */ +/* static */ std::unique_ptr ClientNetworkTurnSocketHandler::Turn(const std::string &token, uint8 tracking_number, const std::string &ticket, const std::string &connection_string) +{ + auto turn_handler = std::make_unique(token, tracking_number, connection_string); + + Packet *p = new Packet(PACKET_TURN_SERCLI_CONNECT); + p->Send_uint8(NETWORK_COORDINATOR_VERSION); + p->Send_string(ticket); + + turn_handler->SendPacket(p); + + return turn_handler; +} + +void ClientNetworkTurnSocketHandler::ConnectFailure() +{ + _network_coordinator_client.ConnectFailure(this->token, this->tracking_number); +} + +NetworkRecvStatus ClientNetworkTurnSocketHandler::CloseConnection(bool error) +{ + NetworkTurnSocketHandler::CloseConnection(error); + + /* If our connecter is still pending, shut it down too. Otherwise the + * callback of the connecter can call into us, and our object is most + * likely about to be destroyed. */ + if (this->connecter != nullptr) { + this->connecter->Kill(); + this->connecter = nullptr; + } + + return NETWORK_RECV_STATUS_OKAY; +} + +/** + * Check whether we received/can send some data from/to the TURN server and + * when that's the case handle it appropriately + */ +void ClientNetworkTurnSocketHandler::SendReceive() +{ + if (this->sock == INVALID_SOCKET) return; + + if (this->CanSendReceive()) { + this->ReceivePackets(); + } + + this->SendPackets(); +} diff --git a/src/network/network_turn.h b/src/network/network_turn.h new file mode 100644 index 0000000000..cc569a977d --- /dev/null +++ b/src/network/network_turn.h @@ -0,0 +1,41 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file network_turn.h Part of the network protocol handling TURN requests. */ + +#ifndef NETWORK_TURN_H +#define NETWORK_TURN_H + +#include "core/tcp_turn.h" + +/** Class for handling the client side of the TURN connection. */ +class ClientNetworkTurnSocketHandler : public NetworkTurnSocketHandler { +private: + std::string token; ///< Token of this connection. + uint8 tracking_number; ///< Tracking number of this connection. + std::string connection_string; ///< The connection string of the TURN server we are connecting to. + +protected: + bool Receive_TURN_ERROR(Packet *p) override; + bool Receive_TURN_CONNECTED(Packet *p) override; + +public: + TCPConnecter *connecter = nullptr; ///< Connecter instance. + bool connect_started = false; ///< Whether we started the connection. + + ClientNetworkTurnSocketHandler(const std::string &token, uint8 tracking_number, const std::string &connection_string) : token(token), tracking_number(tracking_number), connection_string(connection_string) {} + + NetworkRecvStatus CloseConnection(bool error = true) override; + void SendReceive(); + + void Connect(); + void ConnectFailure(); + + static std::unique_ptr Turn(const std::string &token, uint8 tracking_number, const std::string &ticket, const std::string &connection_string); +}; + +#endif /* NETWORK_TURN_H */ diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index a63448aef6..04deb93ebc 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1846,6 +1846,11 @@ static SettingsContainer &GetSettingsTree() ai->Add(new SettingEntry("economy.min_years_for_shares")); } + SettingsPage *network = main->Add(new SettingsPage(STR_CONFIG_SETTING_NETWORK)); + { + network->Add(new SettingEntry("network.use_relay_service")); + } + main->Init(); } return *main; diff --git a/src/settings_type.h b/src/settings_type.h index 8db0febad6..ababe718b2 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -59,6 +59,13 @@ enum IndustryDensity { ID_END, ///< Number of industry density settings. }; +/** Possible values for "userelayservice" setting. */ +enum UseRelayService { + URS_NEVER = 0, + URS_ASK, + URS_ALLOW, +}; + /** Settings related to the difficulty of the game */ struct DifficultySettings { byte competitor_start_time; ///< Unused value, used to load old savegames. @@ -290,6 +297,7 @@ struct NetworkSettings { bool reload_cfg; ///< reload the config file before restarting std::string last_joined; ///< Last joined server bool no_http_content_downloads; ///< do not do content downloads over HTTP + UseRelayService use_relay_service; ///< Use relay service? }; /** Settings related to the creation of games. */ diff --git a/src/table/settings/network_settings.ini b/src/table/settings/network_settings.ini index 552f588234..86f8aafc87 100644 --- a/src/table/settings/network_settings.ini +++ b/src/table/settings/network_settings.ini @@ -10,6 +10,7 @@ static void UpdateClientConfigValues(); static std::initializer_list _server_game_type{"local", "public", "invite-only"}; +static std::initializer_list _use_relay_service{"never", "ask", "allow"}; static const SettingVariant _network_settings_table[] = { [post-amble] @@ -261,3 +262,16 @@ var = network.no_http_content_downloads flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC def = false cat = SC_EXPERT + +[SDTC_OMANY] +var = network.use_relay_service +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC +def = URS_ASK +min = URS_NO +max = URS_ALLOW +full = _use_relay_service +str = STR_CONFIG_SETTING_USE_RELAY_SERVICE +strhelp = STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT +strval = STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER +cat = SC_BASIC diff --git a/src/widgets/network_widget.h b/src/widgets/network_widget.h index c8ec22e861..cef564e980 100644 --- a/src/widgets/network_widget.h +++ b/src/widgets/network_widget.h @@ -128,4 +128,13 @@ enum NetworkCompanyPasswordWidgets { WID_NCP_OK, ///< Safe the password etc. }; +/** Widgets of the #NetworkAskRelayWindow class. */ +enum NetworkAskRelayWidgets { + WID_NAR_CAPTION, ///< Caption of the window. + WID_NAR_TEXT, ///< Text in the window. + WID_NAR_NO, ///< "No" button. + WID_NAR_YES_ONCE, ///< "Yes, once" button. + WID_NAR_YES_ALWAYS, ///< "Yes, always" button. +}; + #endif /* WIDGETS_NETWORK_WIDGET_H */ diff --git a/src/window.cpp b/src/window.cpp index 1c2a305ba8..4072885116 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1332,6 +1332,7 @@ static uint GetWindowZPriority(WindowClass wc) case WC_ERRMSG: case WC_CONFIRM_POPUP_QUERY: + case WC_NETWORK_ASK_RELAY: case WC_MODAL_PROGRESS: case WC_NETWORK_STATUS_WINDOW: case WC_SAVE_PRESET: diff --git a/src/window_type.h b/src/window_type.h index 2b486fbdf6..00aaaf1fde 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -478,6 +478,12 @@ enum WindowClass { */ WC_NETWORK_STATUS_WINDOW, + /** + * Network ask relay window; %Window numbers: + * - 0 - #NetworkAskRelayWidgets + */ + WC_NETWORK_ASK_RELAY, + /** * Chatbox; %Window numbers: * - #DestType = #NetWorkChatWidgets From dd54e4c8352b1f2215691f6d6b333868e760fbbd Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 20 Jul 2021 18:51:39 +0000 Subject: [PATCH 19/63] Update: Translations from eints swedish: 1 change by joeax910 romanian: 36 changes by ALEX11BR --- src/lang/afrikaans.txt | 2 ++ src/lang/arabic_egypt.txt | 2 ++ src/lang/basque.txt | 2 ++ src/lang/belarusian.txt | 2 ++ src/lang/brazilian_portuguese.txt | 2 ++ src/lang/bulgarian.txt | 2 ++ src/lang/catalan.txt | 2 ++ src/lang/chuvash.txt | 2 ++ src/lang/croatian.txt | 2 ++ src/lang/czech.txt | 2 ++ src/lang/danish.txt | 2 ++ src/lang/dutch.txt | 2 ++ src/lang/english_AU.txt | 2 ++ src/lang/english_US.txt | 2 ++ src/lang/esperanto.txt | 2 ++ src/lang/estonian.txt | 2 ++ src/lang/faroese.txt | 2 ++ src/lang/finnish.txt | 2 ++ src/lang/french.txt | 2 ++ src/lang/frisian.txt | 2 ++ src/lang/gaelic.txt | 2 ++ src/lang/galician.txt | 2 ++ src/lang/german.txt | 2 ++ src/lang/greek.txt | 2 ++ src/lang/hebrew.txt | 2 ++ src/lang/hindi.txt | 2 ++ src/lang/hungarian.txt | 2 ++ src/lang/icelandic.txt | 2 ++ src/lang/ido.txt | 2 ++ src/lang/indonesian.txt | 2 ++ src/lang/irish.txt | 2 ++ src/lang/italian.txt | 2 ++ src/lang/japanese.txt | 2 ++ src/lang/korean.txt | 2 ++ src/lang/latin.txt | 2 ++ src/lang/latvian.txt | 2 ++ src/lang/lithuanian.txt | 2 ++ src/lang/luxembourgish.txt | 2 ++ src/lang/macedonian.txt | 2 ++ src/lang/malay.txt | 2 ++ src/lang/maltese.txt | 2 ++ src/lang/marathi.txt | 2 ++ src/lang/norwegian_bokmal.txt | 2 ++ src/lang/norwegian_nynorsk.txt | 2 ++ src/lang/persian.txt | 2 ++ src/lang/polish.txt | 2 ++ src/lang/portuguese.txt | 2 ++ src/lang/romanian.txt | 39 ++++++++++++++++++++++++++++++- src/lang/russian.txt | 2 ++ src/lang/serbian.txt | 2 ++ src/lang/simplified_chinese.txt | 2 ++ src/lang/slovak.txt | 2 ++ src/lang/slovenian.txt | 2 ++ src/lang/spanish.txt | 2 ++ src/lang/spanish_MX.txt | 2 ++ src/lang/swedish.txt | 3 +++ src/lang/tamil.txt | 2 ++ src/lang/thai.txt | 2 ++ src/lang/traditional_chinese.txt | 2 ++ src/lang/turkish.txt | 2 ++ src/lang/ukrainian.txt | 2 ++ src/lang/urdu.txt | 2 ++ src/lang/vietnamese.txt | 2 ++ src/lang/welsh.txt | 2 ++ 64 files changed, 165 insertions(+), 1 deletion(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 02c81e2dd4..621735ed6c 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1382,6 +1382,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dubbel-klik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkel klik (met fokus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkel klik (dadelik) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Regs-klik emulasie: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Kies die manier om regs-klik na te maak STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-klik @@ -2042,6 +2043,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient Lys + STR_NETWORK_SERVER :Verskaffer STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Aanskouers diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 5a1643dfc0..825aa40d23 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1234,6 +1234,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :تحريك ال STR_CONFIG_SETTING_SCROLLWHEEL_OFF :عدم استخدام STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :سرعة تحريك الخريطة: {STRING} + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :محاكاة الزر الأيمن : {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :الأوامر STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :للتحكم @@ -1738,6 +1739,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :قائمة ال + STR_NETWORK_SERVER :خادم STR_NETWORK_CLIENT :عميل STR_NETWORK_SPECTATORS :المشاهدين diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 27b544899d..bfdce18047 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1321,6 +1321,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Klik bikoitza STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Klik bakarra (enfokatua dagoenean) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Klik bakarra (Berehala) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Xaguaren eskuineko botoiaren emulazioa: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Aukeratu saguaren eskuineko botoiaren klikak emulatzeko modua STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Komandoa+Klik @@ -1917,6 +1918,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Bezero zerrenda + STR_NETWORK_SERVER :Zerbitzaria STR_NETWORK_CLIENT :Bezeroa STR_NETWORK_SPECTATORS :Ikusleak diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 1e69efaa99..ddbd1852c5 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1692,6 +1692,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Падвоен STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Адзіночная пстрычка (калі выдзелена) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Адзіночная пстрычка (неадкладна) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Эмуляцыя правага кліка мышы: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Выбаць мэтад імітацыі націсьненьня правай кнопкі мышы. STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :каманда+клік @@ -2352,6 +2353,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Сьпіс кл + STR_NETWORK_SERVER :Сэрвэр STR_NETWORK_CLIENT :Кліент STR_NETWORK_SPECTATORS :Назіральнікі diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 27a3a5018c..13055315b7 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1440,6 +1440,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Clique duplo STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clique simples (quando em foco) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clique simples (imediatamente) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulação do clique direito: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Seleciona o método para emular cliques com o botão direito STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Clique de comando @@ -2181,6 +2182,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Você t STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Você tem certeza que quer excluir a empresa '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Você tem certeza que quer restaurar a senha da empresa '{COMPANY}'? + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index fdd520a2b8..75d91f36e4 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1345,6 +1345,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Двойно н STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Еднократно натискане (когато е на фокус) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Еднократно натискане (незабавно) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Дясно-щракане емулациа: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Избира метода за симулация на десния бутон на мишката STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Команда-щракане @@ -1963,6 +1964,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с + STR_NETWORK_SERVER :Сървър STR_NETWORK_CLIENT :Клиент STR_NETWORK_SPECTATORS :Наблюдатели diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index c31fe6503a..c9efbcbc50 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1440,6 +1440,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Doble clic STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Un clic (quan té el focus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Un clic (immediatament) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulació del botó dret: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecciona el mètode per emular els clics amb el botó dret del ratolí STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-clic @@ -2171,6 +2172,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Esteu s STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Esteu segur que voleu esborrar la companyia «{COMPANY}»? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Esteu segur que voleu restablir la contrasenya de la companyia «{COMPANY}»? + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Espectadors diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 35fa59dae6..a2a5d98ac7 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -588,6 +588,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Симĕс STR_CONFIG_SETTING_LIVERIES_NONE :Ҫук STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Сӳнтер + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Сӳнтер @@ -796,6 +797,7 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн + # Network set password # Network company info join/password diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 006f6631cd..133f4e9476 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1484,6 +1484,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dvostruki klik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Jedan klik (kada je usredotočen) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Jedan klik (odmah) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulacija desnog klika mišem: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Odaberi metodu imitiranja klika na desnu tipku miša STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+klik @@ -2147,6 +2148,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Popis klijenata + STR_NETWORK_SERVER :Poslužitelj STR_NETWORK_CLIENT :Klijent STR_NETWORK_SPECTATORS :Promatrači diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 3e9c872271..05ef9cbb90 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1512,6 +1512,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dvojklik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Jedno kliknutí (je-li zaměřen) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Jedno kliknutí (okamžitě) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulace pravého tlačítka: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Vybrat metodu emulování stisknutí pravého tlačítka myši STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command + kliknutí @@ -2212,6 +2213,7 @@ STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Poslat z STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Jste si jisti, že chcete smazat společnost '{COMPANY}'? + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Pozorovatelé diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 34fd9f74e0..ffd56f01ce 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1389,6 +1389,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dobbelt click STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkelt click (når fokuseret) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkelt click (umiddelbart) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Højreklik-emulering: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Vælg metode til at emulere højre muse-knap klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Kommandoklik @@ -2056,6 +2057,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient liste + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Tilskuere diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 37628b3839..d43f07801b 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1439,6 +1439,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dubbelklik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkele klik (met focus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkele klik (onmiddelijk) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Rechtsklikemulatie: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Methode selecteeren voor nabootsen van rechtsklikken STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-klik @@ -2179,6 +2180,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Weet je STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Weet je zeker dat je het bedrijf '{COMPANY}' wilt verwijderen? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Weet je zeker dat je het wachtwoord voor bedrijf '{COMPANY}' wilt terugstellen? + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Speler STR_NETWORK_SPECTATORS :Toeschouwers diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index fd587f5d39..d74b1df309 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1331,6 +1331,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Double click STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Single click (when focussed) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Single click (immediately) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Right-click emulation: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Select the method to emulate right mouse-button clicks STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Click @@ -1973,6 +1974,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectators diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index b26763913d..171f5ceb5c 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1439,6 +1439,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Double click STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Single click (when focused) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Single click (immediately) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Right-click emulation: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Select the method to emulate right mouse-button clicks STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Click @@ -2177,6 +2178,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Are you STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Are you sure you want to delete company '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Are you sure you want to reset the password of company '{COMPANY}'? + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectators diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 32f7ef8511..252cf552bb 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Duobla klako STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Unuobla klako (kiam enfokusigita) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Unuobla klako (tuj) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Imitado de dekstra klako: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Komando+Klako STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Klako @@ -1657,6 +1658,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientlisto + STR_NETWORK_SERVER :Servilo STR_NETWORK_CLIENT :Kliento STR_NETWORK_SPECTATORS :Spektantoj diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 0693fce86a..94e5bb93c1 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1487,6 +1487,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Topeltklõpsuga STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Ühe klõpsuga (kui on fookuses) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Ühe klõpsuga (koheselt) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Paremklõpsu matkimine: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Vali meetod mille järgi emuleeritakse hiite paremklõpse STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+klõps @@ -2217,6 +2218,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Kas ole STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Kas oled kindel, et tahad kustutada ettevõtte '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Kas oled kindel, et soovid nullida ettevõtte '{COMPANY}' salasõna? + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Vaatlejad diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 3da8d8472d..2da804c44b 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1289,6 +1289,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dupult trýst STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Einkult trýst (tá savna) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Einkult trýst (alt fyri eitt) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Høgra-trýst eftirgerð: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Vel háttin at eftirgerða trýst á høgra músa knøtt STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+trýst @@ -1823,6 +1824,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Listi yvir klie + STR_NETWORK_SERVER :Servari STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Eygleiðarar diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index a7ea360d13..5b2e8b6946 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1439,6 +1439,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Kaksoisnapsautu STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Yksi napsautus (kun kohdistettuna) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Yksi napsautus (välitön) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Oikean painikkeen emulointi: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Valitse, miten hiiren oikean painikkeen painalluksia emuloidaan STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Komento+napsautus @@ -2178,6 +2179,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Haluatk STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Haluatko varmasti poistaa yhtiön ”{COMPANY}”? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Haluatko varmasti nollata yhtiön ”{COMPANY}” salasanan? + STR_NETWORK_SERVER :Palvelin STR_NETWORK_CLIENT :Pelaaja STR_NETWORK_SPECTATORS :Katsojat diff --git a/src/lang/french.txt b/src/lang/french.txt index 5e1168c852..9f709086c4 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1440,6 +1440,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Double clic STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Simple clic (avec le focus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Simple clic (immédiatement) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Émulation du clic droit{NBSP}: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Choisir la méthode pour émuler les clics du bouton droit de la souris STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Commande-clic @@ -2181,6 +2182,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Êtes-v STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Êtes-vous sûr de vouloir supprimer la compagnie '{COMPANY}'{NBSP}? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Êtes-vous sûr de vouloir réinitialiser le mot de passe de la compagnie '{COMPANY}'? + STR_NETWORK_SERVER :Serveur STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectateurs diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 58b7020bd1..39f23fb296 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1342,6 +1342,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dûbel klikken STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Inkele klik (ûnder fokus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Inkele klik (direktst) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Rjochtsklikemulaasje: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selektearje de metoade dy't brûkt wurdt om rjochts-klikken mûlk te meitsjen STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Kommando+Klik @@ -1899,6 +1900,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Client l + STR_NETWORK_SERVER :Tsjinner STR_NETWORK_CLIENT :Kliïnt STR_NETWORK_SPECTATORS :Taskôgers diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 387b0de079..c4402c96c0 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1558,6 +1558,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Briogadh dùbai STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Aon bhriogadh (le fòcas) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Aon bhriogadh (sa bhad) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Riochdachadh a' bhriogaidh dheis: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Tagh an dòigh sa thèid briogadh le putan deas na luchaige a riochdachadh STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Briogadh @@ -2208,6 +2209,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liosta nan clia + STR_NETWORK_SERVER :Frithealaiche STR_NETWORK_CLIENT :Cliant STR_NETWORK_SPECTATORS :Amharcaichean diff --git a/src/lang/galician.txt b/src/lang/galician.txt index fc5d56a9fc..4c50913f3c 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1385,6 +1385,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dobre clic STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clic sinxelo (centrado) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clic sinxelo (inmediatamente) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulación do botón dereito: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecciona o método para emular clics co botón dereito do rato STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Tecla Command+Clic @@ -2044,6 +2045,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de client + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores diff --git a/src/lang/german.txt b/src/lang/german.txt index fc474cfa36..d2df131177 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1440,6 +1440,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Doppelklick STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Ein Klick (wenn hervorgehoben) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Ein Klick (sofort) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Rechtsklick-Emulation: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Lege die Methode, die rechte Maustaste zu emulieren, fest STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Befehlstaste+Klick @@ -2179,6 +2180,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Sind Si STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Sind Sie sicher, dass Sie die Firma '{COMPANY}' löschen möchten? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Sind Sie sicher, dass Sie das Passwort der Firma '{COMPANY}' zurücksetzen möchten? + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Teilnehmer STR_NETWORK_SPECTATORS :Zuschauer diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 637ebdafe1..a38205df25 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1498,6 +1498,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Με διπλό STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Με απλό κλικ (όταν είναι επικεντρωμένο) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Με απλό κλικ (άμεσα) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Εξομοίωση δεξιού κλικ {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Επιλέξτε τον τρόπο μίμησης των πατημάτων του δεξιού κουμπιού του ποντικιού STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Κλικ @@ -2165,6 +2166,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Λίστα συ + STR_NETWORK_SERVER :Διακομιστής STR_NETWORK_CLIENT :Πελάτης STR_NETWORK_SPECTATORS :Θεατές diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 073ad733d2..8bc76c9e88 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1373,6 +1373,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :קליק כפו STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :קליק יחיד (כאשר בפוקוס) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :קליק יחיד (מיד) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :{STRING} :הדמיית כפתור ימני בעכבר STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :בחר בשיטה לדימוי קליקים בכפתור העכבר הימני STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-click @@ -2022,6 +2023,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :רשימת מש + STR_NETWORK_SERVER :שרת STR_NETWORK_CLIENT :לקוח STR_NETWORK_SPECTATORS :צופים diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index cd76a92a69..51b0a259b8 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -343,6 +343,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :अक्षम + STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :सीमाहीन (आपके कंप्यूटर द्वारा सीमित) STR_CONFIG_SETTING_SOUND_NEWS :समाचार पत्र: {STRING} @@ -455,6 +456,7 @@ STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}उद + # Network set password # Network company info join/password diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index b7f93544ae..163085433b 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1494,6 +1494,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dupla kattintá STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Egyszeres kattintás (amikor előtérben van) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Egyszeres kattintás (azonnal) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Jobb egérgomb emuláció: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Jobb egérgomb emulálási módszerének kiválasztása STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Parancs+Kattintás @@ -2222,6 +2223,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Biztos STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Biztos ki akarod törölni a '{COMPANY}' vállalatot? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Biztos vissza akarod állítani a '{COMPANY}' vállalat jelszavát? + STR_NETWORK_SERVER :Szerver STR_NETWORK_CLIENT :Kliens STR_NETWORK_SPECTATORS :Megfigyelők diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index f5b59582d9..46c8c44f14 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1288,6 +1288,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Tvísmella STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Ýta einusinni (þegar valið) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Ýta einusinni (birtist strax) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Hægrismellshermun: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Veldu hvernig herma á eftir hægri smelli á músinni STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+smella @@ -1861,6 +1862,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Listi yfir leik + STR_NETWORK_SERVER :Þjónn STR_NETWORK_CLIENT :Notandi STR_NETWORK_SPECTATORS :Áhorfendur diff --git a/src/lang/ido.txt b/src/lang/ido.txt index c58ec2a322..bf4e15e9cb 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -568,6 +568,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora + # Config errors @@ -644,6 +645,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x + # Network set password # Network company info join/password diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 99c4473b65..e38e8eb5c5 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1430,6 +1430,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Klik ganda STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Klik sekali (saat tersorot) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Klik sekali (langsung) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulasikan klik kanan: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Pilih metode untuk meng-emulasi klik kanan mouse STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Perintah-klik @@ -2158,6 +2159,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Apakah STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Anda yakin ingin menghapus perusahaan '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Anda yakin ingin menyetel ulang sandi perusahaan '{COMPANY}'? + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klien STR_NETWORK_SPECTATORS :Penonton diff --git a/src/lang/irish.txt b/src/lang/irish.txt index dfd5a0cf00..9d31feafe0 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1350,6 +1350,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Cliceáil dhúb STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Cliceáil amháin (agus fócas aige) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Cliceáil amháin (láithreach) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Aithris deaschliceála: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Roghnaigh an modh a úsáidfear chun athris a dhéanamh ar dheaschliceáil an chnaipe luchóige STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Ordú+Cliceáil @@ -1996,6 +1997,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liosta na gclia + STR_NETWORK_SERVER :Freastalaí STR_NETWORK_CLIENT :Cliant STR_NETWORK_SPECTATORS :Féachadóirí diff --git a/src/lang/italian.txt b/src/lang/italian.txt index f8817d32bd..ab78589e49 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1444,6 +1444,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Doppio clic STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clic (con casella di testo attiva) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clic (immediato) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulazione clic destro: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Seleziona il metodo per emulare i clic con il tasto destro del mouse STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :COMANDO+clic @@ -2138,6 +2139,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Elenco dei clie STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Sei sicuro di voler eliminare la compagnia '{COMPANY}'? + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spettatori diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 5b9628862c..ac531f9a8e 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1431,6 +1431,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :ダブルクリ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :クリック(フォーカス後) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :クリック(即時) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :右クリックのエミュレーション: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :右クリックをエミュレートする方法を指定します STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :コマンド+クリック (Mac) @@ -2159,6 +2160,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}プレ STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}会社 '{COMPANY}' を削除してもよろしいですか? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}会社 '{COMPANY}'のパスワードをリセットしてもよろしいですか? + STR_NETWORK_SERVER :サーバー STR_NETWORK_CLIENT :クライアント STR_NETWORK_SPECTATORS :観覧者 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index f62ad318ec..3932893bbd 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1440,6 +1440,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :더블 클릭 STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :한 번 클릭 (커서가 활성화되어 있을 때) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :한 번 클릭 (즉시) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :오른쪽 클릭 매크로: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :오른쪽 마우스 버튼 클릭을 대신할 방법을 선택합니다. STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :커맨드 + 클릭 @@ -2181,6 +2182,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}'{STRIN STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}'{COMPANY}' 회사를 정말로 삭제하시겠습니까? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}'{COMPANY}' 회사의 비밀번호를 정말로 초기화하시겠습니까? + STR_NETWORK_SERVER :서버 STR_NETWORK_CLIENT :접속자 STR_NETWORK_SPECTATORS :관전자 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 5f29e1d508..a9cfafa319 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1561,6 +1561,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Bis premendo STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Semel premendo (dum conspicua est) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Semel premendo (statim) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Aemulatio dextrum premendi: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Eligere modum aemulationis dextrum globulum muris premendi STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Cmd+Premere @@ -2215,6 +2216,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Index clientum + STR_NETWORK_SERVER :Servatrum STR_NETWORK_CLIENT :Cliens STR_NETWORK_SPECTATORS :Spectatores diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 3480ee5e6f..db3b1e2625 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1404,6 +1404,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :dubultklikšķi STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :viens klikšķis (kad fokusēta) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :viens klikšķis (nekavējoties) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Labā klikšķa emulēšana: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Izvēlēties peles labās pogas klikšķu emulēšanas paņēmienu STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Komanda+klikšķis @@ -2091,6 +2092,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spēlētāju sa + STR_NETWORK_SERVER :Serveris STR_NETWORK_CLIENT :Spēlētājs STR_NETWORK_SPECTATORS :Novērotāji diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index a7b1249f94..6b6b9040a6 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1629,6 +1629,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dvikartis spust STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Vienkartis spustelėjimas (jei židinyje) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Vienkartis spustelėjimas (iškart) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Dešiniojo pelės mygtuko emuliacija: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Pasirinkite būdą, kurį atliks dešinio pelės klavišo paspaudimas STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Click @@ -2335,6 +2336,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Žaidėjų sąr + STR_NETWORK_SERVER :Serveris STR_NETWORK_CLIENT :Žaidėjas STR_NETWORK_SPECTATORS :Stebėtojai diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 749439392c..ba2fbd623a 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1424,6 +1424,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Duebelklick STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Ee Klick (wann fokusséiert) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Ee Klick (direkt) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Rietsklickemulatioun: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Wiel d'Method aus fir déi riets Maustast ze emuléiren STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :COMM+Klick @@ -2116,6 +2117,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spillerlëscht + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Spiller STR_NETWORK_SPECTATORS :Zuschauer diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index a164bc935d..9c90f4015e 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -853,6 +853,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Дебелин + STR_CONFIG_SETTING_SOUND_NEW_YEAR :Крај на година: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM :Изградба: {STRING} STR_CONFIG_SETTING_SOUND_VEHICLE :Возила: {STRING} @@ -1002,6 +1003,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x + # Network set password # Network company info join/password diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 9e1bb06704..7dc822dc14 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1265,6 +1265,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dua klik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Satu klik (bila difokuskan) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Satu klik (segera) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulasi klik kanan: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+Klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Klik @@ -1758,6 +1759,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Senarai klien + STR_NETWORK_SERVER :Pelayan STR_NETWORK_CLIENT :Klien STR_NETWORK_SPECTATORS :Penyaksi diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 617806cf34..d10e67fcca 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -473,6 +473,7 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avza jekk jinti + STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :L-ebda azzjoni STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :L-azzjonijiet kollha STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Uza l-lista avvanzata tal-vetturi: {STRING} @@ -572,6 +573,7 @@ STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} + # Network set password # Network company info join/password diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 3dce26c937..20d6859fee 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -804,6 +804,7 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE : वाहन + STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :कोणतीही कृती नाही STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :सर्व कृत्या @@ -942,6 +943,7 @@ STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} + # Network set password # Network company info join/password diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 6ef70c3fa0..56730eb4b0 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1442,6 +1442,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dobbeltklikk STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkelt klikk (ved fokus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkelt klikk (umiddelbart) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Høyreklikkemulering: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Velg metoden å etterligne høyreklikk STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Kommando+klikk @@ -2172,6 +2173,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Er du s STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Er du sikker på at du vil slette firmaet '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Er du sikker på at du vil tilbakestille passordet til firma '{COMPANY}'? + STR_NETWORK_SERVER :Tjener STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Tilskuere diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 57de575329..ed3c411483 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1319,6 +1319,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dobbelklikk STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkelt klikk (når vald) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkelt klikk (umiddelbart) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Høgreklikkemulering: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Vel metode for å gjenskape høgre museknapp-klikk STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Kommando+klikk @@ -1920,6 +1921,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste over klie + STR_NETWORK_SERVER :Tenar STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Tilskodarar diff --git a/src/lang/persian.txt b/src/lang/persian.txt index db150a4716..d9380d0809 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1234,6 +1234,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :جابجا کر STR_CONFIG_SETTING_SCROLLWHEEL_OFF :خاموش STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :سرعت حرکت نقشه با چرخاندن غلطک ماوس: {STRING} + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :شبیه سازی کلیک راست: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :دستور+کلیک STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :کنترل+کلیک @@ -1718,6 +1719,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}لیست + STR_NETWORK_SERVER :سرویس دهنده STR_NETWORK_CLIENT :سرویس گیرنده STR_NETWORK_SPECTATORS :تماشاگران diff --git a/src/lang/polish.txt b/src/lang/polish.txt index b84bfce185..072c01e9d8 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1810,6 +1810,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Podwójny klik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Pojedyncze kliknięcie (w przybliżeniu) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Pojedyncze kliknięcie (natychmiast) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulacja prawego przycisku myszy: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Wybierz metodę emulacji klikania prawym przyciskiem myszki STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+klik @@ -2502,6 +2503,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista klientów + STR_NETWORK_SERVER :Serwer STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Widzowie diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index e0ffe8a3f9..3dbf66002c 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1440,6 +1440,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Duplo clique STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clique simples (quando em foco) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clique (imediatamente) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulação de clique de botão direito: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecione o método de emulação dos cliques do botão direito do rato STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND : + Clique @@ -2181,6 +2182,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Tem a c STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Tem a certeza que quer apagar a empresa '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Tem a certeza que quer restabelecer a palavra-chave da empresa '{COMPANY}'? + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index bf9b47a0cb..60a1a4133a 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -155,6 +155,7 @@ STR_BAGS :{COMMA}{NBSP}sa STR_TONS :{COMMA} tone STR_LITERS :{COMMA} litri STR_ITEMS :{COMMA} bucăți +STR_CRATES :{COMMA}{NBSP}{P pachet pachete "de pachete"} # Colours, do not shuffle STR_COLOUR_DARK_BLUE :Albastru închis @@ -860,6 +861,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Ofertă expirată:{}{}Transportul de {STRING} de la {STRING} la {STRING} nu va mai fi subvenţionat STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Ofertă retrasă:{}{}Transportul de {STRING} de la {STRING} la {STRING} nu va mai fi subvenţionat +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subvenţie oferită:{}{}Primul transport de {STRING} de la {STRING} la {STRING} va primi o subvenţie pe {NUM} {P an ani "de ani"} din partea autorităţilor locale! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvenţie acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări cu 50% mai mari în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvenţie acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări duble în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvenţie acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări triple în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvenţie acordată companiei {STRING}!{}{}Transportul de {STRING} de la {STRING} la {STRING} va aduce încasări de patru ori mai mari în următor{P 4 ul ii ii} {NUM} {P an ani "de ani"}! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Haos pe străzile din {TOWN}!{}{}Programul finanțat de {STRING} pentru reconstrucția străzilor aduce 6 luni de haos participanților la trafic! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopol de transport! @@ -917,6 +923,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexican (M STR_GAME_OPTIONS_CURRENCY_NTD :Noul Dolar Taiwanez (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi Chinezesc (CNY) STR_GAME_OPTIONS_CURRENCY_INR :Rupia Indiană (INR) +STR_GAME_OPTIONS_CURRENCY_IDR :Rupia indoneziană (IDR) STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysian (MYR) ############ end of currency region @@ -1002,6 +1009,7 @@ STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Ratele d STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set grafic de bază STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selectează setul grafic de bază utilizat în joc +STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} {P fișier fișiere "de fișiere"} lipsă/corupt{P "" e e} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul grafic de bază STR_GAME_OPTIONS_BASE_SFX :{BLACK}Set sunete de bază @@ -1113,6 +1121,7 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Setări joc (st STR_CONFIG_SETTING_TYPE_GAME_INGAME :Setări joc (stocate în fişierul de salvare; afectează doar jocul curent) STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Setări companie (stocate în fişierele de salvare; afectează doar jocurile noi) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Setări companie (stocate în fişierul de salvare; afectează doar compania curentă) +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Atenție! STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categorie: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tip: @@ -1162,6 +1171,7 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Defecțiuni ale STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controlează cât de des se defectează vehiculele prost întreținute STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplicator al subvențiilor: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Alege cât de mult se plătește pentru conexiuni subvenționate +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} {P an ani "de ani"} STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Costuri de construcție: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Alege nivelul de construcție și costurile de achiziție STR_CONFIG_SETTING_RECESSIONS :Recesiuni: {STRING} @@ -1186,6 +1196,7 @@ STR_CONFIG_SETTING_EXTRADYNAMITE :Permite demolar STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitează eliminarea de clădiri şi infrastructură deţinute de oraş STR_CONFIG_SETTING_TRAIN_LENGTH :Lungimea maximă a trenurilor: {STRING} STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Configurează lungimea maximă a trenurilor +STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} {P 0 pătrățel pătrățele "de pătrățele"} STR_CONFIG_SETTING_SMOKE_AMOUNT :Cantitatea de fum/ scântei ale vehiculului: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Configurează cât de mult fum sau cât de multe scântei sunt emise de vehicule STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelul de acceleraţie al trenurilor: {STRING} @@ -1286,12 +1297,16 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Înnoire automa STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :După activare, orice vehicul care este învechit va fi reînnoit automat când condițiile de înlocuire automată sunt îndeplinite STR_CONFIG_SETTING_AUTORENEW_MONTHS :Autoreînnoire când vehiculul {STRING} vârsta maximă STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Vârsta aproximativă când un vehicul ar trebui autoreînnoit +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} {P 0 lună luni "de luni"} până la +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} {P 0 lună luni "de luni"} STR_CONFIG_SETTING_AUTORENEW_MONEY :Fonduri minime pentru înnoire automată: {STRING} STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Suma minimă care trebuie să rămână disponibilă atunci când se face autoreînnoirea STR_CONFIG_SETTING_ERRMSG_DURATION :Durata de afișare a mesajelor de eroare: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durata afișării mesajelor de eroare în fereastra roșie. Unele mesaje de eroare (cele critice) nu sunt închise automat după trecerea acestei perioade, și trebuie închise manual. +STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} {P 0 secundă secunde "de secunde"} STR_CONFIG_SETTING_HOVER_DELAY :Afișează texte informative: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Durata dinaintea afișării sfaturilor când se ține mausul pe un element al interfeței. Alternativ, afișarea sfaturilor poate fi setată pentru clic-dreapta +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Plutește {COMMA} {P 0 milisecundă milisecunde "de milisecunde"} STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Click dreapta STR_CONFIG_SETTING_POPULATION_IN_LABEL :Afişează populaţia unui oras lângă nume: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Afișează populația orașelor în numele afișate pe hartă @@ -1354,6 +1369,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verde STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde închis STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Mov STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamentul derulării hărții +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mută fereastra de vizualizare ținând apăsat click dreapta, poziția cursorului rămânând fixă STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mută harta ținând apăsat click dreapta, poziția cursorului rămânând fixă STR_CONFIG_SETTING_SCROLLMODE_RMB :Mută harta cu clic dreapta STR_CONFIG_SETTING_SCROLLMODE_LMB :Mută harta cu clic stânga @@ -1382,6 +1398,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Click dublu STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Un singur click (când este în focus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Un singur click (instant) + STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulare click-dreapta: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Alege metoda de emulare a click-urilor provenite de la butonul din dreapta al mouse-ului STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Comandă+Click @@ -1490,6 +1507,7 @@ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervaluri de STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Alege dacă întreținerea vehiculelor este activată de trecerea unei anumite perioade de timp, sau scăzând un anumit procent din gradul de rezistență al vehiculului STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalul de întreținere implicit al trenurilor: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Alege perioada de întreținere implicită pentru noi vehicule feroviare, dacă nu există un interval de întreținere stabilit pentru vehicul +STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} {P 0 zi zile "de zile"}/% STR_CONFIG_SETTING_SERVINT_DISABLED :Dezactivat STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Intervalul de întreținere implicit al vehiculelor rutiere: {STRING} STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Alege perioada de întreținere implicită pentru noi vehicule rutiere, dacă nu există un interval de întreținere stabilit pentru vehicul @@ -1556,6 +1574,7 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procentul din p STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentul din câştig care este oferit legăturilor intermediare pentru alimentare, oferind mai mult control asupra încasărilor STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Când se trage cu mouse-ul, plasează semnale la fiecare: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Configurează distanța la care se vor construi semnale pe șină până la următorul obstacol (semnal, intersecție), dacă se trage cu mausul +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} {P 0 pătrățel pătrățele "de pătrățele"} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :La plasarea mai multor semale, păstrează distanţa fixă între acestea: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Construieşte automat semafoare înainte de: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Alege anul din care se vor folosi semnale electrice pe calea feroviară. Înainte de acest an, se vor folosi semnale non-electrice care au aceeasi funcționalitate dar arată diferit @@ -1606,6 +1625,7 @@ STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Poziţia orizon STR_CONFIG_SETTING_STATUSBAR_POS :Poziţia barei de stare: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Poziţia orizontală a barei principale în partea de jos a ecranului STR_CONFIG_SETTING_SNAP_RADIUS :Raza "magnetică" a ferestrelor: {STRING} +STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} {P 0 pixel pixeli "de pixeli"} STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Dezactivat STR_CONFIG_SETTING_SOFT_LIMIT :Numărul maxim de ferestre nefixate: {STRING} STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} @@ -1635,7 +1655,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :deloc STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicator iniţial dimensiune oraş: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Dimensiunea medie a oraşelor mari relativ la oraşele normale, la începutul jocului +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Actualizează graficul de distribuţie la fiecare {STRING}{NBSP}{P 0:2 zi zile "de zile"} STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Interval de timp între recalculările graficului de conexiuni. Fiecare recalculare calculează planurile unei componente ale graficului. Asta înseamnă că o valoare X pentru această setare nu va duce la actualizarea întregului grafic la fiecare X zile, ci doar o componentă va fi actualizată. Cu cât e mai mică valoarea, cu atât mai timp CPU va fi necesar pentru calcule. Cu cât e mai mare valoarea, cu atât va dura mai mult până va începe distribuția mărfii pe rute noi. +STR_CONFIG_SETTING_LINKGRAPH_TIME :Acordă {STRING}{NBSP}{P 0:2 zi zile "de zile"} pentru recalcularea graficului de distribuţie STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetric STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetric @@ -1788,6 +1810,8 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Verific STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Afişează setările pentru Inteligența Artificială şi pentru Scripturi Joc STR_INTRO_TOOLTIP_QUIT :{BLACK}Ieşi din 'OpenTTD' +STR_INTRO_BASESET :{BLACK}Setul grafic actual are lipsă {NUM} {P sprite spriteuri "de spriteuri"}. Verificați actualizările pentru setul de bază. +STR_INTRO_TRANSLATION :{BLACK}Acestei traduceri îi lipse{P 0 "şte" "sc" "sc"} {NUM} {P text texte "de texte"}. Te rugăm să ajuti la îmbunătățirea OpenTTD înrolându-te ca traducător. Citește fișierul readme.txt pentru detalii. # Quit window STR_QUIT_CAPTION :{WHITE}Ieşire din joc @@ -1914,6 +1938,7 @@ STR_FACE_EARRING :Cercei: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Schimbă cravata sau cerceii ############ Next lines match ServerGameType +STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Public ############ End of leave-in-this-order # Network server list @@ -1963,7 +1988,7 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Caută s STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Caută în LAN STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Caută servere în rețeaua locală STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Adaugă un server -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adaugă un server la lista care va fi verificată pentru jocuri active +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adaugă un server la listă. Poate să fie ori o adresă de server, ori un cod de invitație STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Porneşte serverul STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Porneşte un server propriu @@ -1979,10 +2004,13 @@ STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protejea STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Vizibilitate STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Dacă alți oameni îți pot vedea serverul în lista publică +STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P client clienţi "de clienți"} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Număr maxim de clienţi: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Alege un număr maxim de clienţi. Nu trebuie ocupate toate locurile. +STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} {P companie companii "de companii"} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Companii maxim: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitează serverul la un anumit număr de companii +STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} {P spectator spectatori "de spectatori"} STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Spectatori maxim: STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limitează serverul la un anumit număr de spectatori STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Limba vorbită: @@ -2046,6 +2074,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Modific STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Vizibilitate STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Dacă alți oameni îți pot vedea serverul în lista publică STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Modifică-ți numele +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Numele tău de jucător STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Trimite un mesaj tuturor jucătorilor acestei companii STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Trimite un mesaj tuturor spectatorilor @@ -2057,6 +2086,7 @@ STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Deblocare cu pa STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Sigur vrei să dai afară jucătorul '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Sigur vrei să blochezi jucătorul '{STRING}'? + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectatori @@ -2698,6 +2728,7 @@ STR_FRAMERATE_AVERAGE :{WHITE}Medie STR_FRAMERATE_MEMORYUSE :{WHITE}Memorie STR_FRAMERATE_DATA_POINTS :{BLACK}Date bazate pe măsurători {COMMA} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} cadre/s STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} cadre/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} cadre/s @@ -2749,6 +2780,7 @@ STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrare după: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Suprascrie fișierul +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Sigur vrei să suprascrii fișierul existent? STR_SAVELOAD_DIRECTORY :{STRING} (listă) STR_SAVELOAD_OSKTITLE :{BLACK}Introduceţi un nume pentru salvare @@ -2994,6 +3026,7 @@ STR_INVALID_VEHICLE : Date: Wed, 21 Jul 2021 10:32:33 +0100 Subject: [PATCH 20/63] Fix #8335: Race condition in music mixer (#9450) --- src/mixer.cpp | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/mixer.cpp b/src/mixer.cpp index d892a573c6..b9b20fccfd 100644 --- a/src/mixer.cpp +++ b/src/mixer.cpp @@ -9,12 +9,13 @@ #include "stdafx.h" #include +#include #include "core/math_func.hpp" #include "framerate_type.h" #include "settings_type.h" #include "safeguards.h" -#include "mixer.h" +#include "mixer.h" struct MixerChannel { bool active; @@ -39,6 +40,7 @@ static MixerChannel _channels[8]; static uint32 _play_rate = 11025; static uint32 _max_size = UINT_MAX; static MxStreamCallback _music_stream = nullptr; +static std::mutex _music_stream_mutex; /** * The theoretical maximum volume for a single sound sample. Multiple sound @@ -152,8 +154,11 @@ void MxMixSamples(void *buffer, uint samples) /* Clear the buffer */ memset(buffer, 0, sizeof(int16) * 2 * samples); - /* Fetch music if a sampled stream is available */ - if (_music_stream) _music_stream((int16*)buffer, samples); + { + std::lock_guard lock{ _music_stream_mutex }; + /* Fetch music if a sampled stream is available */ + if (_music_stream) _music_stream((int16*)buffer, samples); + } /* Apply simple x^3 scaling to master effect volume. This increases the * perceived difference in loudness to better match expectations. effect_vol @@ -227,22 +232,24 @@ void MxSetChannelVolume(MixerChannel *mc, uint volume, float pan) void MxActivateChannel(MixerChannel *mc) { mc->active = true; -} - -/** - * Set source of PCM music - * @param music_callback Function that will be called to fill sample buffers with music data. - * @return Sample rate of mixer, which the buffers supplied to the callback must be rendered at. - */ -uint32 MxSetMusicSource(MxStreamCallback music_callback) -{ - _music_stream = music_callback; - return _play_rate; +} + +/** + * Set source of PCM music + * @param music_callback Function that will be called to fill sample buffers with music data. + * @return Sample rate of mixer, which the buffers supplied to the callback must be rendered at. + */ +uint32 MxSetMusicSource(MxStreamCallback music_callback) +{ + std::lock_guard lock{ _music_stream_mutex }; + _music_stream = music_callback; + return _play_rate; } bool MxInitialize(uint rate) { + std::lock_guard lock{ _music_stream_mutex }; _play_rate = rate; _max_size = UINT_MAX / _play_rate; _music_stream = nullptr; /* rate may have changed, any music source is now invalid */ From 99d0d9be6bb52e03ad3d772046c69bd7040e41ef Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 21 Jul 2021 18:51:59 +0000 Subject: [PATCH 21/63] Update: Translations from eints english (us): 15 changes by 2TallTyler korean: 12 changes by telk5093 russian: 3 changes by Ln-Wolf portuguese: 12 changes by azulcosta polish: 98 changes by pAter-exe --- src/lang/english_US.txt | 15 ++++++ src/lang/korean.txt | 12 +++++ src/lang/polish.txt | 115 ++++++++++++++++++++++++++++++++++------ src/lang/portuguese.txt | 12 +++++ src/lang/russian.txt | 3 ++ 5 files changed, 140 insertions(+), 17 deletions(-) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 171f5ceb5c..58d3cab5a7 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1439,6 +1439,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Double click STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Single click (when focused) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Single click (immediately) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Use relay service: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :If creating a connection to the server fails, one can use a relay service to create a connection. "Never" disallows this, "ask" will ask first, "allow" will allow it without asking +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Never +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Ask +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Allow STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Right-click emulation: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Select the method to emulate right mouse-button clicks @@ -1792,6 +1797,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Cargo distribution STR_CONFIG_SETTING_AI :{ORANGE}Competitors STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computer players +STR_CONFIG_SETTING_NETWORK :{ORANGE}Network STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recommended) @@ -1999,6 +2005,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change t ############ Next lines match ServerGameType STR_NETWORK_SERVER_VISIBILITY_LOCAL :Local STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Public +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Invite only ############ End of leave-in-this-order # Network server list @@ -2033,6 +2040,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Server STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Server address: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Start date: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Current date: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Game Script: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Password protected! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER OFFLINE STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVER FULL @@ -2165,6 +2173,8 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cl STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Remote players can't connect STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Public +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Behind NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via relay ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick @@ -2178,6 +2188,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Are you STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Are you sure you want to delete company '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Are you sure you want to reset the password of company '{COMPANY}'? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Use relay? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Failed to establish a connection between you and the server.{}Would you like to relay this session via '{STRING}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}No +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Yes, this once +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Yes, don't ask again STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 3932893bbd..966114eba7 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1440,6 +1440,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :더블 클릭 STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :한 번 클릭 (커서가 활성화되어 있을 때) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :한 번 클릭 (즉시) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :중계 서비스 이용: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :서버 연결에 실패할 경우, 중계 서비스를 이용하여 연결을 시도할 수 있습니다. "사용 안 함"으로 설정하면 이 중계 서비스를 사용하지 않고, "물어보기"는 처음에 물어보고 사용하며, "이용"은 물어보지 않고 중계 서비스를 사용합니다. +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :사용 안 함 +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :물어보기 +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :사용 STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :오른쪽 클릭 매크로: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :오른쪽 마우스 버튼 클릭을 대신할 방법을 선택합니다. @@ -1793,6 +1798,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}산업 STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}화물 분배 STR_CONFIG_SETTING_AI :{ORANGE}경쟁자 STR_CONFIG_SETTING_AI_NPC :{ORANGE}컴퓨터 플레이어 +STR_CONFIG_SETTING_NETWORK :{ORANGE}네트워크 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(권장) @@ -2169,6 +2175,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}로컬 STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}다른 플레이어가 접속할 수 없게 됩니다 STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}공개 STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}공유기 우회 +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}중계 이용 ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :추방 @@ -2182,6 +2189,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}'{STRIN STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}'{COMPANY}' 회사를 정말로 삭제하시겠습니까? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}'{COMPANY}' 회사의 비밀번호를 정말로 초기화하시겠습니까? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}중계를 이용할까요? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}서버와 연결을 수립하는 데 실패했습니다.{} '{0:STRING}'{G 0 "을" "를"} 통해 연결을 중계하시겠습니까? +STR_NETWORK_ASK_RELAY_NO :{BLACK}아니요 +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}이번에만 사용 +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}항상 사용 STR_NETWORK_SERVER :서버 STR_NETWORK_CLIENT :접속자 diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 072c01e9d8..fb3c367f09 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -709,7 +709,7 @@ STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opcje STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Zapis gry, opuszczenie gry, wyjście STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Wyświetl mapę, dodatkowy podgląd lub listę napisów STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Wyświetl listę miast -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Wyświetl subsydia +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Wyświetl dotacje STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Wyświetl listę stacji firmy STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Wyświetl informacje finansowe firmy STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Wyświetl informacje ogólne firmy @@ -799,7 +799,7 @@ STR_TOWN_MENU_FOUND_TOWN :Załóż miasto ############ range ends here ############ range for subsidies menu starts -STR_SUBSIDIES_MENU_SUBSIDIES :Subsydia +STR_SUBSIDIES_MENU_SUBSIDIES :Dotacje ############ range ends here ############ range for graph menu starts @@ -1261,8 +1261,13 @@ STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} już akceptuje {STRING.b} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} już akceptuje {STRING.b} i {STRING.b} -STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsydiowanie wygasło:{}{}{STRING} z {STRING} do {STRING} nie będzie już dotowane -STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Koniec dotacji:{}{}Przewóz {STRING.d} z {STRING} do {STRING} nie jest już subsydiowany +STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Dotacja wygasła:{}{}{STRING} z {STRING} do {STRING} nie będzie już dotowane +STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Koniec dotacji:{}{}Przewóz {STRING.d} z {STRING} do {STRING} nie jest już dotowany +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Oferta usługi dotowanej:{}{}Pierwszy przewóz {STRING.d} z {STRING} do {STRING} będzie dotowany przez następn{P 3 y e ych} {NUM} {P rok lata lat} przez lokalne władze! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Przyznano dotację dla {STRING}!{}{}Przewóz {STRING.d} z {STRING} do {STRING} będzie opłacany o 50% więcej przez następn{P 4 y e ych} {NUM} {P rok lata lat}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Przyznano dotację dla {STRING}!{}{}Przewóz {STRING.d} z {STRING} do {STRING} będzie opłacany podwójnie przez następn{P 4 y e ych} {NUM} {P rok lata lat}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Przyznano dotację dla {STRING}!{}{}Przewóz {STRING.d} z {STRING} do {STRING} będzie opłacany potrójnie przez następn{P 4 y e ych} {NUM} {P rok lata lat}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Przyznano dotację dla {STRING}!{}{}Przewóz {STRING.d} z {STRING} do {STRING} będzie opłacany poczwórnie przez następn{P 4 y e ych} {NUM} {P rok lata lat}! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Chaos na drogach w {TOWN}!{}{}Program przebudowy dróg ufundowany przez {STRING} przynosi 6 miesięcy męki dla kierowców! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopol transportowy! @@ -1328,7 +1333,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit malezyj STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Jazda po lewej STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Jazda po prawej -STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Nazwy miast +STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Nazwy miast: STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Wybierz styl nazw miast ############ start of townname region @@ -1578,6 +1583,10 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Awarie pojazdó STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Kontroluj jak często nieodpowiednio serwisowane pojazdy mogą się psuć STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Mnożnik dofinansowania: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Ustaw wysokość zapłaty za połączenia dofinansowywane +STR_CONFIG_SETTING_SUBSIDY_DURATION :Czas trwania dotacji: {STRING} +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Określ liczbę lat, na które przyznawana jest dotacja +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} {P rok lata lat} +STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Brak dotacji STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Koszty konstrukcji: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Ustaw poziom kosztów konstrukcji i kupna STR_CONFIG_SETTING_RECESSIONS :Kryzys: {STRING} @@ -1810,6 +1819,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Podwójny klik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Pojedyncze kliknięcie (w przybliżeniu) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Pojedyncze kliknięcie (natychmiast) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Użyj usługi przekaźnika: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Jeśli nawiązanie połączenia z serwerem nie powiedzie się, można użyć usługi przekaźnika do nawiązania połączenia. „Nigdy" nie zezwoli na to, „pytaj” najpierw zapyta, „zezwól” pozwoli na to bez pytania +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nigdy +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Pytaj +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Zezwól STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulacja prawego przycisku myszy: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Wybierz metodę emulacji klikania prawym przyciskiem myszki @@ -1961,8 +1975,8 @@ STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nowe pojazdy: { STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Wyświetl wiadomość w gazecie o dostępnym nowym typie pojazdu STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Zmiany w akceptowaniu ładunku: {STRING} STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Wyświetlaj wiadomości o zmianach w akceptowaniu towarów przez stacje -STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsydia: {STRING} -STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Wyświetl wiadomość w gazecie o wydarzeniach związanych z subsydiami +STR_CONFIG_SETTING_NEWS_SUBSIDIES :Dotacje: {STRING} +STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Wyświetl wiadomość w gazecie o wydarzeniach związanych z dotacjami STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Ogólne informacje: {STRING} STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Wyświetl wiadomość w gazecie o wydarzeniach takich jak zakup ekskluzywnych praw lub fundowanie przebudowy dróg @@ -2163,6 +2177,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Przedsi STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Dystrybucja towarów STR_CONFIG_SETTING_AI :{ORANGE}Rywale STR_CONFIG_SETTING_AI_NPC :{ORANGE}Gracze komputerowi +STR_CONFIG_SETTING_NETWORK :{ORANGE}Sieć STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Zalecane) @@ -2252,7 +2267,7 @@ STR_QUIT_NO :{BLACK}Nie # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Wyjście STR_ABANDON_GAME_QUERY :{YELLOW}Czy jesteś pewien, że chcesz skończyć tę grę? -STR_ABANDON_SCENARIO_QUERY :{YELLOW}Czy jesteś pewny, że chcesz opuścić ten scenariusz? +STR_ABANDON_SCENARIO_QUERY :{YELLOW}Czy jesteś pewien, że chcesz opuścić ten scenariusz? # Cheat window STR_CHEATS :{WHITE}Oszustwa @@ -2281,8 +2296,8 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Pokaż s STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Pokaż schematy koloru pojazdów STR_LIVERY_SHIP_TOOLTIP :{BLACK}Pokaż schematy koloru statków STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Pokaż schematy koloru samolotów -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Wybierz główny kolor dla wybranego schematu. Ctrl + klik ustawi ten kolor dla wszystkich schematów -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Wybierz drugi kolor dla wybranego schematu. Ctrl + klik ustawi ten kolor dla wszystkich schematów +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Wybierz główny kolor dla wybranego schematu. Ctrl+klik ustawi ten kolor dla wszystkich schematów +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Wybierz drugi kolor dla wybranego schematu. Ctrl+klik ustawi ten kolor dla wszystkich schematów STR_LIVERY_PANEL_TOOLTIP :{BLACK}Wybierz schemat kolorów do zmiany, albo wiele schematów z CTRL+klik. Kliknij na okienku aby wł./wył. używanie schematu. STR_LIVERY_DEFAULT :Standardowy wygląd @@ -2368,6 +2383,9 @@ STR_FACE_EARRING :Kolczyk: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Zmień krawat lub kolczyk ############ Next lines match ServerGameType +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Lokalny +STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Publiczny +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Tylko na zaproszenie ############ End of leave-in-this-order # Network server list @@ -2390,7 +2408,7 @@ STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP :{BLACK}Ilość STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Język, wersja serwera, itp. STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Kliknij na grze z listy by ją wybrać -STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}Serwer z którym ostatnio się połączyłeś: +STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}Serwer, do którego ostatnio dołączyłeś: STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Kliknij, aby wybrać serwer na którym grałeś ostatnio STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}INFORMACJE O GRZE @@ -2402,6 +2420,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Wersja STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Adres serwera: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Data uruchomienia: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Aktualna data: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Game Script: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Chronione hasłem! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERWER WYŁĄCZONY STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERWER PEŁNY @@ -2422,6 +2441,7 @@ STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Uruchom STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Uruchom własny serwer STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Wprowadź swoje imię +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Wprowadź adres serwera lub kod zaproszenia # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Rozpocznij nową grę wieloosobową @@ -2431,6 +2451,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nazwa gr STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Ustaw hasło STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zabezpiecz grę hasłem jeśli nie chcesz, by była publicznie dostępna +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Widoczność +STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Czy inni ludzie mogą zobaczyć twój serwer na publicznej liście STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" ów ów} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Dopuszczalna liczba klientów: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Ustaw maksymalną liczbę klientów. Nie wszystkie pola muszą być wypełnione. @@ -2494,15 +2516,63 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serwer j STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma jest chroniona. Wprowadź hasło # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista klientów +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Połączeni gracze # Network client list +STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Gra wieloosobowa +STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Serwer +STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Nazwa +STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Nazwa serwera, na którym grasz +STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Edytuj nazwę swojego serwera +STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Nazwa serwera +STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Widoczność +STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Czy inni ludzie mogą zobaczyć twój serwer na publicznej liście +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Kod zaproszenia +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Kod zaproszenia, którego mogą użyć inni gracze, by dołączyć do tego serwera +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Typ połączenia +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Czy i jak twój serwer może być osiągalny dla innych +STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Gracz +STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nazwa +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Twoja nazwa gracza +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Edytuj swoją nazwę gracza +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Twoja nazwa gracza +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Działania administracyjne, które można wykonać dla tego klienta +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Działania administracyjne, które można wykonać dla tej firmy +STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Dołącz do tej firmy +STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Wyślij wiadomość do tego gracza +STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Wyślij wiadomość do wszystkich graczy tej firmy +STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Wyślij wiadomość do wszystkich obserwatorów +STR_NETWORK_CLIENT_LIST_SPECTATORS :Obserwatorzy +STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nowa firma) +STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Utwórz nową firmę i dołącz do niej +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}To jesteś ty +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}To jest gospodarz gry +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" ów ów} / {NUM} firm{P a y ""} ############ Begin of ConnectionType +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Lokalny +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Zdalni gracze nie mogą się łączyć +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Publiczny +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Za NAT-em +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Przez przekaźnik ############ End of ConnectionType +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Wyrzuć +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Zbanuj +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Usuń +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Wyczyść hasło +STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Działanie administratora +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Czy na pewno chcesz wyrzucić gracza „{STRING}”? +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Czy na pewno chcesz zbanować gracza „{STRING}”? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Czy na pewno chcesz usunąć firmę „{COMPANY}”? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Czy na pewno chcesz zresetować hasło firmy „{COMPANY}”? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Używać przekaźnika? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Nie udało się nawiązać połączenia między tobą a serwerem.{}Czy chcesz przekazać tę sesję za pośrednictwem „{STRING}”? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Nie +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Tak, ten jeden raz +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Tak, nie pytaj ponownie STR_NETWORK_SERVER :Serwer STR_NETWORK_CLIENT :Klient @@ -2547,6 +2617,8 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Nie moż STR_NETWORK_ERROR_CLIENT_START :{WHITE}Nie można połączyć STR_NETWORK_ERROR_TIMEOUT :{WHITE}Przekroczony limit czasu dla połączenia #{NUM} STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Błąd protokołu, połączenie zostało przerwane +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Twoja nazwa gracza nie została ustawiona. Nazwę można ustawić w górnej części okna Gra wieloosobowa +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Nazwa twojego serwera nie została ustawiona. Nazwę można ustawić w górnej części okna Gra wieloosobowa STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Wersja gry nie zgadza się z wersją gry na serwerze STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Złe hasło STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serwer jest pełny @@ -2559,6 +2631,8 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Zbyt dł STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Twój komputer jest zbyt wolny, by nadążyć za serwerem STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Twój komputer zbyt długo pobierał mapę STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Twój komputer zbyt długo łączył się z serwerem +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Twoja nazwa gracza jest nieprawidłowa +STR_NETWORK_ERROR_SERVER_TOO_OLD :{WHITE}Zapytany serwer jest zbyt stary dla tego klienta ############ Leave those lines in this order!! STR_NETWORK_ERROR_CLIENT_GENERAL :błąd ogólny @@ -2581,6 +2655,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :nie otrzymano h STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :przekroczono czas STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :pobieranie mapy trwało zbyt długo STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :przetwarzanie mapy trwało za długo +STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :nieprawidłowa nazwa klienta ############ End of leave-in-this-order STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Możliwa utrata połączenia @@ -2609,12 +2684,15 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} do STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} dołączył do obserwatorów STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} założył nową firmę (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} opuścił grę ({2:STRING}) -STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} zmienił/zmieniła swoje imię na {STRING} +STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} zmienił swoją nazwę na {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** Firma {STRING} przekazała firmie {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Serwer zamknął sesję STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Restart serwera...{}Proszę czekać... STR_NETWORK_MESSAGE_KICKED :*** {STRING} został wyrzucony. Powód: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Rejestracja serwera nie powiodła się +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Twój serwer nie pozwala na połączenia zdalne +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Inni gracze nie będą mogli połączyć się z twoim serwerem # Content downloading window STR_CONTENT_TITLE :{WHITE}Przeglądarka dodatkowej zawartości @@ -3421,6 +3499,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Ostrzeżen STR_NEWGRF_ERROR_MSG_ERROR :{RED}Błąd: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Błąd krytyczny: {SILVER}{STRING} STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Wystąpił błąd krytyczny NewGRF:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}Wystąpił błąd NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nie zadziała z wersją TTDPatcha zgłoszoną przez OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} jest przeznaczony dla TTD wersji {STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} jest zaprojektowany do użycia z {STRING} @@ -3610,11 +3689,11 @@ STR_GOAL_QUESTION_BUTTON_CLOSE :Zamknij ############ End of Goal Question button list # Subsidies window -STR_SUBSIDIES_CAPTION :{WHITE}Subsydia -STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Oferta subsydiów dla usługi przewozu: +STR_SUBSIDIES_CAPTION :{WHITE}Dotacje +STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Oferta dotacji dla usługi przewozu: STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} z {STRING} do {STRING}{YELLOW} (do {DATE_SHORT}) STR_SUBSIDIES_NONE :{ORANGE}- Żadne - -STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Usługi już subsydiowane: +STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Usługi już dotowane: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} z {STRING} do {STRING}{YELLOW} ({COMPANY}{YELLOW}, do {DATE_SHORT}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik na usłudze żeby wyśrodkować widok na fabrykę/miasto. Ctrl+klik otwiera nowy podgląd na pozycji fabryki/miasta @@ -3898,7 +3977,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Kliknij STR_GROUP_DELETE_TOOLTIP :{BLACK}Usuń zaznaczoną grupę STR_GROUP_RENAME_TOOLTIP :{BLACK}Zmień nazwę zaznaczonej grupy STR_GROUP_LIVERY_TOOLTIP :{BLACK}Zmień kolor zaznaczonej grupy -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Kliknij, aby ochronić tę grupę przed globalną zamianą pojazdów +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Kliknij, aby chronić tę grupę przed globalną zamianą pojazdów. Ctrl+klik, aby chronić również podgrupy STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Skasuj grupę STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Jesteś pewien, że chcesz skasować tę grupę i wszystkich jej członków? @@ -4157,7 +4236,9 @@ STR_REPLACE_MAGLEV_VEHICLES :Kolej Maglev STR_REPLACE_ROAD_VEHICLES :Pojazdy drogowe STR_REPLACE_TRAM_VEHICLES :Tramwaje +STR_REPLACE_REMOVE_WAGON :{BLACK}Usunięcie wagonów: ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Autowymiana zachowuje długość pociągu poprzez usuwanie wagonów (począwszy od początku), jeśli wymiana lokomotywy spowoduje wydłużenie pociągu +STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+klik, aby zastosować również do podgrup # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 3dbf66002c..77f31a1a2d 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1440,6 +1440,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Duplo clique STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clique simples (quando em foco) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clique (imediatamente) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Usar serviço de retransmissão: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Se a criação da ligação com o servidor falhar, pode usar um serviço de retransmissão para criar uma conexão. "Nunca" desautoriza isso; "perguntar" perguntará primeiro e "permitir" permitirá sem perguntar +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nunca +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Perguntar +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Permitir STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulação de clique de botão direito: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecione o método de emulação dos cliques do botão direito do rato @@ -1793,6 +1798,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribuição de Carga STR_CONFIG_SETTING_AI :{ORANGE}Oponentes STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jogadores Computador +STR_CONFIG_SETTING_NETWORK :{ORANGE}Rede STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recomendado) @@ -2169,6 +2175,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Jogadores remotos não conseguem conetar STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Público STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Atrás de NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via retransmissão ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar @@ -2182,6 +2189,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Tem a c STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Tem a certeza que quer apagar a empresa '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Tem a certeza que quer restabelecer a palavra-chave da empresa '{COMPANY}'? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Usar retransmissão? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Falha ao estabelecer a ligação entre si e o servidor.{}Deseja retransmitir esta sessão via '{STRING}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Não +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sim, desta vez +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Sim, não perguntar novamente STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 64a4abe5a2..0bf4e9a75e 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2332,6 +2332,9 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Заб STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Удалить компанию «{COMPANY}»? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Сбросить пароль у компании «{COMPANY}»? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Нет +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Да, однократно +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Да, всегда STR_NETWORK_SERVER :Сервер STR_NETWORK_CLIENT :Клиент From 9cc706847cc92e8408426c78c3bee575c3323d15 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 21 Jul 2021 21:55:30 +0200 Subject: [PATCH 22/63] Fix: crash when joining a server again after a TCP disconnect (#9453) "my_client" wasn't always free'd when a game ended. "my_client" keeps a reference inside the PT_NCLIENT pool. The rest of the code assumes that when you are not in a game, it can freely reset this pool. In result: several ways to trigger a use-after-free. --- src/network/core/tcp_game.cpp | 2 +- src/network/network_client.cpp | 27 +++++++++++---------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/network/core/tcp_game.cpp b/src/network/core/tcp_game.cpp index 84fb164dee..7a1d183495 100644 --- a/src/network/core/tcp_game.cpp +++ b/src/network/core/tcp_game.cpp @@ -48,7 +48,7 @@ NetworkRecvStatus NetworkGameSocketHandler::CloseConnection(bool error) _networking = false; ShowErrorMessage(STR_NETWORK_ERROR_LOSTCONNECTION, INVALID_STRING_ID, WL_CRITICAL); - return NETWORK_RECV_STATUS_CLIENT_QUIT; + return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT); } return this->CloseConnection(NETWORK_RECV_STATUS_CONNECTION_LOST); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index d38437cc14..db8992f3b8 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -160,24 +160,19 @@ ClientNetworkGameSocketHandler::~ClientNetworkGameSocketHandler() NetworkRecvStatus ClientNetworkGameSocketHandler::CloseConnection(NetworkRecvStatus status) { assert(status != NETWORK_RECV_STATUS_OKAY); - /* - * Sending a message just before leaving the game calls cs->SendPackets. - * This might invoke this function, which means that when we close the - * connection after cs->SendPackets we will close an already closed - * connection. This handles that case gracefully without having to make - * that code any more complex or more aware of the validity of the socket. - */ - if (this->sock == INVALID_SOCKET) return status; + assert(this->sock != INVALID_SOCKET); - Debug(net, 3, "Closed client connection {}", this->client_id); + if (!this->HasClientQuit()) { + Debug(net, 3, "Closed client connection {}", this->client_id); - this->SendPackets(true); + this->SendPackets(true); - /* Wait a number of ticks so our leave message can reach the server. - * This is especially needed for Windows servers as they seem to get - * the "socket is closed" message before receiving our leave message, - * which would trigger the server to close the connection as well. */ - CSleep(3 * MILLISECONDS_PER_TICK); + /* Wait a number of ticks so our leave message can reach the server. + * This is especially needed for Windows servers as they seem to get + * the "socket is closed" message before receiving our leave message, + * which would trigger the server to close the connection as well. */ + CSleep(3 * MILLISECONDS_PER_TICK); + } delete this; @@ -256,7 +251,7 @@ void ClientNetworkGameSocketHandler::ClientError(NetworkRecvStatus res) /* static */ void ClientNetworkGameSocketHandler::Send() { my_client->SendPackets(); - my_client->CheckConnection(); + if (my_client != nullptr) my_client->CheckConnection(); } /** From ba29edb0b3477f986bbefbf02d7bc619bac182f9 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Wed, 21 Jul 2021 21:41:21 +0200 Subject: [PATCH 23/63] Cleanup: remove some references to the old master-server --- src/network/core/config.h | 10 ---------- src/network/core/game_info.cpp | 2 +- src/network/network.cpp | 2 -- src/network/network_gui.cpp | 2 +- 4 files changed, 2 insertions(+), 14 deletions(-) diff --git a/src/network/core/config.h b/src/network/core/config.h index 10ec070f06..0a6eaa4f75 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -94,14 +94,4 @@ static const uint NETWORK_GRF_NAME_LENGTH = 80; ///< Maxim */ static const uint NETWORK_MAX_GRF_COUNT = 255; -/** - * The number of landscapes in OpenTTD. - * This number must be equal to NUM_LANDSCAPE, but as this number is used - * within the network code and that the network code is shared with the - * masterserver/updater, it has to be declared in here too. In network.cpp - * there is a compile assertion to check that this NUM_LANDSCAPE is equal - * to NETWORK_NUM_LANDSCAPES. - */ -static const uint NETWORK_NUM_LANDSCAPES = 4; - #endif /* NETWORK_CORE_CONFIG_H */ diff --git a/src/network/core/game_info.cpp b/src/network/core/game_info.cpp index 85d66807b8..ebc78fffcb 100644 --- a/src/network/core/game_info.cpp +++ b/src/network/core/game_info.cpp @@ -352,7 +352,7 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info, const GameInfo info->landscape = p->Recv_uint8 (); info->dedicated = p->Recv_bool (); - if (info->landscape >= NETWORK_NUM_LANDSCAPES) info->landscape = 0; + if (info->landscape >= NUM_LANDSCAPE) info->landscape = 0; } } diff --git a/src/network/network.cpp b/src/network/network.cpp index e9ef6300a4..3bce6d4d5d 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -78,8 +78,6 @@ uint32 _sync_frame; ///< The frame to perform the sync check. bool _network_first_time; ///< Whether we have finished joining or not. CompanyMask _network_company_passworded; ///< Bitmask of the password status of all companies. -/* Check whether NETWORK_NUM_LANDSCAPES is still in sync with NUM_LANDSCAPE */ -static_assert((int)NETWORK_NUM_LANDSCAPES == (int)NUM_LANDSCAPE); static_assert((int)NETWORK_COMPANY_NAME_LENGTH == MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH); /** The amount of clients connected */ diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index a535962b53..13c1faa0a9 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -483,7 +483,7 @@ public: this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR; this->SetFocusedWidget(WID_NG_FILTER); - /* As the master-server doesn't support "websocket" servers yet, we + /* As the Game Coordinator doesn't support "websocket" servers yet, we * let "os/emscripten/pre.js" hardcode a list of servers people can * join. This means the serverlist is curated for now, but it is the * best we can offer. */ From 72737a91f35539ddb3532a6394003feaf77e3f49 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 22 Jul 2021 18:53:58 +0000 Subject: [PATCH 24/63] Update: Translations from eints spanish (mexican): 13 changes by absay --- src/lang/spanish_MX.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index c6e6062b7c..2ae1eb9bc6 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1440,6 +1440,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Doble clic STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Un solo clic (al enfocar) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Un solo clic (instantáneo) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Utilizar servicio de retransmisión: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Si no se puede establecer una conexión con el servidor, se puede usar un servicio de retransmisión (relay). "Nunca" deshabilita esta opción, "Preguntar" pide una confirmación, "Permitir" habilita la opción sin preguntar. +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nunca +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Preguntar +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Permitir STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulación del botón derecho: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Método para emular los clic con el botón derecho del ratón @@ -1793,6 +1798,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribución de carga STR_CONFIG_SETTING_AI :{ORANGE}Competidores STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jugadores no humanos +STR_CONFIG_SETTING_NETWORK :{ORANGE}Red STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(recomendado) @@ -2168,6 +2174,8 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cl STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Los jugadores remotos no pueden conectarse STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Pública +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Detrás de NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Retransmisión (relay) ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar @@ -2181,6 +2189,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}¿Bloqu STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}¿Eliminar la empresa "{COMPANY}"? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}¿Restablecer contraseña de la empresa "{COMPANY}"? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}¿Utilizar servicio de retransmisión? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}No se pudo establecer una conexión con el servidor.{}¿Deseas retransmitir esta sesión a través de "{STRING}"? +STR_NETWORK_ASK_RELAY_NO :{BLACK}No +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sí, solo esta vez +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Sí, no volver a preguntar STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente From 333de9f15d0c970edf5350131c4b858c427e3098 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 23 Jul 2021 18:52:46 +0000 Subject: [PATCH 25/63] Update: Translations from eints russian: 9 changes by Ln-Wolf catalan: 25 changes by J0anJosep --- src/lang/catalan.txt | 26 +++++++++++++++++++++++++- src/lang/russian.txt | 9 +++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index c9efbcbc50..efe1f75384 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1440,6 +1440,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Doble clic STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Un clic (quan té el focus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Un clic (immediatament) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Servei de transmissió: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Si falla la creació d'una connexió al servidor, es pot usar un servei de transmissió per crear la connexió. «Mai» no permet fer-ho, «Pregunta» permet que l'usuari esculli què fer i «Permet» en permet l'ús sense preguntar-ho. +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Mai +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Pregunta +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Permet STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulació del botó dret: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecciona el mètode per emular els clics amb el botó dret del ratolí @@ -1793,6 +1798,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Indúst STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribució de la càrrega STR_CONFIG_SETTING_AI :{ORANGE}Competidors STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jugadors IA +STR_CONFIG_SETTING_NETWORK :{ORANGE}Xarxa STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recomanat) @@ -1998,6 +2004,7 @@ STR_FACE_EARRING :Arracades: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Canvia la corbata o les arracades ############ Next lines match ServerGameType +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Local STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Pública STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Només invitació ############ End of leave-in-this-order @@ -2050,11 +2057,12 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Cerca se STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Cerca a la LAN STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Cerca servidors a la xarxa local STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Afegeix un servidor -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Afegeix un servidor a la llista que sempre es comprovarà per buscar partides en marxa +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Afegeix un servidor a la llista. Es pot afegir l'adreça del servidor o un codi d'invitació. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Inicia el servidor STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Inicia en un servidor propi STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Posa el teu nom +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Escriviu l'adreça del servidor o el codi d'invitació. # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Inicia una partida multijugador nova @@ -2140,6 +2148,10 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Editeu e STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Nom del servidor STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibilitat STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Permet establir si altres persones poden veure el vostre servidor a la llista pública. +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Codi d'invitació +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Codi d'invitació que els altres jugadors poden usar per unir-se a aquest servidor. +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Tipus de connexió +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Indica com els altres usuaris poden comunicar-se amb el vostre servidor. STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Jugador STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nom STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}El vostre nom de jugador @@ -2159,6 +2171,11 @@ STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Aquest STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} client{P "" s} / {NUM} companyi{P a es} ############ Begin of ConnectionType +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Els jugadors remots no es poden connectar. +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Públic +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Darrere del NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via servei de transmissió ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Treu @@ -2172,6 +2189,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Esteu s STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Esteu segur que voleu esborrar la companyia «{COMPANY}»? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Esteu segur que voleu restablir la contrasenya de la companyia «{COMPANY}»? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Voleu usar un servei de transmissió? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}No s'ha pogut establir una connexió entre el servidor i el vostre dispositiu.{}Voleu transmetre aquesta sessió via «{STRING}»? +STR_NETWORK_ASK_RELAY_NO :{BLACK}No +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sí, aquest una vegada. +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Sí, no ho preguntis més. STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Client @@ -2290,6 +2312,8 @@ STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}El servi STR_NETWORK_MESSAGE_KICKED :*** S'ha expulsat {STRING}. Motiu: {STRING} STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}El registre al servidor ha fallat. +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}El vostre servidor no permet connexions remotes. +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Els altres jugadors no podran connectar-se al vostre servidor. # Content downloading window STR_CONTENT_TITLE :{WHITE}Descàrregues de contingut diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 0bf4e9a75e..41512b1854 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1590,6 +1590,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :двойной STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :одиночный щелчок (когда фокус в поле ввода) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :одиночный щелчок (немедленно) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Использовать транслятор: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Если подключиться к игровому серверу напрямую не удаётся, клиент может установить соединение через сервер-транслятор. Использование транслятора можно разрешить, запретить без запроса, или спрашивать каждый раз при подключении. +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :нет +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :спрашивать +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :да STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Эмуляция нажатия правой кнопки мыши: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Выбор способа эмуляции нажатия правой кнопки мыши @@ -1943,6 +1948,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Пре STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Распределение грузов STR_CONFIG_SETTING_AI :{ORANGE}Конкуренты STR_CONFIG_SETTING_AI_NPC :{ORANGE}Искусственный интеллект +STR_CONFIG_SETTING_NETWORK :{ORANGE}Сеть STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Рекомендуется) @@ -2319,6 +2325,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Лока STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Другие игроки не могут подключиться STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Публичное STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Сервер за NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Через транслятор ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Отключить @@ -2332,6 +2339,8 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Заб STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Удалить компанию «{COMPANY}»? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Сбросить пароль у компании «{COMPANY}»? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Использовать транслятор? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Не удалось установить соединение с сервером.{}Перенаправить соединение через «{STRING}»? STR_NETWORK_ASK_RELAY_NO :{BLACK}Нет STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Да, однократно STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Да, всегда From cab212258fb0a752c20e66e60c52283bf4a54fc1 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 24 Jul 2021 18:52:09 +0000 Subject: [PATCH 26/63] Update: Translations from eints swedish: 9 changes by joeax910 russian: 1 change by Ln-Wolf --- src/lang/russian.txt | 2 +- src/lang/swedish.txt | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 41512b1854..25b8193175 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1591,7 +1591,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :одиночн STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :одиночный щелчок (немедленно) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Использовать транслятор: {STRING} -STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Если подключиться к игровому серверу напрямую не удаётся, клиент может установить соединение через сервер-транслятор. Использование транслятора можно разрешить, запретить без запроса, или спрашивать каждый раз при подключении. +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Если подключиться к игровому серверу напрямую не удаётся, клиент может установить соединение через сервер-транслятор. Использование транслятора можно разрешить без запроса, запретить, или спрашивать каждый раз при подключении. STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :нет STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :спрашивать STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :да diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 788def89e7..aebfa84929 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1439,6 +1439,9 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dubbelklick STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkelklick (om redan fokuserad) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkelklick (omedelbart) +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Aldrig +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Fråga +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Tillåt STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Högerklicksemulering: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Välj metod för att emulera klick med musens högra knapp @@ -1792,6 +1795,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Godsdistribution STR_CONFIG_SETTING_AI :{ORANGE}Motståndare STR_CONFIG_SETTING_AI_NPC :{ORANGE}Datorspelare +STR_CONFIG_SETTING_NETWORK :{ORANGE}Nätverk STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Rekommenderad) @@ -2167,6 +2171,7 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} kl STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Lokal STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Fjärran belägna spelare kan inte ansluta STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Offentlig +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via relä ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kasta ut @@ -2180,6 +2185,10 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Är du STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Är du säker på att du vill ta bort företaget {COMPANY}? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Är du säker på att du vill återställa företaget {COMPANY}s lösenord? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Använd relä? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Nej +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ja, den här gången +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ja, fråga inte igen STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient From 7409e6fea143a4c5f46ea017a97fece0f5fcefb9 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 25 Jul 2021 18:50:47 +0000 Subject: [PATCH 27/63] Update: Translations from eints romanian: 17 changes by ALEX11BR --- src/lang/romanian.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 60a1a4133a..c5e8d5ac73 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -93,7 +93,9 @@ STR_CARGO_SINGULAR_FIZZY_DRINK :Suc acidulat # Quantity of cargo STR_QUANTITY_NOTHING : +STR_QUANTITY_PASSENGERS :{COMMA}{NBSP}{P călător călători "de călătorii"} STR_QUANTITY_COAL :{WEIGHT_LONG} de cărbune +STR_QUANTITY_MAIL :{COMMA}{NBSP}{P sac saci "de saci"} cu colete poștale STR_QUANTITY_OIL :{VOLUME_LONG} de petrol STR_QUANTITY_GRAIN :{WEIGHT_LONG} de cereale STR_QUANTITY_WOOD :{WEIGHT_LONG} de lemne @@ -102,16 +104,23 @@ STR_QUANTITY_STEEL :{WEIGHT_LONG} d STR_QUANTITY_COPPER_ORE :{WEIGHT_LONG} de minereu de cupru STR_QUANTITY_MAIZE :{WEIGHT_LONG} de porumb STR_QUANTITY_FRUIT :{WEIGHT_LONG} de fructe +STR_QUANTITY_DIAMONDS :{COMMA} {P sac saci "de saci"} cu diamante STR_QUANTITY_FOOD :{WEIGHT_LONG} de alimente STR_QUANTITY_PAPER :{WEIGHT_LONG} de hârtie +STR_QUANTITY_GOLD :{COMMA}{NBSP}{P sac saci "de saci"} cu aur STR_QUANTITY_WATER :{VOLUME_LONG} de apă STR_QUANTITY_WHEAT :{WEIGHT_LONG} de grâu STR_QUANTITY_RUBBER :{VOLUME_LONG} de cauciuc STR_QUANTITY_SUGAR :{WEIGHT_LONG} de zahăr +STR_QUANTITY_TOYS :{COMMA}{NBSP}{P sac saci "de saci"} cu jucării +STR_QUANTITY_SWEETS :{COMMA}{NBSP}{P sac saci "de saci"} cu bomboane STR_QUANTITY_COLA :{VOLUME_LONG} de cola STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de vată de zahăr +STR_QUANTITY_BUBBLES :{COMMA} {P balonaș balonașe "de balonașe"} STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de caramel +STR_QUANTITY_BATTERIES :{COMMA} {P baterie baterii "de baterii"} STR_QUANTITY_PLASTIC :{VOLUME_LONG} de plastic +STR_QUANTITY_FIZZY_DRINKS :{COMMA} {P bidon bidoane "de bidoane"} cu suc STR_QUANTITY_N_A :N/A # Two letter abbreviation of cargo name @@ -151,6 +160,7 @@ STR_ABBREV_NONE :{TINY_FONT}NU STR_ABBREV_ALL :{TINY_FONT}TOT # 'Mode' of transport for cargoes +STR_PASSENGERS :{COMMA}{NBSP}{P călător călători "de călători"} STR_BAGS :{COMMA}{NBSP}sac{P "" "" "de "}sac{P "" i i} STR_TONS :{COMMA} tone STR_LITERS :{COMMA} litri @@ -1018,6 +1028,7 @@ STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informa STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Setul de muzică de bază STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selectaţi setul de muzică de bază +STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} {P fișier fișiere "de fișiere"} corupt{P "" e e} STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul de muzică de bază STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Nu s-a putut obține lista de rezoluții suportate @@ -1398,6 +1409,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Click dublu STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Un singur click (când este în focus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Un singur click (instant) +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Permite STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulare click-dreapta: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Alege metoda de emulare a click-urilor provenite de la butonul din dreapta al mouse-ului @@ -1640,6 +1652,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normal STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :x2 STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :x4 STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :x8 +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_TOWN_GROWTH :Viteza de dezvoltare a oraşului: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Viteza creşterii oraşelor @@ -2057,6 +2070,7 @@ STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Î STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Preluare informaţii joc... STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Preluare informaţii companie... ############ End of leave-in-this-order +STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} {P client clienți "de clienți"} înaintea ta STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES} descărcat până acum STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} descărcaţi până acum @@ -2085,7 +2099,9 @@ STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Deblocare cu pa STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Sigur vrei să dai afară jucătorul '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Sigur vrei să blochezi jucătorul '{STRING}'? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Sigur dorești ștergerea companiei '{COMPANY}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Nu STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client @@ -3447,6 +3463,7 @@ STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Tramvaie noi ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Vehicule pe şine +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Autovehicule noi STR_BUY_VEHICLE_SHIP_CAPTION :Nave noi STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Aeronavă nouă ############ range for vehicle availability ends From d17e4f7d290c3757ae23c239d01dcec02d967083 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 26 Jul 2021 18:51:36 +0000 Subject: [PATCH 28/63] Update: Translations from eints german: 4 changes by danidoedel romanian: 23 changes by ALEX11BR portuguese (brazilian): 6 changes by jpsl00 --- src/lang/brazilian_portuguese.txt | 6 ++++++ src/lang/german.txt | 4 ++++ src/lang/romanian.txt | 25 +++++++++++++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 13055315b7..b7d49b0f2f 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1440,6 +1440,9 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Clique duplo STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clique simples (quando em foco) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clique simples (imediatamente) +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nunca +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Perguntar +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Permitir STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Emulação do clique direito: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Seleciona o método para emular cliques com o botão direito @@ -1793,6 +1796,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Indúst STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribuição de Carga STR_CONFIG_SETTING_AI :{ORANGE}Oponentes STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computadores +STR_CONFIG_SETTING_NETWORK :{ORANGE}Rede STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recomendado) @@ -2182,6 +2186,8 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Você t STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Você tem certeza que quer excluir a empresa '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Você tem certeza que quer restaurar a senha da empresa '{COMPANY}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Não +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sim, apenas dessa vez STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente diff --git a/src/lang/german.txt b/src/lang/german.txt index d2df131177..18940ebf21 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1440,6 +1440,9 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Doppelklick STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Ein Klick (wenn hervorgehoben) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Ein Klick (sofort) +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nie +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Fragen +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Erlauben STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Rechtsklick-Emulation: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Lege die Methode, die rechte Maustaste zu emulieren, fest @@ -1793,6 +1796,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Warenverteilung STR_CONFIG_SETTING_AI :{ORANGE}Mitbewerber STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computerspieler +STR_CONFIG_SETTING_NETWORK :{ORANGE}Netzwerk STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(empfohlen) diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index c5e8d5ac73..b4866661a4 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -97,10 +97,13 @@ STR_QUANTITY_PASSENGERS :{COMMA}{NBSP}{P STR_QUANTITY_COAL :{WEIGHT_LONG} de cărbune STR_QUANTITY_MAIL :{COMMA}{NBSP}{P sac saci "de saci"} cu colete poștale STR_QUANTITY_OIL :{VOLUME_LONG} de petrol +STR_QUANTITY_LIVESTOCK :{COMMA}{NBSP}{P animal animale "de animale"} +STR_QUANTITY_GOODS :{COMMA}{NBSP}{P pachet pachete "de pachete"} de bunuri STR_QUANTITY_GRAIN :{WEIGHT_LONG} de cereale STR_QUANTITY_WOOD :{WEIGHT_LONG} de lemne STR_QUANTITY_IRON_ORE :{WEIGHT_LONG} de minereu de fier STR_QUANTITY_STEEL :{WEIGHT_LONG} de oțel +STR_QUANTITY_VALUABLES :{COMMA}{NBSP}{P sac saci "de saci"} de valori STR_QUANTITY_COPPER_ORE :{WEIGHT_LONG} de minereu de cupru STR_QUANTITY_MAIZE :{WEIGHT_LONG} de porumb STR_QUANTITY_FRUIT :{WEIGHT_LONG} de fructe @@ -201,12 +204,16 @@ STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}t STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}t STR_UNITS_WEIGHT_SHORT_SI :{COMMA}kg +STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA}{NBSP}{P tonă tone "de tone"} +STR_UNITS_WEIGHT_LONG_METRIC :{COMMA}{NBSP}{P tonă tone "de tone"} STR_UNITS_WEIGHT_LONG_SI :{COMMA} kg STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}gal STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}l STR_UNITS_VOLUME_SHORT_SI :{COMMA}m³ +STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA}{NBSP}{P galon galoane "de galoane"} +STR_UNITS_VOLUME_LONG_METRIC :{COMMA}{NBSP}{P litru litri "de litri"} STR_UNITS_VOLUME_LONG_SI :{COMMA} m³ STR_UNITS_FORCE_IMPERIAL :{COMMA} lbf @@ -2093,6 +2100,7 @@ STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Trimite STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Trimite un mesaj tuturor spectatorilor ############ Begin of ConnectionType +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Public ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Deblocare cu parolă @@ -2583,6 +2591,7 @@ STR_FUND_INDUSTRY_CAPTION :{WHITE}Construi STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Alege industria potrivită din acestă listă STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Creează multe industrii aleatoare STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Umple harta cu industrii generate aleator +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Creează multe industrii aleatoare STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Cost: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospectează STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Construieşte @@ -3077,6 +3086,8 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} livrate STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (mai sunt necesare) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (livrate) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Orașul crește la fiecare {ORANGE}{COMMA}{BLACK}{NBSP}{P zi zile "de zile"} +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Orașul crește la fiecare {ORANGE}{COMMA}{BLACK}{NBSP}{P zi zile "de zile"} (cu fonduri) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Orașul {RED}nu{BLACK} crește STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limita zgomotului în oraş: {ORANGE}{COMMA}{BLACK} maxim: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrează imaginea pe locaţia oraşului. Ctrl+Click deshide o fereastra cu locaţia oraşului @@ -3183,6 +3194,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referinţ # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}Numele staţiilor - clic pe un nume pentru a centra imaginea pe staţia respectivă. Ctrl+Click deshide o fereastra cu locaţia staţiei STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ţine apăsat Ctrl pentru a alege mai multe obiecte +STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} {P stație stații "de stații"} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Nici una - @@ -3390,9 +3402,12 @@ STR_CONFIG_GAME_PRODUCTION :{WHITE}Schimba STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Modifică nivelul producţiei (procent, până la 800%) # Vehicle lists -STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronave +STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} {P tren trenuri "de trenuri"} +STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} {P autovehicul autovehicule "de autovehicule"} +STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} {P navă nave "de nave"} +STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} {P aeronavă aeronave "de aeronave"} -STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trenuri - click pe un trn pentru detalii +STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trenuri - click pe tren pentru informații STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Autovehicule - clic pe vehicul pentru informatii STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Nave - click pe navă pentru informaţii STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronavă - clic pe aeronavă pentru informaţii @@ -3418,6 +3433,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Trimite la hang STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Click pt oprirea tuturor vehiculelor din listă STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Apasa pentru pornirea tuturor vehiclulelor din lista +STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Comenzi sincronizate pentru {COMMA} {P vehicul vehicule "de vehicule"} # Group window STR_GROUP_ALL_TRAINS :Toate trenurile @@ -3681,6 +3697,7 @@ STR_REPLACE_MAGLEV_VEHICLES :Vehicule Pernă STR_REPLACE_ROAD_VEHICLES :Autovehicule STR_REPLACE_TRAM_VEHICLES :Tramvaie +STR_REPLACE_REMOVE_WAGON :{BLACK}Retragere vagoane ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Fă optiunea de autoînlocuire să păstreze identică lungimea unui tren prin eliminarea vagoanelor (începând din faţă) dacă înlocuirea locomotivei ar face trenul mai lung # Vehicle view @@ -3758,6 +3775,8 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Denumeş STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Vechime: {LTBLUE}{STRING}{BLACK} Mentenanţă: {LTBLUE}{CURRENCY_LONG}/an # The next two need to stay in this order +STR_VEHICLE_INFO_AGE :{COMMA} {P an ani "de ani"} ({COMMA}) +STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} {P an ani "de ani"} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Viteză max.: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Viteză max.: {LTBLUE}{VELOCITY} {BLACK}Tip de aeronavă: {LTBLUE}{STRING} @@ -4012,6 +4031,8 @@ STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Călătoriți ( STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(călătorie pentru {STRING}, neprogramată) STR_TIMETABLE_STAY_FOR :şi opreşte pentru {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :şi călătoreşte pentru {STRING} +STR_TIMETABLE_DAYS :{COMMA}{NBSP}{P zi zile "de zile"} +STR_TIMETABLE_TICKS :{COMMA}{NBSP}{P unitate unități "de unități"} de timp intern{P ă e e} STR_TIMETABLE_TOTAL_TIME :{BLACK}Acest orar va lua {STRING} pentru finalizare STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Acest orar va lua cel putin {STRING} pentru finalizare (nu in intregime programat) From 476c039332a2193c18cf3acb753e58d8bc469cd0 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 27 Jul 2021 18:51:08 +0000 Subject: [PATCH 29/63] Update: Translations from eints german: 10 changes by Wuzzy2 --- src/lang/german.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/lang/german.txt b/src/lang/german.txt index 18940ebf21..340aa8e6da 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1440,6 +1440,8 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Doppelklick STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Ein Klick (wenn hervorgehoben) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Ein Klick (sofort) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Weiterleitungsdienst benutzen: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Falls eine Verbindung mit dem Server fehlschlägt, kann man einen Weiterleitungsdienst benutzen, um eine Verbindung herzustellen. „Nie“ verbietet dies, „fragen“ wird zuerst fragen, „erlauben“ wird es ohne Nachfrage erlauben. STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nie STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Fragen STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Erlauben @@ -2004,6 +2006,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Krawatte ############ Next lines match ServerGameType STR_NETWORK_SERVER_VISIBILITY_LOCAL :Lokal STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Öffentlich +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Nur Einladung ############ End of leave-in-this-order # Network server list @@ -2038,6 +2041,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Serverv STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Serveradresse: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Startdatum: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Aktuelles Datum: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Spielskript: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Passwortgeschützt! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER OFFLINE STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVER VOLL @@ -2171,6 +2175,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Lokal STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Nicht-lokale Spieler können sich nicht verbinden STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Öffentlich STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Hinter NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via Umleitung ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Hinauswerfen @@ -2184,6 +2189,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Sind Si STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Sind Sie sicher, dass Sie die Firma '{COMPANY}' löschen möchten? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Sind Sie sicher, dass Sie das Passwort der Firma '{COMPANY}' zurücksetzen möchten? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Weiterleitung benutzen? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Verbindung zwischen Ihnen und dem Server konnte nicht hergestellt werden.{}Möchten Sie für diese Sitzung eine Weiterleitung via „{STRING}” benutzen? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Nein +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ja, diesmal +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ja, nicht erneut fragen STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Teilnehmer From dea999566d3765d60824e565dab86fb9ab238e63 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 28 Jul 2021 18:52:35 +0000 Subject: [PATCH 30/63] Update: Translations from eints finnish: 14 changes by hpiirai --- src/lang/finnish.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 5b2e8b6946..1c41a7035c 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1439,6 +1439,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Kaksoisnapsautu STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Yksi napsautus (kun kohdistettuna) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Yksi napsautus (välitön) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Käytä välityspalvelua: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Jos yhteyden muodostaminen palvelimeen epäonnistuu, yhteys voidaan muodostaa välityspalvelun kautta. ”Ei koskaan” estää tämän, ”kysy” kysyy ensin, ”salli” sallii kysymättä. +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Ei koskaan +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Kysy +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Salli STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Oikean painikkeen emulointi: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Valitse, miten hiiren oikean painikkeen painalluksia emuloidaan @@ -1792,6 +1797,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Laitoks STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Rahdin jakautuminen STR_CONFIG_SETTING_AI :{ORANGE}Kilpailijat STR_CONFIG_SETTING_AI_NPC :{ORANGE}Tietokonepelaajat +STR_CONFIG_SETTING_NETWORK :{ORANGE}Verkko STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Suositeltu) @@ -2034,6 +2040,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Palveli STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Palvelimen osoite: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Aloitusvuosi: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Päivämäärä: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Peliskripti: {WHITE}{STRING} (v.{NBSP}{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Salasanasuojattu! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}PALVELIN KIINNI STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}PALVELIN TÄYNNÄ @@ -2166,6 +2173,8 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} pe STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Paikallinen STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Etäpelaajat eivät voi ottaa yhteyttä STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Julkinen +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}NATin takana +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Välityspalvelimen kautta ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Potki @@ -2179,6 +2188,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Haluatk STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Haluatko varmasti poistaa yhtiön ”{COMPANY}”? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Haluatko varmasti nollata yhtiön ”{COMPANY}” salasanan? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Käytetäänkö välityspalvelua? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Yhteyden muodostaminen sinun ja palvelimen välillä epäonnistui.{}Haluatko, että tämä istunto välitetään välityspalvelimen ”{STRING}” kautta? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Ei +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Kyllä, tämän kerran +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Kyllä, älä kysy uudestaan STR_NETWORK_SERVER :Palvelin STR_NETWORK_CLIENT :Pelaaja From 9df60a275911dee76d2a78648a5aabbe623c8064 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 29 Jul 2021 18:53:22 +0000 Subject: [PATCH 31/63] Update: Translations from eints slovak: 39 changes by ApplePie420 --- src/lang/slovak.txt | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 149cd93c95..9b62e85010 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -951,6 +951,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Ponuka dotácie skončila:{}{}Preprava {STRING.g} z {STRING} do {STRING} už nebude dotovaná STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Dotácie stiahnuté:{}{}Preprava {STRING.g} z {STRING} do {STRING} už nie je dotovaná +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Ponuka dotácie:{}{}Prvá preprava {STRING.g} z {STRING} do {STRING} bude dotovaná miestnou správou po dobu {NUM} rok{P "" "y" "ov"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Dotácia udelená spoločnosti {STRING}!{}{}Preprava {STRING.g} z {STRING} do {STRING} bude budúci rok o 50% výnosnejšia po dobu {NUM} rok{P "" "y" "ov"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Dotácia udelená spoločnosti {STRING}!{}{}Preprava {STRING.g} z {STRING} to {STRING} bude budúci rok 2x výnosnejšia po dobu {NUM} rok{P "" "y" "ov"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Dotácia udelená spoločnosti {STRING}!{}{}Preprava {STRING.g} z {STRING} do {STRING} bude budúci rok 3x výnosnejšia po dobu {NUM} rok{P "" "y" "ov"}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Dotácia udelená spoločnosti {STRING}!{}{}Preprava {STRING.g} z {STRING} do {STRING} bude budúci rok 4x výnosnejšia po dobu {NUM} rok{P "" "y" "ov"}! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}V meste {TOWN} zavládol dopravný chaos!{}{}Rekonštrukcia ciest financovaná {STRING} prinesie 6 mesiacov utrpenia pre motoristov! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Prepravné monopoly! @@ -1266,6 +1271,10 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Poruchy vozidla STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Zvoľte ako často budú mať zle udržiavané vozidlá poruchy STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Násobiteľ dotácii: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Zvoľte ako veľa sa platí za dotované spojenia +STR_CONFIG_SETTING_SUBSIDY_DURATION :Trvanie dotácie: {STRING} +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Počet rokov, na ktoré sa udelí dotácia +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} rok{P "" "y" "ov"} +STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Žiadne ponúknuté dotácie STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Cena stavby: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Zvoľte úroveň cien výstavby a nákupov STR_CONFIG_SETTING_RECESSIONS :Recesie: {STRING} @@ -1498,6 +1507,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dvojklik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Jedno kliknutie (keď je textové pole zvolené) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Jendo kliknutie (hneď) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Použiť presmerovanie: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Ak sa nepodarí pripojiť sa na server, môže sa použiť presmerovanie na vytvorenie spojenia. "Nikdy" zakáže túto možnosť, "spýtať sa" sa pred vytvorením spojenia pýta na potvrdenie, "povoliť" povolí túto možnosť bez ďalšieho potvrdzovania. +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nikdy +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Spýtať sa +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Povoliť STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Funkcia pravého tlacidla myši: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Zvolte možnosť ako bude emulované PRAVÉ tlačítko myši. @@ -1851,6 +1865,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Priemys STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribúcia nákladu STR_CONFIG_SETTING_AI :{ORANGE}Konkurenti STR_CONFIG_SETTING_AI_NPC :{ORANGE}Počítačový hráči +STR_CONFIG_SETTING_NETWORK :{ORANGE}Sieť STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(odporučený) @@ -2056,7 +2071,9 @@ STR_FACE_EARRING :Náušnica: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Zmeniť kravatu alebo náušnicu ############ Next lines match ServerGameType +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Lokálne STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Verejný +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Iba na pozvánku ############ End of leave-in-this-order # Network server list @@ -2091,6 +2108,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Verzia STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Adresa servera: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Počiatočný dátum: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Aktuálny dátum: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Herný skript: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Heslo: STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER JE OFFLINE STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVER JE PLNÝ @@ -2106,11 +2124,12 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Prehľad STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Prehľadať LAN STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Prehľadať servery na lokálnej sieti STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Pridať server -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Pridá server do zoznamu, v ktorom sa vždy budú hľadať prebiehajúce hry +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Pridá server do zoznamu. Môžu tu byť adresy alebo kódy pozvánok STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Spustiť server STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Spustiť vlastný server STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Zadajte vaše meno +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Zadajte adresu servra alebo kód pozvánky # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Spustiť novú hru pre viacero hráčov @@ -2196,6 +2215,10 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Upraviť STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Názov servra STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Viditelnosť STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Aby ostatní hráči videli váš server v zozname verejných servrov +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Kód pozvánky +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Kód pozvánky ktorý ostatný hráči použijú na pripojenie sa k vašemu servru +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Typ pripojenia +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Či a ako bude Váš server dostupný pre ostatných STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Hráč STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Meno STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Meno vašeho hráča @@ -2212,8 +2235,14 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nová spoločn STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Založiť novú spoločnosť a pripojiť sa k nej STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Toto ste vy STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Toto je hosť hry +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" "i" "ov"} / {NUM} spoločnos{P "ť" "ti" "tí"} ############ Begin of ConnectionType +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Miestna +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Vzdialení hráči sa nemôžu pripojiť +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Vrejný +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Za NAT smerovačom +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Pomocou presmerovania ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Vyhodiť @@ -2227,6 +2256,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Ste si STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Ste si istý, že chcete vymazať spoločnosť '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Ste si istý, že chcete zresetovať heslo pre spoločnosť '{COMPANY}'? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Použiť presmerovanie? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Nepodarilo sa uskutočniť pripojenie medzi Vami a servrom.{}Chceli by ste presmerovať toto pripojenie cez '{STRING}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Nie +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Áno, tentokrát +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Áno, znova sa nepýtať STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient @@ -2272,6 +2306,7 @@ STR_NETWORK_ERROR_CLIENT_START :{WHITE}Nemožem STR_NETWORK_ERROR_TIMEOUT :{WHITE}Vypršal časový limit pre spojenie č. {NUM} STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Chyba vznikla v protokole a spojenie je zatvorené STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Meno vašeho hráča nebolo nastavené. Meno si môžete zmeniť v hlavičke okna Hry pre viacerých hráčov +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Názov vašeho servra nebol nastavený. Názov môžete nastaviť na vrchu okna hry pre viacerých hráčov STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Revizia hry u tohto klienta nezodpoveda revizii hry na serveri. STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Nesprávne heslo STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server je plný @@ -2343,6 +2378,9 @@ STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server u STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server sa reštartuje...{}Čakajte prosím... STR_NETWORK_MESSAGE_KICKED :*** Hráč {STRING} bol vyhodený. Dôvod: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Registrácia servra zlyhala +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Váš server nepovoľuje vzdialené pripojenia +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Ostatní hráči sa nebudú môcť pripojiť k vašemu servru # Content downloading window STR_CONTENT_TITLE :{WHITE}Sťahovanie obsahu From 8380ff8dd0eb92678cf2faa7e1949657ea1deb02 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 30 Jul 2021 18:53:15 +0000 Subject: [PATCH 32/63] Update: Translations from eints dutch: 13 changes by Afoklala --- src/lang/dutch.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index d43f07801b..f245619f35 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1439,6 +1439,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dubbelklik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkele klik (met focus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkele klik (onmiddelijk) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Omleiden: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Als het niet lukt om verbinding te maken met de server, kun je laten omleiden om een verbinding tot stand te brengen. Met 'Nooit' sta je dit niet toe, met 'Vragen' krijg je eerst navraag, met 'Toestaan' sta je dit toe zonder navraag. +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nooit +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Vragen +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Toestaan STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Rechtsklikemulatie: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Methode selecteeren voor nabootsen van rechtsklikken @@ -1792,6 +1797,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Vrachtdistributie STR_CONFIG_SETTING_AI :{ORANGE}Tegenstanders STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computerspelers +STR_CONFIG_SETTING_NETWORK :{ORANGE}Netwerk STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Aanbevolen) @@ -2167,6 +2173,8 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} kl STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Lokaal STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Externe spelers kunnen geen verbinding maken STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Openbaar +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Achter NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via omleiden ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Eruit schoppen @@ -2180,6 +2188,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Weet je STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Weet je zeker dat je het bedrijf '{COMPANY}' wilt verwijderen? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Weet je zeker dat je het wachtwoord voor bedrijf '{COMPANY}' wilt terugstellen? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Omleiden? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Kan geen verbinding maken tussen server en jou.{}Wil je deze sessie omleiden via '{STRING}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Nee +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ja, deze keer +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ja, en vraag dit niet opnieuw STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Speler From 6fce05689cd6828c215156bb41950178ed9a8708 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 31 Jul 2021 18:51:38 +0000 Subject: [PATCH 33/63] Update: Translations from eints portuguese (brazilian): 6 changes by Vimerum --- src/lang/brazilian_portuguese.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index b7d49b0f2f..989dfbc629 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1440,6 +1440,8 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Clique duplo STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clique simples (quando em foco) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Clique simples (imediatamente) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Usar serviço de retransmissão: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Se durante a criação da conexão o servidor falhar, pode-se usar um serviço de retransmissão para criar a conexão. "Nunca" não permite isso, "perguntar" irá perguntar antes, "permitir" vai permitir sem perguntar STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Nunca STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Perguntar STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Permitir @@ -2173,6 +2175,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Jogadores remotos não podem se conectar STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Público STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Atrás de um NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Através de retransmissão ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar @@ -2186,8 +2189,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Você t STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Você tem certeza que quer excluir a empresa '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Você tem certeza que quer restaurar a senha da empresa '{COMPANY}'? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Usar retransmissão? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Erro ao estabelecer uma conexão entre você e o servidor.{}Você gostaria de retransmitir essa sessão via '{STRING}'? STR_NETWORK_ASK_RELAY_NO :{BLACK}Não STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Sim, apenas dessa vez +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Sim, não perguntar novamente STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente From c1d79398d57b4b8a013fcca62e72a5ce9efc137f Mon Sep 17 00:00:00 2001 From: dP Date: Sat, 31 Jul 2021 22:46:36 +0300 Subject: [PATCH 34/63] Fix: Use of unstable sort when distributing cargo production can cause desyncs --- src/station_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index a58c7b1f26..6a5cabc8db 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -4080,7 +4080,7 @@ uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, Sourc /* If there is some cargo left due to rounding issues distribute it among the best rated stations. */ if (amount > moving) { - std::sort(used_stations.begin(), used_stations.end(), [type](const StationInfo &a, const StationInfo &b) { + std::stable_sort(used_stations.begin(), used_stations.end(), [type](const StationInfo &a, const StationInfo &b) { return b.first->goods[type].rating < a.first->goods[type].rating; }); From d83647f9a7aaa2adb5ffa1042613f256134a9e1d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Thu, 22 Jul 2021 21:09:33 +0200 Subject: [PATCH 35/63] Fix #9440: negative cargo payments not being handled right Cargo payments were stored as unsigned integer, but cast to int64 during application of inflation. However, then being multiplied with a uint64 making the result uint64. So in the end the payment that should have been negative becomes hugely positive. --- src/cargotype.h | 2 +- src/economy.cpp | 2 +- src/economy_type.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cargotype.h b/src/cargotype.h index a398d60795..5ed9ac90e2 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -61,7 +61,7 @@ struct CargoSpec { uint8 rating_colour; uint8 weight; ///< Weight of a single unit of this cargo type in 1/16 ton (62.5 kg). uint16 multiplier; ///< Capacity multiplier for vehicles. (8 fractional bits) - uint32 initial_payment; ///< Initial payment rate before inflation is applied. + int32 initial_payment; ///< Initial payment rate before inflation is applied. uint8 transit_days[2]; bool is_freight; ///< Cargo type is considered to be freight (affects train freight multiplier). diff --git a/src/economy.cpp b/src/economy.cpp index c3332c4d12..936fba7896 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -803,7 +803,7 @@ void RecomputePrices() /* Setup cargo payment */ for (CargoSpec *cs : CargoSpec::Iterate()) { - cs->current_payment = ((int64)cs->initial_payment * _economy.inflation_payment) >> 16; + cs->current_payment = (cs->initial_payment * (int64)_economy.inflation_payment) >> 16; } SetWindowClassesDirty(WC_BUILD_VEHICLE); diff --git a/src/economy_type.h b/src/economy_type.h index 85a1bbe4fc..1cb43b8ee9 100644 --- a/src/economy_type.h +++ b/src/economy_type.h @@ -34,7 +34,7 @@ struct Economy { uint32 industry_daily_change_counter; ///< Bits 31-16 are number of industry to be performed, 15-0 are fractional collected daily uint32 industry_daily_increment; ///< The value which will increment industry_daily_change_counter. Computed value. NOSAVE uint64 inflation_prices; ///< Cumulated inflation of prices since game start; 16 bit fractional part - uint64 inflation_payment; ///< Cumulated inflation of cargo paypent since game start; 16 bit fractional part + uint64 inflation_payment; ///< Cumulated inflation of cargo payment since game start; 16 bit fractional part /* Old stuff for savegame conversion only */ Money old_max_loan_unround; ///< Old: Unrounded max loan From 18387269853b2e1551f5734c23e7209c1bf46825 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 2 Aug 2021 18:51:35 +0000 Subject: [PATCH 36/63] Update: Translations from eints french: 12 changes by glx22 --- src/lang/french.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/lang/french.txt b/src/lang/french.txt index 9f709086c4..bf19dd93f3 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1440,6 +1440,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Double clic STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Simple clic (avec le focus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Simple clic (immédiatement) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Utiliser un service relai{NBSP}: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Si la création d'une connexion vers le serveur échoue, il est possible d'utiliser un service relai pour créer une connexion. "Jamais" refusera cela, "demander" demandera d'abord, "autoriser" l'autorisera sans demander +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Jamais +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Demander +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Autoriser STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Émulation du clic droit{NBSP}: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Choisir la méthode pour émuler les clics du bouton droit de la souris @@ -1793,6 +1798,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribution des marchandises STR_CONFIG_SETTING_AI :{ORANGE}Compétiteurs STR_CONFIG_SETTING_AI_NPC :{ORANGE}Intelligence artificielle +STR_CONFIG_SETTING_NETWORK :{ORANGE}Réseau STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(recommandé) @@ -2169,6 +2175,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Local STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Les joueurs distants ne peuvent pas se connecter STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Public STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Derrière un NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via relai ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Exclure @@ -2182,6 +2189,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Êtes-v STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Êtes-vous sûr de vouloir supprimer la compagnie '{COMPANY}'{NBSP}? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Êtes-vous sûr de vouloir réinitialiser le mot de passe de la compagnie '{COMPANY}'? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Utiliser un relai{NBSP}? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Aucune connexion n'a pu être établie entre vous et le serveur.{}Voudriez vous relayer cette session via '{STRING}'{NBSP}? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Non +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Oui, cette fois uniquement +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Oui, ne plus me demander STR_NETWORK_SERVER :Serveur STR_NETWORK_CLIENT :Client From b681935fc8d97b2f71be114d46aa941050bb0ed8 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 4 Aug 2021 19:00:04 +0000 Subject: [PATCH 37/63] Update: Translations from eints norwegian (bokmal): 28 changes by Anolitt --- src/lang/norwegian_bokmal.txt | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 56730eb4b0..900e89f74b 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1442,6 +1442,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dobbeltklikk STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkelt klikk (ved fokus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkelt klikk (umiddelbart) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Bruk videresendingstjeneste: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Hvis opprettelsen av en tilkobling til serveren mislykkes, kan man bruke en videresendingstjeneste til å opprette en tilkobling. "Aldri" tillater dette, "spør" vil spørre først, "tillat" vil tillate det uten å spørre +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Aldri +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Spør +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Tillat STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Høyreklikkemulering: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Velg metoden å etterligne høyreklikk @@ -1795,6 +1800,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Gods-distribusjon STR_CONFIG_SETTING_AI :{ORANGE}Motstandere STR_CONFIG_SETTING_AI_NPC :{ORANGE}Datamaskinstyrte spillere +STR_CONFIG_SETTING_NETWORK :{ORANGE}Nettverk STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Anbefalt) @@ -2000,7 +2006,9 @@ STR_FACE_EARRING :Ørering: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Endre slips eller ørering ############ Next lines match ServerGameType +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Lokal STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Offentlig +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Kun invitasjon ############ End of leave-in-this-order # Network server list @@ -2035,6 +2043,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Tjenerv STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Tjeneradresse: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Startdato: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Nettverksdato: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Spillskript: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Passordbeskyttet! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}TJENEREN ER FRAKOBLET STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}TJENEREN ER FULL @@ -2050,11 +2059,12 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Søk på STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Søk LAN STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Søk lokalt nettverk for servere STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Legg til tjener -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Legger til en tjener til listen som alltid vil bli sjekket for aktive spill. +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Legger til en tjener til listen. Dette kan enten være en serveradresse eller en invitasjonskode STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Start tjener STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Start en egen tjener STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Skriv inn ditt navn +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Tast inn serveradresse og invitasjonskode # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start et nytt flerspillerspill @@ -2141,6 +2151,10 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Rediger STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Servernavn STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Synlighet STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Om andre mennesker kan se serveren din i den offentlige oppføringen +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Invitasjonskode +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Invitasjonskode andre spillere kan bruke for å koble til denne serveren +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Tilkoblingstype +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Hvorvidt og hvordan serveren din kan nås av andre STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Spiller STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Navn STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Ditt spillernavn @@ -2160,6 +2174,11 @@ STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Dette er STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" s} / {NUM} firma{P et er} ############ Begin of ConnectionType +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Lokal +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Eksterne spillere kan ikke koble til +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Offentlig +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Bak NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Via videresending ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Spark @@ -2173,6 +2192,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Er du s STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Er du sikker på at du vil slette firmaet '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Er du sikker på at du vil tilbakestille passordet til firma '{COMPANY}'? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Vil du bruke videresending? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Kunne ikke opprette en kobling mellom deg og serveren.{}Vil du videresende denne økten via '{STRING}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Nei +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ja, denne +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ja, ikke spør igjen STR_NETWORK_SERVER :Tjener STR_NETWORK_CLIENT :Klient @@ -2290,6 +2314,9 @@ STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Tjeneren STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Tjeneren starter på nytt...{}Vennligst vent... STR_NETWORK_MESSAGE_KICKED :*** {STRING} ble kastet ut. Grunn: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Serverregistrering mislykket +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Serveren din tillater ikke eksterne tilkoblinger +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Andre spillere vil ikke kunne koble seg til din server # Content downloading window STR_CONTENT_TITLE :{WHITE}Laster ned innhold From 2dd46b964aaea976dd93aab80fd35934ed00e46a Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 5 Aug 2021 18:56:58 +0000 Subject: [PATCH 38/63] Update: Translations from eints latvian: 13 changes by osprinkis --- src/lang/latvian.txt | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index db3b1e2625..c105cfe8d3 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -65,13 +65,13 @@ STR_CARGO_SINGULAR_PASSENGER :Pasažieris STR_CARGO_SINGULAR_COAL :Ogles STR_CARGO_SINGULAR_MAIL :Pasts STR_CARGO_SINGULAR_OIL :Nafta -STR_CARGO_SINGULAR_LIVESTOCK :Mājlopi +STR_CARGO_SINGULAR_LIVESTOCK :Mājlops STR_CARGO_SINGULAR_GOODS :Preces STR_CARGO_SINGULAR_GRAIN :Graudi STR_CARGO_SINGULAR_WOOD :Koksne STR_CARGO_SINGULAR_IRON_ORE :Dzelzsrūda STR_CARGO_SINGULAR_STEEL :Tērauds -STR_CARGO_SINGULAR_VALUABLES :Vērtslietas +STR_CARGO_SINGULAR_VALUABLES :Vērtslieta STR_CARGO_SINGULAR_COPPER_ORE :Vara rūda STR_CARGO_SINGULAR_MAIZE :Kukurūza STR_CARGO_SINGULAR_FRUIT :Augļi @@ -89,7 +89,7 @@ STR_CARGO_SINGULAR_COLA :Kola STR_CARGO_SINGULAR_CANDYFLOSS :Cukurvate STR_CARGO_SINGULAR_BUBBLE :Burbuļi STR_CARGO_SINGULAR_TOFFEE :Īriss -STR_CARGO_SINGULAR_BATTERY :Baterijas +STR_CARGO_SINGULAR_BATTERY :Baterija STR_CARGO_SINGULAR_PLASTIC :Plastmasa STR_CARGO_SINGULAR_FIZZY_DRINK :Limonāde @@ -950,7 +950,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Malaizijas Ring STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Brauc pa kreiso pusi STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Brauc pa labo pusi -STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Pilsētu nosaukumi +STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Pilsētu nosaukumi: STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Pilsētu nosaukumu stila izvēle ############ start of townname region @@ -974,7 +974,7 @@ STR_GAME_OPTIONS_TOWN_NAME_SWISS :Šveiciešu STR_GAME_OPTIONS_TOWN_NAME_DANISH :Dāņu STR_GAME_OPTIONS_TOWN_NAME_TURKISH :Turku STR_GAME_OPTIONS_TOWN_NAME_ITALIAN :Itāļu -STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Kataloņu +STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Katalāņu ############ end of townname region STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automātiskā saglabāšana @@ -1846,7 +1846,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Vai tie # Cheat window STR_CHEATS :{WHITE}Blēdības STR_CHEATS_TOOLTIP :{BLACK}Atzīmētās rūtiņas norāda uz to, vai esat jau izmantojis šo blēdību -STR_CHEATS_NOTE :{BLACK}Piezīme: Šo iestatījumu lietojumus tiks ierakstīs arī savegame +STR_CHEATS_NOTE :{BLACK}Piezīme: Šo iestatījumu lietojums tiks ierakstīs arī spēles saglabājumā STR_CHEAT_MONEY :{LTBLUE}Palielināt naudas līdzekļus par {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spēlēt kā uzņēmumam: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Burvju buldozers (nojauc ražotnes, nepārvietojamus objektus): {ORANGE}{STRING} @@ -2274,7 +2274,7 @@ STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... fail STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Neizdevās atspiest lejupielādēto failu STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Trūkst grafikas -STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD vajag grafiku, lai strādātu, bet tādu nevarēja atrast. Vai ļaujat OpenTTD lejupielādēt un instalēt tādu grafiku? +STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD darbībai nepieciešama grafika, bet tāda nav atrodama. Vai ļaut OpenTTD lejupielādēt un instalēt šo grafiku? STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Jā, lejupielādēt grafiku STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nē, iziet no OpenTTD @@ -2533,10 +2533,10 @@ STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Samazin STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Radīt nejaušu zemi STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Izveidot jaunu scenāriju STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Atiestatīt ainavu -STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Novākt visus spēlētājam piederošos īpašumus no kartes +STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Noņemt visus spēlētājam piederošos īpašumus no kartes STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Atiestatīt ainavu -STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Vai tiešām vēlaties novākt visus uzņēmumam piederošos īpašumus? +STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Vai tiešām vēlaties noņemt visus uzņēmumam piederošos īpašumus? # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Pilsētu radīšana @@ -2584,7 +2584,7 @@ STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Finansē STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Noņemt visas nozares STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK} Noņemt visas kartē pašlaik esošās nozares STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE} Noņemt visas nozares -STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Vai tiešām vēlaties noņemt visas industrijas? +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Vai tiešām vēlaties noņemt visas nozares? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Ražotnes '{STRING}' kravu ķēde @@ -3140,7 +3140,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Veikt l STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Finansēt ceļu remontdarbus. Rada satiksmes traucējumus līdz pat pusgadam.{}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Uzbūvēt statuju par godu savam uzņēmumam.{}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Finansēt jaunu komercēku būvniecību šajā pilsētā.{}Izmaksas: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Pirkt 1 gada izņēmuma tiesības uz kravu un pasažieru transportēšanu. Pašvaldība atļaus pasažieriem un kravas pārvešanai izmantot tkai jūsu uzņēmuma stacijas.{}Izmaksas: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Pirkt 1 gada izņēmuma tiesības uz pārvadājumiem pilsētā.{}Pašvaldība neatļaus pasažieru un kravu pārvešanai izmantot jūsu sāncenšu stacijas.{}Izmaksas: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Piekukuļot vietējo pašvaldību lai paceltu reitingu, riskējot saņemt lielu sodu.{}Izmaksas: {CURRENCY_LONG} # Goal window @@ -3282,9 +3282,9 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Novērst # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrēt galveno skatu uz pieturas punktu. Ctrl+klikšķis atvērs skatu uz pieturas punktu jaunā skatulaukā +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrēt galveno skatu uz pieturas punktu. Ctrl+klikšķis atvērs skatu uz pieturas punktu jaunā skatlaukā STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Mainīt pieturas punkta nosaukumu -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrēt galveno skatu uz boju. Ctrl+klikšķis atvērs skatu uz boju jaunā skatulaukā +STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrēt galveno skatu uz boju. Ctrl+klikšķis atvērs skatu uz boju jaunā skatlaukā STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Mainīt bojas nosaukumu STR_EDIT_WAYPOINT_NAME :{WHITE}Labot pieturas punkta nosaukumu From d58772ecdadb67cbd571ab46eb1c822c421da8c0 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 7 Aug 2021 18:49:22 +0000 Subject: [PATCH 39/63] Update: Translations from eints vietnamese: 28 changes by KhoiCanDev --- src/lang/vietnamese.txt | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index ae37774717..76d1fe5f1a 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1439,6 +1439,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Nháy kép STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Nháy đơn (nếu đang kích hoạt) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Nháy đơn (ngay lập tức) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Sử dụng dịch vụ chuyển tiếp: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Nếu không thể tạo kết nối tới server của bạn, người chơi có thể sử dụng dịch vụ chuyển tiếp để tạo kết nối. Chọn "Không cho phép" để cho phép sử dụng, "Hỏi" để hỏi trước, hoặc "Cho phép" để cho phép không cần hỏi. +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Không cho phép +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Hỏi +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Cho phép STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Giả lập click chuột phải: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Chọn phương thức giả lập nút phải chuột @@ -1792,6 +1797,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Nhà m STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Phân bổ hàng hóa STR_CONFIG_SETTING_AI :{ORANGE}Đối Thủ STR_CONFIG_SETTING_AI_NPC :{ORANGE}Nhân vật máy +STR_CONFIG_SETTING_NETWORK :{ORANGE}Kết nối STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Nên dùng) @@ -1997,7 +2003,9 @@ STR_FACE_EARRING :Bông tai: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Thay đổi cà vạt hoặc bông tai ############ Next lines match ServerGameType +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Nội bộ STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Công khai +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Chỉ được mời ############ End of leave-in-this-order # Network server list @@ -2032,6 +2040,7 @@ STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Phiên STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Địa chỉ server: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Ngày bắt đầu: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Ngày hiện tại: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Game Script: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Mật khẩu bảo vệ! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER OFFLINE STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVER ĐẦY @@ -2047,11 +2056,12 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Tìm má STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Tìm trên LAN STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Tìm máy chủ trên mạng nội bộ STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Thêm server -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Thêm server vào danh sách luôn được chọn khi chạy game. +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Thêm server vào danh sách. Đây có thể là địa chỉ của server hoặc mã tham gia STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tạo server STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Tạo server của riêng bạn STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Gõ tên của bạn +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Nhập địa chỉ server hoặc mã tham gia # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Bắt đầu ván chơi mạng nhiều người @@ -2137,6 +2147,10 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Sửa t STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Tên của server STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Hiển thị STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Cho phép người khác thấy server của bạn trong danh sách công khai +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Mã tham gia +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Mã tham gia mà người chơi có thể sử dụng để tham gia vào server +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Cách kết nối +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Cách mà những người chơi khác kết nối tới server của bạn STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Người chơi STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Tên STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Tên người chơi @@ -2156,6 +2170,11 @@ STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Đây l STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} người chơi / {NUM} công ty ############ Begin of ConnectionType +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Nội bộ +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Người chơi bên ngoài không thể kết nối +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Công khai +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Sau tầng NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Thông qua chuyển tiếp ############ End of ConnectionType STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Đá ra @@ -2169,6 +2188,11 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Bạn c STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Bạn có muốn xoá công ty '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Bạn có muốn đặt lại mật khẩu cho công ty '{COMPANY}'? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Sử dụng chuyển tiếp? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Kết nối tới server thất bại.{}Bạn có muốn chuyển tiếp kết nối của bạn thông qua '{STRING}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Không +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Đồng ý, chỉ lần này +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Đồng ý, đừng hỏi lại STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Máy trạm @@ -2286,6 +2310,9 @@ STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server k STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server khởi động lại...{}Xin chờ... STR_NETWORK_MESSAGE_KICKED :*** {STRING} đã bị đá khỏi ván chơi. Lý do: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Đăng ký server thất bại +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Server của bạn không cho phép kết nối bên ngoài +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Những người chơi khác sẽ không kết nối được vào server của bạn # Content downloading window STR_CONTENT_TITLE :{WHITE}Đang tải nội dung From 8706dcd9c1ac8f695b7a0cb1a204fb6bcbaa492f Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Mon, 9 Aug 2021 23:34:50 +0200 Subject: [PATCH 40/63] Add: [Script] Basic information about loaded NewGRFs for scripts. (#9464) Currently, scripts use various heuristics to detect loaded NewGRFs that are inherently unreliable. The list of loaded NewGRFs is easily accessible to a human player, and thus giving scripts the same information is consistent with the current approach to not give scripts more information than a human player. --- src/script/api/CMakeLists.txt | 2 ++ src/script/api/ai_changelog.hpp | 4 +++ src/script/api/game_changelog.hpp | 4 +++ src/script/api/script_newgrf.cpp | 58 +++++++++++++++++++++++++++++++ src/script/api/script_newgrf.hpp | 56 +++++++++++++++++++++++++++++ 5 files changed, 124 insertions(+) create mode 100644 src/script/api/script_newgrf.cpp create mode 100644 src/script/api/script_newgrf.hpp diff --git a/src/script/api/CMakeLists.txt b/src/script/api/CMakeLists.txt index c21707d431..a6390e2bb6 100644 --- a/src/script/api/CMakeLists.txt +++ b/src/script/api/CMakeLists.txt @@ -179,6 +179,7 @@ add_files( script_log.hpp script_map.hpp script_marine.hpp + script_newgrf.hpp script_news.hpp script_object.hpp script_order.hpp @@ -246,6 +247,7 @@ add_files( script_log.cpp script_map.cpp script_marine.cpp + script_newgrf.cpp script_news.cpp script_object.cpp script_order.cpp diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index f63b41fa9b..15e1710275 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -17,6 +17,10 @@ * * This version is not yet released. The following changes are not set in stone yet. * + * API additions: + * \li AINewGRF + * \li AINewGRFList + * * \b 1.11.0 * * API additions: diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 2702a98e7c..5d214efb12 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -17,6 +17,10 @@ * * This version is not yet released. The following changes are not set in stone yet. * + * API additions: + * \li GSNewGRF + * \li GSNewGRFList + * * \b 1.11.0 * * API additions: diff --git a/src/script/api/script_newgrf.cpp b/src/script/api/script_newgrf.cpp new file mode 100644 index 0000000000..387093092d --- /dev/null +++ b/src/script/api/script_newgrf.cpp @@ -0,0 +1,58 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_newgrf.cpp Implementation of ScriptNewGRF and friends. */ + +#include "../../stdafx.h" +#include "script_newgrf.hpp" +#include "../../core/bitmath_func.hpp" +#include "../../newgrf_config.h" +#include "../../string_func.h" + +#include "../../safeguards.h" + +ScriptNewGRFList::ScriptNewGRFList() +{ + for (auto c = _grfconfig; c != nullptr; c = c->next) { + if (!HasBit(c->flags, GCF_STATIC)) { + this->AddItem(c->ident.grfid); + } + } +} + +/* static */ bool ScriptNewGRF::IsLoaded(uint32 grfid) +{ + for (auto c = _grfconfig; c != nullptr; c = c->next) { + if (!HasBit(c->flags, GCF_STATIC) && c->ident.grfid == grfid) { + return true; + } + } + + return false; +} + +/* static */ uint32 ScriptNewGRF::GetVersion(uint32 grfid) +{ + for (auto c = _grfconfig; c != nullptr; c = c->next) { + if (!HasBit(c->flags, GCF_STATIC) && c->ident.grfid == grfid) { + return c->version; + } + } + + return 0; +} + +/* static */ char *ScriptNewGRF::GetName(uint32 grfid) +{ + for (auto c = _grfconfig; c != nullptr; c = c->next) { + if (!HasBit(c->flags, GCF_STATIC) && c->ident.grfid == grfid) { + return ::stredup(c->GetName()); + } + } + + return nullptr; +} diff --git a/src/script/api/script_newgrf.hpp b/src/script/api/script_newgrf.hpp new file mode 100644 index 0000000000..73f870cc10 --- /dev/null +++ b/src/script/api/script_newgrf.hpp @@ -0,0 +1,56 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_newgrf.hpp NewGRF info for scripts. */ + +#ifndef SCRIPT_NEWGRF_HPP +#define SCRIPT_NEWGRF_HPP + +#include "script_list.hpp" + +/** + * Create a list of loaded NewGRFs. + * @api ai game + * @ingroup ScriptList + */ +class ScriptNewGRFList : public ScriptList { +public: + ScriptNewGRFList(); +}; + + +/** + * Class that handles all NewGRF related functions. + * @api ai game + */ +class ScriptNewGRF : public ScriptObject { +public: + /** + * Check if a NewGRF with a given grfid is loaded. + * @param grfid The grfid to check. + * @return True if and only if a NewGRF with the given grfid is loaded in the game. + */ + static bool IsLoaded(uint32 grfid); + + /** + * Get the version of a loaded NewGRF. + * @param grfid The NewGRF to query. + * @pre ScriptNewGRF::IsLoaded(grfid). + * @return Version of the NewGRF or 0 if the NewGRF specifies no version. + */ + static uint32 GetVersion(uint32 grfid); + + /** + * Get the BridgeID of a bridge at a given tile. + * @param grfid The NewGRF to query. + * @pre ScriptNewGRF::IsLoaded(grfid). + * @return The name of the NewGRF or nullptr if no name is defined. + */ + static char *GetName(uint32 grfid); +}; + +#endif /* SCRIPT_NEWGRF_HPP */ From 4eb368c786893e3607341bae35aec6dde5def6b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Tue, 10 Aug 2021 19:00:54 +0200 Subject: [PATCH 41/63] Fix 14f197c: [Script] int64 values don't fit into int (#9465) --- src/script/api/script_list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/api/script_list.cpp b/src/script/api/script_list.cpp index 623128bdd8..f563267045 100644 --- a/src/script/api/script_list.cpp +++ b/src/script/api/script_list.cpp @@ -832,7 +832,7 @@ SQInteger ScriptList::_nexti(HSQUIRRELVM vm) SQInteger idx; sq_getinteger(vm, 2, &idx); - int val = this->Next(); + SQInteger val = this->Next(); if (this->IsEnd()) { sq_pushnull(vm); return 1; From 8a083cd7f81d8223f08c30d5bcb2d9c38e7556a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Tue, 10 Aug 2021 19:03:15 +0200 Subject: [PATCH 42/63] Fix 68f2213: Don't use GetPoolSize() for end of pool iterator (#9461) --- src/core/pool_type.hpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 2201d5cb01..20e8f8b29f 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -160,7 +160,11 @@ struct Pool : PoolBase { private: size_t index; - void ValidateIndex() { while (this->index < T::GetPoolSize() && !(T::IsValidID(this->index))) this->index++; } + void ValidateIndex() + { + while (this->index < T::GetPoolSize() && !(T::IsValidID(this->index))) this->index++; + if (this->index >= T::GetPoolSize()) this->index = T::Pool::MAX_SIZE; + } }; /* @@ -172,7 +176,7 @@ struct Pool : PoolBase { size_t from; IterateWrapper(size_t from = 0) : from(from) {} PoolIterator begin() { return PoolIterator(this->from); } - PoolIterator end() { return PoolIterator(T::GetPoolSize()); } + PoolIterator end() { return PoolIterator(T::Pool::MAX_SIZE); } bool empty() { return this->begin() == this->end(); } }; @@ -201,7 +205,11 @@ struct Pool : PoolBase { private: size_t index; F filter; - void ValidateIndex() { while (this->index < T::GetPoolSize() && !(T::IsValidID(this->index) && this->filter(this->index))) this->index++; } + void ValidateIndex() + { + while (this->index < T::GetPoolSize() && !(T::IsValidID(this->index) && this->filter(this->index))) this->index++; + if (this->index >= T::GetPoolSize()) this->index = T::Pool::MAX_SIZE; + } }; /* @@ -214,7 +222,7 @@ struct Pool : PoolBase { F filter; IterateWrapperFiltered(size_t from, F filter) : from(from), filter(filter) {} PoolIteratorFiltered begin() { return PoolIteratorFiltered(this->from, this->filter); } - PoolIteratorFiltered end() { return PoolIteratorFiltered(T::GetPoolSize(), this->filter); } + PoolIteratorFiltered end() { return PoolIteratorFiltered(T::Pool::MAX_SIZE, this->filter); } bool empty() { return this->begin() == this->end(); } }; From 4c1ea4020d797e2ddb086cc73109eb8c51cbbbdb Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 10 Aug 2021 20:03:13 +0200 Subject: [PATCH 43/63] Change: remove the ability to control "max spectators" (#9466) Soon we will make "join game" join the game as spectator first, so limiting the amount of spectators makes no sense anymore in that context. Not sure it ever did make sense. --- src/console_cmds.cpp | 10 ++------- src/lang/english.txt | 3 --- src/network/core/game_info.cpp | 5 ++--- src/network/core/game_info.h | 1 - src/network/network_client.cpp | 12 ----------- src/network/network_func.h | 1 - src/network/network_gui.cpp | 28 +------------------------ src/network/network_server.cpp | 4 ---- src/settings_type.h | 1 - src/table/settings/network_settings.ini | 10 --------- src/widgets/network_widget.h | 4 ---- 11 files changed, 5 insertions(+), 74 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index fd7f09e3c4..8963c47517 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -698,14 +698,14 @@ DEF_CONSOLE_CMD(ConServerInfo) { if (argc == 0) { IConsolePrint(CC_HELP, "List current and maximum client/company limits. Usage 'server_info'."); - IConsolePrint(CC_HELP, "You can change these values by modifying settings 'network.max_clients', 'network.max_companies' and 'network.max_spectators'."); + IConsolePrint(CC_HELP, "You can change these values by modifying settings 'network.max_clients' and 'network.max_companies'."); return true; } IConsolePrint(CC_DEFAULT, "Invite code: {}", _network_server_invite_code); IConsolePrint(CC_DEFAULT, "Current/maximum clients: {:3d}/{:3d}", _network_game_info.clients_on, _settings_client.network.max_clients); IConsolePrint(CC_DEFAULT, "Current/maximum companies: {:3d}/{:3d}", Company::GetNumItems(), _settings_client.network.max_companies); - IConsolePrint(CC_DEFAULT, "Current/maximum spectators: {:3d}/{:3d}", NetworkSpectatorCount(), _settings_client.network.max_spectators); + IConsolePrint(CC_DEFAULT, "Current spectators: {:3d}", NetworkSpectatorCount()); return true; } @@ -765,11 +765,6 @@ DEF_CONSOLE_CMD(ConJoinCompany) return true; } - if (company_id == COMPANY_SPECTATOR && NetworkMaxSpectatorsReached()) { - IConsolePrint(CC_ERROR, "Cannot join spectators, maximum number of spectators reached."); - return true; - } - if (company_id != COMPANY_SPECTATOR && !Company::IsHumanID(company_id)) { IConsolePrint(CC_ERROR, "Cannot join AI company."); return true; @@ -2422,7 +2417,6 @@ void IConsoleStdLibRegister() IConsole::AliasRegister("server_port", "setting server_port %+"); IConsole::AliasRegister("max_clients", "setting max_clients %+"); IConsole::AliasRegister("max_companies", "setting max_companies %+"); - IConsole::AliasRegister("max_spectators", "setting max_spectators %+"); IConsole::AliasRegister("max_join_time", "setting max_join_time %+"); IConsole::AliasRegister("pause_on_join", "setting pause_on_join %+"); IConsole::AliasRegister("autoclean_companies", "setting autoclean_companies %+"); diff --git a/src/lang/english.txt b/src/lang/english.txt index 44d226cbf2..eb7b7365bd 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2079,9 +2079,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choose t STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} compan{P y ies} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximum number of companies: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limit the server to a certain amount of companies -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} spectator{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximum number of spectators: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limit the server to a certain amount of spectators STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Language spoken: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Other players will know which language is spoken on the server diff --git a/src/network/core/game_info.cpp b/src/network/core/game_info.cpp index ebc78fffcb..1576ae4132 100644 --- a/src/network/core/game_info.cpp +++ b/src/network/core/game_info.cpp @@ -126,7 +126,6 @@ void FillStaticNetworkServerGameInfo() _network_game_info.start_date = ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1); _network_game_info.clients_max = _settings_client.network.max_clients; _network_game_info.companies_max = _settings_client.network.max_companies; - _network_game_info.spectators_max = _settings_client.network.max_spectators; _network_game_info.map_width = MapSizeX(); _network_game_info.map_height = MapSizeY(); _network_game_info.landscape = _settings_game.game_creation.landscape; @@ -234,7 +233,7 @@ void SerializeNetworkGameInfo(Packet *p, const NetworkServerGameInfo *info, bool /* NETWORK_GAME_INFO_VERSION = 2 */ p->Send_uint8 (info->companies_max); p->Send_uint8 (info->companies_on); - p->Send_uint8 (info->spectators_max); + p->Send_uint8 (info->clients_max); // Used to be max-spectators /* NETWORK_GAME_INFO_VERSION = 1 */ p->Send_string(info->server_name); @@ -331,7 +330,7 @@ void DeserializeNetworkGameInfo(Packet *p, NetworkGameInfo *info, const GameInfo case 2: info->companies_max = p->Recv_uint8 (); info->companies_on = p->Recv_uint8 (); - info->spectators_max = p->Recv_uint8 (); + p->Recv_uint8(); // Used to contain max-spectators. FALLTHROUGH; case 1: diff --git a/src/network/core/game_info.h b/src/network/core/game_info.h index 91fd96ad9d..95073f6c21 100644 --- a/src/network/core/game_info.h +++ b/src/network/core/game_info.h @@ -105,7 +105,6 @@ struct NetworkServerGameInfo { byte companies_on; ///< How many started companies do we have byte companies_max; ///< Max companies allowed on server byte spectators_on; ///< How many spectators do we have? - byte spectators_max; ///< Max spectators allowed on server byte landscape; ///< The used landscape int gamescript_version; ///< Version of the gamescript. std::string gamescript_name; ///< Name of the gamescript. diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index db8992f3b8..16fd31cfe7 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -314,8 +314,6 @@ static std::string _password_server_id; /** Maximum number of companies of the currently joined server. */ static uint8 _network_server_max_companies; -/** Maximum number of spectators of the currently joined server. */ -static uint8 _network_server_max_spectators; /** Information about the game to join to. */ NetworkJoinInfo _network_join; @@ -1189,7 +1187,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(P if (this->status < STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET; _network_server_max_companies = p->Recv_uint8(); - _network_server_max_spectators = p->Recv_uint8(); return NETWORK_RECV_STATUS_OKAY; } @@ -1406,12 +1403,3 @@ bool NetworkMaxCompaniesReached() { return Company::GetNumItems() >= (_network_server ? _settings_client.network.max_companies : _network_server_max_companies); } - -/** - * Check if max_spectatos has been reached on the server (local check only). - * @return true if the max value has been reached or exceeded, false otherwise. - */ -bool NetworkMaxSpectatorsReached() -{ - return NetworkSpectatorCount() >= (_network_server ? _settings_client.network.max_spectators : _network_server_max_spectators); -} diff --git a/src/network/network_func.h b/src/network/network_func.h index c0f68f9157..1708ed95bd 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -60,7 +60,6 @@ void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio); bool NetworkCompanyIsPassworded(CompanyID company_id); bool NetworkMaxCompaniesReached(); -bool NetworkMaxSpectatorsReached(); 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 13c1faa0a9..076b3d46ec 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1033,10 +1033,6 @@ struct NetworkStartServerWindow : public Window { case WID_NSS_COMPANIES_TXT: SetDParam(0, _settings_client.network.max_companies); break; - - case WID_NSS_SPECTATORS_TXT: - SetDParam(0, _settings_client.network.max_spectators); - break; } } @@ -1079,7 +1075,6 @@ struct NetworkStartServerWindow : public Window { case WID_NSS_CLIENTS_BTND: case WID_NSS_CLIENTS_BTNU: // Click on up/down button for number of clients case WID_NSS_COMPANIES_BTND: case WID_NSS_COMPANIES_BTNU: // Click on up/down button for number of companies - case WID_NSS_SPECTATORS_BTND: case WID_NSS_SPECTATORS_BTNU: // Click on up/down button for number of spectators /* Don't allow too fast scrolling. */ if (!(this->flags & WF_TIMEOUT) || this->timeout_timer <= 1) { this->HandleButtonClick(widget); @@ -1092,9 +1087,6 @@ struct NetworkStartServerWindow : public Window { case WID_NSS_COMPANIES_BTND: case WID_NSS_COMPANIES_BTNU: _settings_client.network.max_companies = Clamp(_settings_client.network.max_companies + widget - WID_NSS_COMPANIES_TXT, 1, MAX_COMPANIES); break; - case WID_NSS_SPECTATORS_BTND: case WID_NSS_SPECTATORS_BTNU: - _settings_client.network.max_spectators = Clamp(_settings_client.network.max_spectators + widget - WID_NSS_SPECTATORS_TXT, 0, MAX_CLIENTS); - break; } } _left_button_clicked = false; @@ -1112,12 +1104,6 @@ struct NetworkStartServerWindow : public Window { ShowQueryString(STR_JUST_INT, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES, 3, this, CS_NUMERAL, QSF_NONE); break; - case WID_NSS_SPECTATORS_TXT: // Click on number of spectators - this->widget_id = WID_NSS_SPECTATORS_TXT; - SetDParam(0, _settings_client.network.max_spectators); - ShowQueryString(STR_JUST_INT, STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS, 4, this, CS_NUMERAL, QSF_NONE); - break; - case WID_NSS_GENERATE_GAME: // Start game if (!CheckServerName()) return; _is_network_server = true; @@ -1172,7 +1158,7 @@ struct NetworkStartServerWindow : public Window { void OnTimeout() override { - static const int raise_widgets[] = {WID_NSS_CLIENTS_BTND, WID_NSS_CLIENTS_BTNU, WID_NSS_COMPANIES_BTND, WID_NSS_COMPANIES_BTNU, WID_NSS_SPECTATORS_BTND, WID_NSS_SPECTATORS_BTNU, WIDGET_LIST_END}; + static const int raise_widgets[] = {WID_NSS_CLIENTS_BTND, WID_NSS_CLIENTS_BTNU, WID_NSS_COMPANIES_BTND, WID_NSS_COMPANIES_BTNU, WIDGET_LIST_END}; for (const int *widget = raise_widgets; *widget != WIDGET_LIST_END; widget++) { if (this->IsWidgetLowered(*widget)) { this->RaiseWidget(*widget); @@ -1194,7 +1180,6 @@ struct NetworkStartServerWindow : public Window { default: NOT_REACHED(); case WID_NSS_CLIENTS_TXT: _settings_client.network.max_clients = Clamp(value, 2, MAX_CLIENTS); break; case WID_NSS_COMPANIES_TXT: _settings_client.network.max_companies = Clamp(value, 1, MAX_COMPANIES); break; - case WID_NSS_SPECTATORS_TXT: _settings_client.network.max_spectators = Clamp(value, 0, MAX_CLIENTS); break; } } @@ -1246,15 +1231,6 @@ static const NWidgetPart _nested_network_start_server_window_widgets[] = { NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_COMPANIES_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP), EndContainer(), EndContainer(), - - NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), - NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_SPECTATORS_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS, STR_NULL), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_SPECTATORS_BTND), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_DOWN, STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, WID_NSS_SPECTATORS_TXT), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_SPECTATORS_SELECT, STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP), - NWidget(WWT_IMGBTN, COLOUR_LIGHT_BLUE, WID_NSS_SPECTATORS_BTNU), SetMinimalSize(12, 12), SetFill(0, 1), SetDataTip(SPR_ARROW_UP, STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP), - EndContainer(), - EndContainer(), EndContainer(), /* 'generate game' and 'load game' buttons */ @@ -1369,8 +1345,6 @@ struct NetworkLobbyWindow : public Window { this->SetWidgetDisabledState(WID_NL_JOIN, this->company == INVALID_COMPANY || GetLobbyCompanyInfo(this->company)->ai); /* Cannot start new company if there are too many. */ this->SetWidgetDisabledState(WID_NL_NEW, gi->companies_on >= gi->companies_max); - /* Cannot spectate if there are too many spectators. */ - this->SetWidgetDisabledState(WID_NL_SPECTATE, gi->spectators_on >= gi->spectators_max); this->vscroll->SetCount(gi->companies_on); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 25ce602f0a..e4e1de906b 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -820,7 +820,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate() Packet *p = new Packet(PACKET_SERVER_CONFIG_UPDATE); p->Send_uint8(_settings_client.network.max_companies); - p->Send_uint8(_settings_client.network.max_spectators); this->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; } @@ -890,9 +889,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet *p) } break; case COMPANY_SPECTATOR: // Spectator - if (NetworkSpectatorCount() >= _settings_client.network.max_spectators) { - return this->SendError(NETWORK_ERROR_FULL); - } break; default: // Join another company (companies 1-8 (index 0-7)) if (!Company::IsValidHumanID(playas)) { diff --git a/src/settings_type.h b/src/settings_type.h index ababe718b2..05833cdb0d 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -291,7 +291,6 @@ struct NetworkSettings { uint8 autoclean_novehicles; ///< remove companies with no vehicles after this many months uint8 max_companies; ///< maximum amount of companies uint8 max_clients; ///< maximum amount of clients - uint8 max_spectators; ///< maximum amount of spectators Year restart_game_year; ///< year the server restarts uint8 min_active_clients; ///< minimum amount of active clients to unpause the game bool reload_cfg; ///< reload the config file before restarting diff --git a/src/table/settings/network_settings.ini b/src/table/settings/network_settings.ini index 86f8aafc87..50e769c7ff 100644 --- a/src/table/settings/network_settings.ini +++ b/src/table/settings/network_settings.ini @@ -224,16 +224,6 @@ max = MAX_CLIENTS post_cb = [](auto) { UpdateClientConfigValues(); } cat = SC_BASIC -[SDTC_VAR] -var = network.max_spectators -type = SLE_UINT8 -flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY -def = 15 -min = 0 -max = MAX_CLIENTS -post_cb = [](auto) { UpdateClientConfigValues(); } -cat = SC_BASIC - [SDTC_VAR] var = network.restart_game_year type = SLE_INT32 diff --git a/src/widgets/network_widget.h b/src/widgets/network_widget.h index cef564e980..ea98912763 100644 --- a/src/widgets/network_widget.h +++ b/src/widgets/network_widget.h @@ -66,10 +66,6 @@ enum NetworkStartServerWidgets { WID_NSS_COMPANIES_BTND, ///< 'Max companies' downarrow. WID_NSS_COMPANIES_TXT, ///< 'Max companies' text. WID_NSS_COMPANIES_BTNU, ///< 'Max companies' uparrow. - WID_NSS_SPECTATORS_LABEL, ///< Label for 'max spectators'. - WID_NSS_SPECTATORS_BTND, ///< 'Max spectators' downarrow. - WID_NSS_SPECTATORS_TXT, ///< 'Max spectators' text. - WID_NSS_SPECTATORS_BTNU, ///< 'Max spectators' uparrow. WID_NSS_GENERATE_GAME, ///< New game button. WID_NSS_LOAD_GAME, ///< Load game button. From 580dd118cb322090e41791199f45e51c0e064bb4 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 10 Aug 2021 18:56:17 +0000 Subject: [PATCH 44/63] Update: Translations from eints --- src/lang/afrikaans.txt | 3 --- src/lang/arabic_egypt.txt | 3 --- src/lang/basque.txt | 3 --- src/lang/belarusian.txt | 3 --- src/lang/brazilian_portuguese.txt | 3 --- src/lang/bulgarian.txt | 3 --- src/lang/catalan.txt | 3 --- src/lang/croatian.txt | 3 --- src/lang/czech.txt | 3 --- src/lang/danish.txt | 3 --- src/lang/dutch.txt | 3 --- src/lang/english_AU.txt | 3 --- src/lang/english_US.txt | 3 --- src/lang/esperanto.txt | 3 --- src/lang/estonian.txt | 3 --- src/lang/faroese.txt | 3 --- src/lang/finnish.txt | 3 --- src/lang/french.txt | 3 --- src/lang/frisian.txt | 2 -- src/lang/gaelic.txt | 3 --- src/lang/galician.txt | 3 --- src/lang/german.txt | 3 --- src/lang/greek.txt | 3 --- src/lang/hebrew.txt | 3 --- src/lang/hungarian.txt | 3 --- src/lang/icelandic.txt | 3 --- src/lang/indonesian.txt | 3 --- src/lang/irish.txt | 3 --- src/lang/italian.txt | 3 --- src/lang/japanese.txt | 3 --- src/lang/korean.txt | 3 --- src/lang/latin.txt | 3 --- src/lang/latvian.txt | 3 --- src/lang/lithuanian.txt | 3 --- src/lang/luxembourgish.txt | 3 --- src/lang/malay.txt | 3 --- src/lang/norwegian_bokmal.txt | 3 --- src/lang/norwegian_nynorsk.txt | 3 --- src/lang/persian.txt | 3 --- src/lang/polish.txt | 3 --- src/lang/portuguese.txt | 3 --- src/lang/romanian.txt | 3 --- src/lang/russian.txt | 3 --- src/lang/serbian.txt | 3 --- src/lang/simplified_chinese.txt | 3 --- src/lang/slovak.txt | 3 --- src/lang/slovenian.txt | 3 --- src/lang/spanish.txt | 3 --- src/lang/spanish_MX.txt | 3 --- src/lang/swedish.txt | 3 --- src/lang/tamil.txt | 3 --- src/lang/thai.txt | 3 --- src/lang/traditional_chinese.txt | 3 --- src/lang/turkish.txt | 3 --- src/lang/ukrainian.txt | 3 --- src/lang/urdu.txt | 3 --- src/lang/vietnamese.txt | 3 --- src/lang/welsh.txt | 3 --- 58 files changed, 173 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 621735ed6c..88feaaf5de 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1977,9 +1977,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies die STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} Maatskap{P py pye} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maksimum aantal maatskappye: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Beperk die verskaffer na 'n sekere bedrag van maatskappye -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} aanskouer{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maksimum aantal toekouers: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Beperk die verskaffer na 'n sekere bedrag van aanskouers STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Taal gepraat: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Ander spelers sal weet watter taal op die verskaffer gepraat is diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 825aa40d23..73cdc9aefe 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1673,9 +1673,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}أختر STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM}شركة STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}أقصى عدد شركات: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}حدد العدد الاقصى للشركات في هذا الخادم -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM}مشاهد -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}أقصى عدد مشاهدين: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}حدد عدد المشاهدين لهذا الخادم STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}اللغة المتحدثة: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}اللاعبين الآخرين سيعرفون اللغة المتحدثة diff --git a/src/lang/basque.txt b/src/lang/basque.txt index bfdce18047..f8227a53bf 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1852,9 +1852,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Gehienez STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} konpainia STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Gehienezko konpainia kopurua: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Zerbitzaria konpainia kupuru zehatz batera mugatu -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} ikusle -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Gehienezko ikusle kopurua: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Zerbitzaria ikusle kupuru zehatz batera mugatu STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Hitzegiten den hizkuntza: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Beste jokalariek erabiltzen ari den hizkuntza ezagutu ahalko dute diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index ddbd1852c5..d86e12b47c 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2287,9 +2287,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Выба STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} кампанi{P я i яў} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Макс. колькасьць кампанiяў: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Абмежаваць максымальную колькасьць кампаніяў на сэрвэры -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} назіральнік{P "" i аў} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Макс. назіральнiкаў: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Абмежаваць максымальную колькасьць назіральнікаў на сэрвэры STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Мова зносінаў: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Іншыя гульцы будуць ведаць, на якой мове размаўляюць на сэрвэры diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 989dfbc629..4b8cd7940f 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2080,9 +2080,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Escolha STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} empresa{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Núm máx de empresas: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limita o servidor para uma certa quantia de empresas -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} espectador{P "" es} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Núm máx de espectadores: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limita o servidor para um certa quantia de espectadores STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Idioma falado: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Outros jogadores saberão o idioma utilizado no servidor. diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 75d91f36e4..b553e907fa 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1898,9 +1898,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Избо STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} компани{P а ий} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Макс. брой компании: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Ограничаване на играта до определен брой компании -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} зрител{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Макс. брой наблюдатели: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Ограничаване на сървъра до определен брой наблюдатели STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Говорим език: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Другите играчи ще знаят езика на който се говори на сървъра diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index efe1f75384..3700b7e2e7 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2080,9 +2080,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Tria el STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} companyi{P a es} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Màxim nombre de companyies: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limita el servidor a un cert nombre de companyies -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} espectador{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Màxim nombre d'espectadors: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limita el servidor a un cert nombre d'espectadors STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Idioma parlat: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Els altres jugadors sabran quin idioma es parla en aquest servidor. diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 133f4e9476..ee703ab1e6 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2082,9 +2082,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Odaberi STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} tvrtk{P a e i} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Najveći broj tvrtki: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Ograniči poslužitelj na određeni broj tvrtki -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} gledatelj{P "" a a} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Najveći broj promatrača: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Ograniči poslužitelj na određeni broj gledatelja STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Jezik kojim se govori: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Drugi igrači znat će kojim se jezikom govori na poslužitelju diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 05ef9cbb90..4478cb0af3 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2139,9 +2139,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Zvol nej STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} společnost{P "" i í} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximální počet společností: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Omezit serverem počet společností -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} pozorovatel{P "" é ů} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximální počet pozorovatelů: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Omezit serverem pocet pozorovatelů STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Jazyk ve hře: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aby ostatní hráči věděli, jakým jazykem se bude ve hře mluvit diff --git a/src/lang/danish.txt b/src/lang/danish.txt index ffd56f01ce..55b6281cad 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1991,9 +1991,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vælg de STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} selskab{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maks. selskaber: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begræns serveren til et bestemt antal selskaber -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} tilskuer{P "" e} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maks. tilskuere: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Begræns serveren til et bestemt antal tilskurere STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Talt sprog: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andre spillere vil vide hvilket sprog, der bliver talt på serveren diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index f245619f35..554693df7f 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2079,9 +2079,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies het STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} bedr{P ijf ijven} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximumaantal bedrijven: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Beperk de server tot een bepaald aantal bedrijven -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} toeschouwer{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximumaantal toeschouwers: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Beperk de server tot een bepaald aantal toeschouwers STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Gesproken taal: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andere spelers zullen weten welke taal er wordt gesproken op de server diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index d74b1df309..fe1ac894f0 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1908,9 +1908,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choose t STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} compan{P y ies} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximum number of companies: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limit the server to a certain amount of companies -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} spectator{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximum number of spectators: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limit the server to a certain amount of spectators STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Language spoken: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Other players will know which language is spoken on the server diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 58d3cab5a7..a12f9bf380 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2079,9 +2079,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choose t STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} compan{P y ies} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximum number of companies: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limit the server to a certain number of companies -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} spectator{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximum number of spectators: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limit the server to a certain number of spectators STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Language spoken: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Other players will know which language is spoken on the server diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 252cf552bb..29487c4638 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1592,9 +1592,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Elektu k STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} kompanio{P "" j} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Kompania maksimumo: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limu la servilon al certa kvanto da kompanioj -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} spektanto{P "" j} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maksimumo spektanta: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limigu la servilon al certa kvanto da spektantoj STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Parolata lingvo: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aliaj ludantoj scios kiu lingvo paroliĝas en la servilo diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 94e5bb93c1..026dcf66a5 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2119,9 +2119,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Määrab STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} ettevõte{P "" t} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Ettevõtteid kuni: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Piirab serveris olevate ettevõtete arvu -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} vaatleja{P "" t} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Vaatlejaid kuni: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Piirab serveris olevate vaatlejate arvu STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Suhtluskeel: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Teavitab teisi mängijaid, mis keeles serveris rääkida diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 2da804c44b..58b7ffcdaf 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1758,9 +1758,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vel mest STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} fyritøk{P a ur} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Mest loyvdar fyritøkur: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Avmarka nøgdina av fyritøkum á servaranum -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} eygleiðar{P i ar} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Mest loyvdir eygjleiðarar: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Avmarka nøgdina av eygleiðarum á servaranum STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Tungumál: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aðrir spælarir kunnu síggja hvat mál verður tosa á servaranum diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 1c41a7035c..5c212eac23 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2079,9 +2079,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pelaajie STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} yhtiö{P "" tä} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Yhtiöiden enimmäismäärä: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Rajoita yhtiöiden määrää palvelimella -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} katsoja{P "" a} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Katsojien enimmäismäärä: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Rajoita katsojien määrää palvelimella STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Puhuttu kieli: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Toiset pelaajat tietävät tästä, mitä kieltä palvelimella puhutaan diff --git a/src/lang/french.txt b/src/lang/french.txt index bf19dd93f3..ccce8c29b8 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2080,9 +2080,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choisir STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} compagnie{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Nombre de compagnies maximum{NBSP}: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limiter le serveur à un certain nombre de compagnies -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} spectateur{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Nombre de spectateurs maximum{NBSP}: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limiter le serveur à un certain nombre de spectateurs STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Langue utilisée{NBSP}: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Les autres joueurs sauront quelle langue est parlée sur ce serveur diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 39f23fb296..74f7ce4c07 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1843,8 +1843,6 @@ STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} kl STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimaal oantal kliïnten: STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} bedriuw{P "" en} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maksimaal tal bedriuwen: -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} taskôger{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maksimaal tal taskôgers: STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Sprutsen taal: STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Fier in namme yn foar it networkspul diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index c4402c96c0..f8c4de288f 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2143,9 +2143,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Tagh an STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} {P chompanaidh chompanaidh companaidhean companaidh} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Companaidhean air a char as motha: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Cuingich am frithealaiche gu àireamh shònraichte dhe chompanaidhean -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} {P amharcaiche amharcaiche amharcaichean amharcaiche} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Amharcaichean air a char as motha: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Cuingich co mheud duine a dh'fhaodas sealltainn air geamannan air an fhrithealaiche STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Cànan a tha ga bhruidhinn: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Bidh fios aig cluicheadairean eile dè an cànan a tha ga bruidhinn air an fhrithealaiche diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 4c50913f3c..137509d040 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1979,9 +1979,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Escolle STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} compañía{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Número máx. de compañías: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limita-lo servidor a unha certa cantidade de compañías -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} espectador{P "" es} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Número máx. de espectadores: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limita-lo servidor a unha certa cantidade de espectadores STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Idioma falado: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Outros xogadores saberán cal é o idioma que se fala no servidor diff --git a/src/lang/german.txt b/src/lang/german.txt index 340aa8e6da..fc18077c89 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2080,9 +2080,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Auswahl STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} Firm{P a en} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximale Firmenanzahl: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begrenzt den Server auf eine bestimmte Anzahl an Firmen -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} Zuschauer -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximale Zuschaueranzahl: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Begrenzt den Server auf eine gewisse Anzahl an Zuschauern STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Gesprochene Sprache: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Damit andere Spieler wissen, welche Sprache auf diesem Server gesprochen wird diff --git a/src/lang/greek.txt b/src/lang/greek.txt index a38205df25..5c57edeb90 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2100,9 +2100,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Επιλ STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} εταιρεί{P α ες} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Μέγιστος αριθμός εταιριών: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Περιορισμός του διακομιστή σε συγκεκριμένο αριθμό εταιρειών -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} θεατ{P ής ές} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Μέγιστος αριθμός θεατών: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Περιορισμός του διακομιστή σε συγκεκριμένο αριθμό θεατών STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Ομιλούμενη γλώσσα: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Οι υπόλοιποι παίκτες θα γνωρίζουν ποια γλώσσα ομιλείται στον διακομιστή diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 8bc76c9e88..a06b8f73eb 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1957,9 +1957,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK} :מספ STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} חבר{P "ה" "ות"} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}מספר מקסימלי של חברות: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}הגבל את השרת למספר מסויים של חברות -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} צופ{P "ה" "ים"} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}מספר צופים מירבי: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}הגבלת השרת למספר צופים מסויים STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}שפת דיבור: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}שחקנים אחרים ידעו איו שפה מדוברת בשרת diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 163085433b..f1ea7283f9 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2124,9 +2124,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}A maxim STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} vállalat STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Max. vállalatszám: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}A vállalatok maximális száma a szerveren -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} megfigyelő -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Max. megfigyelő: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}A megfigyelők maximális száma a szerveren STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Beszélt nyelv: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}A többi játékos megtudhatja milyen nyelven beszélnek a szerveren diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 46c8c44f14..4d08869dbc 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1796,9 +1796,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Veldu h STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} Fyrirtæki STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Hámarksfjöldi fyrirtækja: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Takmarka fjölda fyrirtækja á vefþjóni -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} áhorf{P andi endur} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Hámarksfjöldi áhorfanda: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Takmarka fjölda áhorfanda á vefþjóninum STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Tungumál: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aðrir notendur munu vita hvaða tungumál er talað á þjóninum diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index e38e8eb5c5..8c5fdca55d 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -2060,9 +2060,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pilih ju STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} Perusahaan STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maksimum jumlah perusahaan: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Batasi jumlah perusahaan pada server -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} Penonton -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maksimum jumlah penonton: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Batasi jumlah penonton pada server STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Bahasa pembicaraan: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Agar pemain lain mengetahui bahasa apa yang digunakan pada sever diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 9d31feafe0..25738aeffb 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1931,9 +1931,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Roghnaig STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} {P ch ch ch gc c}uideachta STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Uaslíon na gcuideachtaí: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Déan an freastalaí a theorannú go líon áirithe cuideachtaí -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} féachadóir{P "" í í í í} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Uaslíon na bhféachóirí: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Déan an freastalaí a theorannú go líon áirithe féachadóirí STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}An teanga a labhraítear: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Beidh a fhios ag imreoirí eile cén teanga a labhraítear ar an bhfreastalaí diff --git a/src/lang/italian.txt b/src/lang/italian.txt index ab78589e49..fe7f9810d0 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2072,9 +2072,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Imposta STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} compagni{P a e} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Limite compagnie: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limita il server a un certo numero di compagnie -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} spettator{P e i} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Limite spettatori: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limita il server a un certo numero di spettatori STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Lingua parlata: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Fa sapere agli altri giocatori quale lingua è parlata sul server diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index ac531f9a8e..9b577dd5f2 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -2061,9 +2061,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}接続 STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}会社数: {NUM} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}最大会社数: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}このサーバーでの最大会社数を指定します -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}観覧者数: {NUM} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}最高観覧者数: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}このサーバーでの最大観覧者数を指定します STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}言語: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}このサーバーで使われる主言語を表示します diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 966114eba7..a49534fb00 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2080,9 +2080,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}최대 STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM}개 STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}최대 회사수: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}서버의 회사의 수를 제한합니다 -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM}명 -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}최대 관전자수: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}게임을 관전하는 접속자의 수를 제한합니다 STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}대화 언어: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}서버에서 주로 사용하는 언어를 고르십시오 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index a9cfafa319..e95558cfff 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2150,9 +2150,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Eligere STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} societa{P s tes} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Societates maximae: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Eligere numerum maximum societatum -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} spectator{P "" es} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Spectatores maximi: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Eligere numerum maximum spectatorum STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Lingua adhibita: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Lingua in servatro adhibita diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index c105cfe8d3..8b9c130a94 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2026,9 +2026,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Izvēlē STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} uzņēmum{P s i u} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maksimālais uzņēmumu skaits: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Ierobežo serveri noteiktam uzņēmumu skaitam -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} novērotāj{P s i u} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maksimālais novērotāju skaits: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Ierobežo serveri noteiktam novērotāju skaitam STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Valoda, kurā runā: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Citi lietotāji zinās, kurā valodā tiek runāts uz servera diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 6b6b9040a6..834d878b3e 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2270,9 +2270,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pasirink STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} kompanij{P a os ų} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Daugiausia kompanijų: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Riboti serverį iki tam tikro skaičiaus kompanijų -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} stebėtoj{P as ai ų} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Daugiausia žiurovų: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Riboti serverį iki tam tikro skaičiaus žiurovų STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Kalba: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Kiti žaidėjai žinos kokia kalba kalbama serveryje diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index ba2fbd623a..3a11afe8e9 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2051,9 +2051,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Maximal STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} Firm{P a en} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximal Firmen: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}D'Unzuel vun de Firme limitéieren -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} Zuschauer -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximal Zuschauer: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}D'Unzuel vun den Zuschauer limitéiren STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Geschwate Sprooch: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aner Leit gesinn wéieng Sprooch um Server geschwat gëtt diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 7dc822dc14..71f6bc24ed 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1693,9 +1693,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Tentukan STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} syarikat STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Amaun maksimum syarikat: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Hadkan bilangan syarikat dalam pelayan -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} penyaksi -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Amaun maxsimum penyaksi: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Hadkan bilangan penyaksi dalam pelayan STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Bahasa yang digunakan: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Pemain lain akan tahu bahasa apa yang digunakan di pelayan ini diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 900e89f74b..e46d49fe56 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2083,9 +2083,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Velg mak STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} firma{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maks antall firmaer: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begrens tjeneren til et bestemt antall firmaer -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} tilskuer{P "" e} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maks antall tilskuere: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Begrens tjeneren til et bestemt antall tilskuere STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Språk de snakker på tjeneren: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andre spillere skal kunne vite hvilket språk man snakker på denne tjeneren diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index ed3c411483..642b313602 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1855,9 +1855,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vel maks STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} firma STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maks. antal firma: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begrens tenaren til eit visst antal firma -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} tilskodar{P "" ar} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maks. antal tilskodarar: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Begrens tenaren til eit visst antal tilskodarar STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Språk som vert tala på tenaren: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andre spelarar skal vete kva språk ein talar på denne tenaren diff --git a/src/lang/persian.txt b/src/lang/persian.txt index d9380d0809..da7b3b0fad 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1653,9 +1653,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}بیشت STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} شرک{P ت تها} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}بیشترین تعداد شرکت ها: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}محدود کردن سرویس دهنده به داشتن تعداد مشخصی شرکت -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} تماشاگر{P "" ها} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}بیشترین تعداد تماشاگر: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}محدود کردن سرویس دهنده به داشتن تعداد مشخصی تماشاگر STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}زبان گفتگو: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}دیگر بازیگران می فهمند که با چه زبانی در این سرویس دهنده گفتگو می شود diff --git a/src/lang/polish.txt b/src/lang/polish.txt index fb3c367f09..f26eeb68b0 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2459,9 +2459,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Ustaw ma STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} firm{P a y ""} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maksymalna liczba firm: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Ogranicz serwer do określonej ilości firm -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} widz{P "" ów ów} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maksymalna liczba widzów: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Ogranicz serwer do określonej ilości widzów STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Używany język: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Inni gracze będą poinformowani jaki język jest używany na serwerze diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 77f31a1a2d..ff1202f1e6 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2080,9 +2080,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Escolha STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} empresa{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Máximo de empresas: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitar o servidor a um certo número de empresas -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} espectador{P "" es} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Máximo de espectadores: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limitar o servidor a um certo número de espectadores STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Idioma falado: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Outros jogadores ficarão a conhecer o idioma utilizado no servidor. diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index b4866661a4..f42454072e 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2030,9 +2030,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Alege un STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} {P companie companii "de companii"} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Companii maxim: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitează serverul la un anumit număr de companii -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} {P spectator spectatori "de spectatori"} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Spectatori maxim: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limitează serverul la un anumit număr de spectatori STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Limba vorbită: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Ceilalţi jucători vor şti în ce limbă se discută pe server. diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 25b8193175..081df3aee8 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2230,9 +2230,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Выбо STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} компани{P я и й} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Макс. количество компаний: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Ограничить максимальное количество компаний на сервере -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} зрител{P ь я ей} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Макс. количество зрителей: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Ограничить максимальное количество зрителей на сервере STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Язык общения: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Другие игроки будут знать, на каком языке общаются на сервере diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 70de9a382e..3e28df0606 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2246,9 +2246,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Odaberit STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} preduzeć{P e a a} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Najviše preduzeća: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Odaberite koliko najviše može biti preduzeća na serveru -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} posmatrač{P "" a a} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Najviše posmatrača: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Odaberite koliko najviše može biti posmatrača na serveru STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Govorni jezik: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Drugi igrači će znati sa kojim jezikom se razgovara na serveru diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 0322eb153d..9cb0b33bfb 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2056,9 +2056,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}选择 STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} 公司 STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}公司数量: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}限制服务器上可以创建的公司数量 -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} 观众 -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}旁观人数: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}限制服务器上旁观者的数量 STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}语言选项: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}其他玩家可以知道服务器的官方语言 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 9b62e85010..39b0bd4d82 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2147,9 +2147,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Zvoľ ma STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} spoločnost{P "" i í} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximálny počet spoločností: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Obmedzenie servera na maximálny počet spoločností -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} pozorovate{P "ľ" lia ľov} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximálny počet divákov: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Obmedzenie servera na maximálny počet divákov STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Jazyk, ktorým sa hovorí: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aby ostatní hráči vedeli, akým jazykom sa bude hovoriť na serveri. diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index aedf5fe305..927db5d3c8 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2087,9 +2087,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Izberite STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} podjet{P je ji ja ij} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Dovoljeno število podjetij: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Omeji strežnik na določeno število podjetij -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} opazoval{P ec ca ci cev} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Največje število opazovalcev: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Omeji strežnik na določeno število opazovalcev STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Govorni jezik: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Drugi igralci bodo lahko vedeli, kateri jezik se govori na strežniku diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index f22e14c8a6..9bb2c41627 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2070,9 +2070,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Seleccio STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} empresa{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Número máximo de empresas: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limita el número de empresas en el servidor -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} espectador{P "" es} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Número máximo de espectadores: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limita el numero de observadores en el servidor STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Idioma hablado: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Los otros jugadores sabrán qué idioma se habla en este servidor diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 2ae1eb9bc6..cf7280bad0 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2080,9 +2080,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Elegir e STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} empresa{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Número máximo de empresas: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitar el servidor a un cierto número de empresas -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} espectador{P "" es} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Número máximo de espectadores: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limitar el servidor a un cierto número de espectadores STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Idioma: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Otros jugadores sabrán qué idioma se utiliza en este servidor diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index aebfa84929..285a7557bd 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2077,9 +2077,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Välj ma STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} företag{P y ies} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Max antal företag: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begränsa antalet företag på servern -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} åskådare -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Max antal åskådare: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Begränsa antalet åskådare på servern STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Språk som talas: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andra spelare kommer vara medvetna vilket språk som talas på servern. diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 12a65efe50..aba48dd837 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1797,9 +1797,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}வா STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} நிறுவன{P ம் ங்கள்} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}அதிகபட்ச நிறுவனங்கள்: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}சர்வர்கு குறிப்பிட்ட அளவு நிறுவனங்களை மட்டுமே அனுமதி -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} பார்வையாளர்{P "" கள்} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}அதிகபட்ச பார்வையாளர்கள்: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}சர்வரிற்கு குறிப்பிட்ட அளவு பார்வையாளர்களை மட்டுமே அனுமதி STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}பேசப்படும் மொழிகள்: STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}இணைய ஆட்டத்திற்கு ஒரு பெயரினை இடு diff --git a/src/lang/thai.txt b/src/lang/thai.txt index fb2407a604..17f01e7b4d 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1882,9 +1882,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}เล STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} บริษัท STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}จำนวนบริษัทสูงสุด: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}จำกัดจำนวนบริษัทที่อยู่ในเซิร์ฟเวอร์ -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} ผู้ชม -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}ผู้ชมสูงสุด: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}จำกัดจำนวนผู้ชมที่อยู่ในเซิร์ฟเวอร์ STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}ภาษาที่ใช้พูดคุย: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}ผู้เล่นทุกคนจะสามารถทราบถึงภาษาที่ใช้พูดคุยในเซิร์ฟเวอร์นี้ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 774bf69107..7484d4e823 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1945,9 +1945,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}選擇 STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} 公司 STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}公司上限: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}限制伺服器可以建立的公司數量 -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM}旁觀者 -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}旁觀者上限: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}限制可加入的旁觀者數量 STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}溝通語言: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}讓其他人知道這個伺服器使用的溝通語言 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index a71994cde6..0d0b5ae030 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2061,9 +2061,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}İzin ve STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} şirket STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}En fazla şirket sayısı: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Sunucudaki şirket sayısını sınırla -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} seyirci -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}En fazla izleyici sayısı: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Sunucudaki izleyici sayısını sınırla STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Konuşulan dil: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Diğer oyuncular sunucuda hangi dilin konuşulacağını bilecek diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 24258e9c60..1573b0ab17 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2179,9 +2179,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Вибе STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} компані{P я ї й} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Максимум компаній: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Обмежує кількість компаній на сервері -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} спостерігач{P "" і ів} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Максимум глядачів: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Обмежує кількість глядачів на сервері STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Мова: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Інші гравці будуть знати якою мовою спілкуються на сервері diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index c5e5656a58..16624ee692 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1544,9 +1544,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}زیاد STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} کمپنی{P "" اں} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}زیادہ سے زیادہ کمپنیاں: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}سرور پر کمپنیوں کی زیادہ سے زیادہ تعداد مقرر کریں -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} ناظر{P "" ین} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}زیادہ سے زیادہ ناظرین -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}سرور پس زیادہ سے زیادہ ناظرین کی تعداد مقرر کریں STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}بولی گئی زبان: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}دوسرے کھلاڑی سرور پر بولی جانے والی زبان کے بادے میں جان سکیں گے diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 76d1fe5f1a..043ceafd25 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2079,9 +2079,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Chọn s STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} công ty STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Số công ty tối đa: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Giới hạn số công ty trong server -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} người khán giả -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Số người xem tối đa: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Giới hạn số người xem trong server STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Ngôn ngữ trò chuyện: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Những người chơi sẽ biết ngôn ngữ dùng để trao đổi trong server diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 8618eddcdd..7ccf26c2ef 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1939,9 +1939,6 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Dewiswch STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} cwmni STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Uchafswm nifer cwmnïau: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}rhoi cyfyngiad penodol ar sawl cwmni mae'r gweinydd yn ei ganiatáu -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} gwyliwr -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Uchafswm nifer gwylwyr: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}rhoi cyfyngiad penodol ar sawl gwyliwr mae'r gweinydd yn ei ganiatáu STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Iaith i'w siarad: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Rhoi gwybod i'r chwaraewyr pa iaith y dylid ei siarad ar y gweinydd From b14681891dce4b0060308d6a477a22c4f0b77edd Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Tue, 10 Aug 2021 21:09:35 +0200 Subject: [PATCH 45/63] Fix 8706dcd9: [Script] Byte-swap grfids to match normal expectations. --- src/script/api/script_newgrf.cpp | 8 +++++++- src/script/api/script_newgrf.hpp | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/script/api/script_newgrf.cpp b/src/script/api/script_newgrf.cpp index 387093092d..9cdeeb1914 100644 --- a/src/script/api/script_newgrf.cpp +++ b/src/script/api/script_newgrf.cpp @@ -19,13 +19,15 @@ ScriptNewGRFList::ScriptNewGRFList() { for (auto c = _grfconfig; c != nullptr; c = c->next) { if (!HasBit(c->flags, GCF_STATIC)) { - this->AddItem(c->ident.grfid); + this->AddItem(BSWAP32(c->ident.grfid)); } } } /* static */ bool ScriptNewGRF::IsLoaded(uint32 grfid) { + grfid = BSWAP32(grfid); // Match people's expectations. + for (auto c = _grfconfig; c != nullptr; c = c->next) { if (!HasBit(c->flags, GCF_STATIC) && c->ident.grfid == grfid) { return true; @@ -37,6 +39,8 @@ ScriptNewGRFList::ScriptNewGRFList() /* static */ uint32 ScriptNewGRF::GetVersion(uint32 grfid) { + grfid = BSWAP32(grfid); // Match people's expectations. + for (auto c = _grfconfig; c != nullptr; c = c->next) { if (!HasBit(c->flags, GCF_STATIC) && c->ident.grfid == grfid) { return c->version; @@ -48,6 +52,8 @@ ScriptNewGRFList::ScriptNewGRFList() /* static */ char *ScriptNewGRF::GetName(uint32 grfid) { + grfid = BSWAP32(grfid); // Match people's expectations. + for (auto c = _grfconfig; c != nullptr; c = c->next) { if (!HasBit(c->flags, GCF_STATIC) && c->ident.grfid == grfid) { return ::stredup(c->GetName()); diff --git a/src/script/api/script_newgrf.hpp b/src/script/api/script_newgrf.hpp index 73f870cc10..d1a9336ecc 100644 --- a/src/script/api/script_newgrf.hpp +++ b/src/script/api/script_newgrf.hpp @@ -45,7 +45,7 @@ public: static uint32 GetVersion(uint32 grfid); /** - * Get the BridgeID of a bridge at a given tile. + * Get the name of a loaded NewGRF. * @param grfid The NewGRF to query. * @pre ScriptNewGRF::IsLoaded(grfid). * @return The name of the NewGRF or nullptr if no name is defined. From 76b83437775ccae7e722fc41d7e4564b64188776 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Wed, 11 Aug 2021 18:21:34 +0100 Subject: [PATCH 46/63] Fix #9392: Return a valid value with GetBuildWithRefitCapacity when AIs are maxed out in vehicles (#9393) --- src/vehicle_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 499b3b3ebd..f3e0a99b8b 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -124,7 +124,7 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint /* Check whether we can allocate a unit number. Autoreplace does not allocate * an unit number as it will (always) reuse the one of the replaced vehicle * and (train) wagons don't have an unit number in any scenario. */ - UnitID unit_num = (flags & DC_AUTOREPLACE || (type == VEH_TRAIN && e->u.rail.railveh_type == RAILVEH_WAGON)) ? 0 : GetFreeUnitNumber(type); + UnitID unit_num = (flags & DC_QUERY_COST || flags & DC_AUTOREPLACE || (type == VEH_TRAIN && e->u.rail.railveh_type == RAILVEH_WAGON)) ? 0 : GetFreeUnitNumber(type); if (unit_num == UINT16_MAX) return_cmd_error(STR_ERROR_TOO_MANY_VEHICLES_IN_GAME); /* If we are refitting we need to temporarily purchase the vehicle to be able to From 26f7f592cd0d93ec79aa2bbfd0a435c4465b95cc Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Wed, 11 Aug 2021 18:25:59 +0100 Subject: [PATCH 47/63] Fix #8316: Make sort industries by production and transported with a cargo filter possible (#8468) --- src/industry_gui.cpp | 96 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 75 insertions(+), 21 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index d3e3d2a161..69462c6f06 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1309,7 +1309,7 @@ protected: /* Runtime saved values */ static Listing last_sorting; - /* Constants for sorting stations */ + /* Constants for sorting industries */ static const StringID sorter_names[]; static GUIIndustryList::SortFunction * const sorter_funcs[]; @@ -1320,6 +1320,14 @@ protected: StringID cargo_filter_texts[NUM_CARGO + 3]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID byte produced_cargo_filter_criteria; ///< Selected produced cargo filter index byte accepted_cargo_filter_criteria; ///< Selected accepted cargo filter index + static CargoID produced_cargo_filter; + + enum class SorterType : uint8 { + IDW_SORT_BY_NAME, ///< Sorter type to sort by name + IDW_SORT_BY_TYPE, ///< Sorter type to sort by type + IDW_SORT_BY_PRODUCTION, ///< Sorter type to sort by production amount + IDW_SORT_BY_TRANSPORTED, ///< Sorter type to sort by transported percentage + }; /** * Set cargo filter list item index. @@ -1409,6 +1417,8 @@ protected: this->cargo_filter[this->produced_cargo_filter_criteria]); this->industries.Filter(filter); + + IndustryDirectoryWindow::produced_cargo_filter = this->cargo_filter[this->produced_cargo_filter_criteria]; this->industries.Sort(); this->vscroll->SetCount((uint)this->industries.size()); // Update scrollbar as well. @@ -1427,7 +1437,7 @@ protected: { assert(id < lengthof(i->produced_cargo)); - if (i->produced_cargo[id] == CT_INVALID) return 101; + if (i->produced_cargo[id] == CT_INVALID) return -1; return ToPercent8(i->last_month_pct_transported[id]); } @@ -1440,12 +1450,27 @@ protected: */ static int GetCargoTransportedSortValue(const Industry *i) { - int p1 = GetCargoTransportedPercentsIfValid(i, 0); - int p2 = GetCargoTransportedPercentsIfValid(i, 1); + CargoID filter = IndustryDirectoryWindow::produced_cargo_filter; + if (filter == CF_NONE) return 0; - if (p1 > p2) Swap(p1, p2); // lower value has higher priority + int percentage = 0, produced_cargo_count = 0; + for (uint id = 0; id < lengthof(i->produced_cargo); id++) { + if (filter == CF_ANY) { + int transported = GetCargoTransportedPercentsIfValid(i, id); + if (transported != -1) { + produced_cargo_count++; + percentage += transported; + } + if (produced_cargo_count == 0 && id == lengthof(i->produced_cargo) - 1 && percentage == 0) { + return transported; + } + } else if (filter == i->produced_cargo[id]) { + return GetCargoTransportedPercentsIfValid(i, id); + } + } - return (p1 << 8) + p2; + if (produced_cargo_count == 0) return percentage; + return percentage / produced_cargo_count; } /** Sort industries by name */ @@ -1470,10 +1495,18 @@ protected: /** Sort industries by production and name */ static bool IndustryProductionSorter(const Industry * const &a, const Industry * const &b) { + CargoID filter = IndustryDirectoryWindow::produced_cargo_filter; + if (filter == CF_NONE) return IndustryTypeSorter(a, b); + uint prod_a = 0, prod_b = 0; for (uint i = 0; i < lengthof(a->produced_cargo); i++) { - if (a->produced_cargo[i] != CT_INVALID) prod_a += a->last_month_production[i]; - if (b->produced_cargo[i] != CT_INVALID) prod_b += b->last_month_production[i]; + if (filter == CF_ANY) { + if (a->produced_cargo[i] != CT_INVALID) prod_a += a->last_month_production[i]; + if (b->produced_cargo[i] != CT_INVALID) prod_b += b->last_month_production[i]; + } else { + if (a->produced_cargo[i] == filter) prod_a += a->last_month_production[i]; + if (b->produced_cargo[i] == filter) prod_b += b->last_month_production[i]; + } } int r = prod_a - prod_b; @@ -1504,26 +1537,45 @@ protected: GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_DIR, i, i->type, indsp, i->produced_cargo, cargo_suffix); /* Get industry productions (CargoID, production, suffix, transported) */ - typedef std::tuple CargoInfo; + struct CargoInfo { + CargoID cargo_id; + uint16 production; + const char *suffix; + uint transported; + }; std::vector cargos; for (byte j = 0; j < lengthof(i->produced_cargo); j++) { if (i->produced_cargo[j] == CT_INVALID) continue; - cargos.emplace_back(i->produced_cargo[j], i->last_month_production[j], cargo_suffix[j].text, ToPercent8(i->last_month_pct_transported[j])); + cargos.push_back({ i->produced_cargo[j], i->last_month_production[j], cargo_suffix[j].text, ToPercent8(i->last_month_pct_transported[j]) }); } - /* Sort by descending production, then descending transported */ - std::sort(cargos.begin(), cargos.end(), [](const CargoInfo a, const CargoInfo b) { - if (std::get<1>(a) != std::get<1>(b)) return std::get<1>(a) > std::get<1>(b); - return std::get<3>(a) > std::get<3>(b); - }); + switch (static_cast(this->industries.SortType())) { + case IndustryDirectoryWindow::SorterType::IDW_SORT_BY_NAME: + case IndustryDirectoryWindow::SorterType::IDW_SORT_BY_TYPE: + case IndustryDirectoryWindow::SorterType::IDW_SORT_BY_PRODUCTION: + /* Sort by descending production, then descending transported */ + std::sort(cargos.begin(), cargos.end(), [](const CargoInfo &a, const CargoInfo &b) { + if (a.production != b.production) return a.production > b.production; + return a.transported > b.transported; + }); + break; + + case IndustryDirectoryWindow::SorterType::IDW_SORT_BY_TRANSPORTED: + /* Sort by descending transported, then descending production */ + std::sort(cargos.begin(), cargos.end(), [](const CargoInfo &a, const CargoInfo &b) { + if (a.transported != b.transported) return a.transported > b.transported; + return a.production > b.production; + }); + break; + } /* If the produced cargo filter is active then move the filtered cargo to the beginning of the list, * because this is the one the player interested in, and that way it is not hidden in the 'n' more cargos */ const CargoID cid = this->cargo_filter[this->produced_cargo_filter_criteria]; if (cid != CF_ANY && cid != CF_NONE) { - auto filtered_ci = std::find_if(cargos.begin(), cargos.end(), [cid](const CargoInfo& ci) -> bool { - return std::get<0>(ci) == cid; + auto filtered_ci = std::find_if(cargos.begin(), cargos.end(), [cid](const CargoInfo &ci) -> bool { + return ci.cargo_id == cid; }); if (filtered_ci != cargos.end()) { std::rotate(cargos.begin(), filtered_ci, filtered_ci + 1); @@ -1534,10 +1586,10 @@ protected: for (size_t j = 0; j < std::min(3, cargos.size()); j++) { CargoInfo ci = cargos[j]; SetDParam(p++, STR_INDUSTRY_DIRECTORY_ITEM_INFO); - SetDParam(p++, std::get<0>(ci)); - SetDParam(p++, std::get<1>(ci)); - SetDParamStr(p++, std::get<2>(ci)); - SetDParam(p++, std::get<3>(ci)); + SetDParam(p++, ci.cargo_id); + SetDParam(p++, ci.production); + SetDParamStr(p++, ci.suffix); + SetDParam(p++, ci.transported); } /* Undisplayed cargos if any */ @@ -1785,6 +1837,8 @@ const StringID IndustryDirectoryWindow::sorter_names[] = { INVALID_STRING_ID }; +CargoID IndustryDirectoryWindow::produced_cargo_filter = CF_ANY; + /** Window definition of the industry directory gui */ static WindowDesc _industry_directory_desc( From 120d216b0b7e3efe01cbc180e96e1ab11257c304 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Thu, 12 Aug 2021 20:29:03 +0100 Subject: [PATCH 48/63] Add: [AI] Get the number of vehicles in a given group (#9462) --- src/script/api/ai_changelog.hpp | 1 + src/script/api/script_group.cpp | 9 +++++++++ src/script/api/script_group.hpp | 14 ++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 15e1710275..6e32838203 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -20,6 +20,7 @@ * API additions: * \li AINewGRF * \li AINewGRFList + * \li AIGroup::GetNumVehicles * * \b 1.11.0 * diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index 0295c67aa7..a6e2fdee25 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -106,6 +106,15 @@ return GetGroupNumEngines(ScriptObject::GetCompany(), group_id, engine_id); } +/* static */ int32 ScriptGroup::GetNumVehicles(GroupID group_id, ScriptVehicle::VehicleType vehicle_type) +{ + bool valid_group = IsValidGroup(group_id); + if (!valid_group && group_id != GROUP_DEFAULT && group_id != GROUP_ALL) return -1; + if (!valid_group && (vehicle_type < ScriptVehicle::VT_RAIL || vehicle_type > ScriptVehicle::VT_AIR)) return -1; + + return GetGroupNumVehicle(ScriptObject::GetCompany(), group_id, valid_group ? ::Group::Get(group_id)->vehicle_type : (::VehicleType)vehicle_type); +} + /* static */ bool ScriptGroup::MoveVehicle(GroupID group_id, VehicleID vehicle_id) { EnforcePrecondition(false, IsValidGroup(group_id) || group_id == GROUP_DEFAULT); diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp index 2c27b81c6e..384fea7a28 100644 --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -128,6 +128,20 @@ public: */ static int32 GetNumEngines(GroupID group_id, EngineID engine_id); + /** + * Get the total number of vehicles in a given group and its sub-groups. + * @param group_id The group to get the number of vehicles in. + * @param vehicle_type The type of vehicle of the group. + * @pre IsValidGroup(group_id) || group_id == GROUP_ALL || group_id == GROUP_DEFAULT. + * @pre IsValidGroup(group_id) || vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || + * vehicle_type == ScriptVehicle::VT_WATER || vehicle_type == ScriptVehicle::VT_AIR + * @return The total number of vehicles in the group with id group_id and it's sub-groups. + * @note If the group is valid (neither GROUP_ALL nor GROUP_DEFAULT), the value of + * vehicle_type is retrieved from the group itself and not from the input value. + * But if the group is GROUP_ALL or GROUP_DEFAULT, then vehicle_type must be valid. + */ + static int32 GetNumVehicles(GroupID group_id, ScriptVehicle::VehicleType vehicle_type); + /** * Move a vehicle to a group. * @param group_id The group to move the vehicle to. From 65b8614d2640a0cfa5472689f5ddcb5fbefc06d2 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 14 Aug 2021 10:19:32 +0200 Subject: [PATCH 49/63] Add: mention you are a spectator in the status bar (if you are, ofc) (#9471) --- src/lang/english.txt | 2 ++ src/statusbar_gui.cpp | 14 +++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index eb7b7365bd..fb8c687e7c 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -783,6 +783,8 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * * +STR_STATUSBAR_SPECATOR :{WHITE}(spectator) + # News message history STR_MESSAGE_HISTORY :{WHITE}Message History STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}A list of the recent news messages diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 52b972086d..bbae48d64b 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -147,11 +147,15 @@ struct StatusBarWindow : Window { break; case WID_S_RIGHT: { - /* Draw company money, if any */ - const Company *c = Company::GetIfValid(_local_company); - if (c != nullptr) { - SetDParam(0, c->money); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_COMPANY_MONEY, TC_FROMSTRING, SA_HOR_CENTER); + if (_local_company == COMPANY_SPECTATOR) { + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_STATUSBAR_SPECATOR, TC_FROMSTRING, SA_HOR_CENTER); + } else { + /* Draw company money, if any */ + const Company *c = Company::GetIfValid(_local_company); + if (c != nullptr) { + SetDParam(0, c->money); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, text_top, STR_COMPANY_MONEY, TC_FROMSTRING, SA_HOR_CENTER); + } } break; } From 508e465b590c28113ceac472cb73112dbe58435a Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 14 Aug 2021 10:19:40 +0200 Subject: [PATCH 50/63] Add: synchronize server name to clients and display in Online Players GUI (#9472) --- src/network/network_client.cpp | 3 +++ src/network/network_gui.cpp | 19 ++++++++++--------- src/network/network_internal.h | 3 +++ src/network/network_server.cpp | 1 + 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 16fd31cfe7..a1a86c8de3 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -314,6 +314,8 @@ static std::string _password_server_id; /** Maximum number of companies of the currently joined server. */ static uint8 _network_server_max_companies; +/** The current name of the server you are on. */ +std::string _network_server_name; /** Information about the game to join to. */ NetworkJoinInfo _network_join; @@ -1187,6 +1189,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(P if (this->status < STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET; _network_server_max_companies = p->Recv_uint8(); + _network_server_name = p->Recv_string(NETWORK_NAME_LENGTH); return NETWORK_RECV_STATUS_OKAY; } diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 076b3d46ec..34e06712cf 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1601,14 +1601,14 @@ static const NWidgetPart _nested_client_list_widgets[] = { NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), - NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER, STR_NULL), SetPadding(4, 4, 0, 4), SetPIP(0, 2, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL), - NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), - EndContainer(), + NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER, STR_NULL), SetPadding(4, 4, 0, 4), SetPIP(0, 2, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_NAME, STR_NULL), + NWidget(NWID_SPACER), SetMinimalSize(10, 0), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_NAME), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), + EndContainer(), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY, STR_NULL), NWidget(NWID_SPACER), SetMinimalSize(10, 0), SetFill(1, 0), SetResize(1, 0), @@ -2017,6 +2017,7 @@ public: /* Currently server information is not sync'd to clients, so we cannot show it on clients. */ this->GetWidget(WID_CL_SERVER_SELECTOR)->SetDisplayedPlane(_network_server ? 0 : SZSP_HORIZONTAL); + this->SetWidgetDisabledState(WID_CL_SERVER_NAME_EDIT, !_network_server); } void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override @@ -2051,7 +2052,7 @@ public: { switch (widget) { case WID_CL_SERVER_NAME: - SetDParamStr(0, _settings_client.network.server_name); + SetDParamStr(0, _network_server ? _settings_client.network.server_name : _network_server_name); break; case WID_CL_SERVER_VISIBILITY: diff --git a/src/network/network_internal.h b/src/network/network_internal.h index 2c6639961d..5f04088f47 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -86,6 +86,9 @@ extern uint32 _network_join_bytes_total; extern ConnectionType _network_server_connection_type; extern std::string _network_server_invite_code; +/* Variable available for clients. */ +extern std::string _network_server_name; + extern uint8 _network_reconnect; extern CompanyMask _network_company_passworded; diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index e4e1de906b..c817acc900 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -820,6 +820,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate() Packet *p = new Packet(PACKET_SERVER_CONFIG_UPDATE); p->Send_uint8(_settings_client.network.max_companies); + p->Send_string(_settings_client.network.server_name); this->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; } From 132c540d58bc652320d8b56d870726ab8e90e8f1 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 14 Aug 2021 10:19:47 +0200 Subject: [PATCH 51/63] Fix: name the Online Players caption the same as in the menu (#9473) Referring to one window in two ways is a bit annoying. --- src/lang/english.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index fb8c687e7c..4f00d1a729 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2138,7 +2138,7 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Online players # Network client list -STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Multiplayer +STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Online Players STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Server STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Name STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Name of the server you are playing on From e599f6efb4b76767f51252a6c9af41ca3fb47f48 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 14 Aug 2021 13:07:02 +0200 Subject: [PATCH 52/63] Doc: Forwardport changelog & doc changes from 1.11 branch (#9476) --- changelog.txt | 108 +++++++++++++++++++++++++++++++++++++++++++++++++ known-bugs.txt | 4 +- 2 files changed, 110 insertions(+), 2 deletions(-) diff --git a/changelog.txt b/changelog.txt index bf75edde4f..b7d9da8250 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,111 @@ +1.11.2 (2021-05-03) +------------------------------------------------------------------------ +Change: [Win32] Limit hardware accelerated video driver to OpenGL 3.2 or higher (#9077) +Change: More improvements to the GUI at different scales (#9075, #9102, #9107, #9133, #9174, #9183) +Fix: Query windows could be partially drawn (#9184) +Fix #9113: Crash when removing an airport that exists in an aircraft's orders (#9182) +Fix #9117: [Fluidsynth] Hang when changing song (#9181) +Fix: String validation could leave invalid UTF-8 encoded strings (#9096) +Fix: [Network] Out-of-bounds memory access with modified servers sending too short password salts (#9176) +Fix: Crash when extra viewport with zero height has sign in view (#9175) +Fix #9147: Crash when taking screenshots (#9169) +Fix #6598: [Network] Prevent crashes when (re)joining network game by falling back to main menu first (#9163) +Fix #9152: Screenshot success popup window was treated as an error (#9159) +Fix: Fast-forward stuttering when vsync is enabled (#9140) +Fix: [Network, Win32] Network errors were handled badly (#9116) +Fix: [Network] Savegame transfer could stall in rare cases (#9106) +Fix #9097: [NewGRF] Cargo initial payment variable was being truncated (#9098) +Fix: [NewGRF] Industry variable 66 and object variable 46 erroneously truncated the distance (#9088) +Fix: [NewGRF] Industry variables 65 and 66 ignored the parameter, and always used the north tile (#9088) +Fix: Do not include regression test AI in bundle (#9068, #9164) +Fix #9062: [Win32] Version in executable was not set to current release version (#9066, #9154) + + +1.11.1 (2021-04-18) +------------------------------------------------------------------------ +Feature: Toggle to enable/disable vsync (#8997) +Feature: Volume controls in the Game Options window, and better defaults (#8943) +Add: Hotkey to focus object and rail filters (#8908) +Add: Better plural support for Romanian (#8936) +Change: Improve layout and spacing of several windows at different GUI scales (#9041, #9042, #9044, #9050) +Change: [Win32] Use user UI language setting for initial language selection (#8974) +Change: Make effect volume scale more intuitively (#8945, #8950) +Change: Improve padding of Object & Rail station windows (#8929) +Fix #6322: [Script] Crash when script allocates too much memory, now kills script instead (#9047) +Fix #7513: [Script] Crash on garbage collection with misbehaving script (#9040) +Fix #9028: [OpenGL] Crash when changing max sprite zoom level (#9032) +Fix #8874: show a warning when a NewGRF scan is requested multiple times (#9022) +Fix: Desync when GS unlocks railtype with wagon unlock (#9021) +Fix #9015: [Win32] Crash on running "pwd" command in the console (#9016) +Fix #9008: Validate starting year given on the command line (-t) (#9014) +Fix #8878: [Network] Slow DNS queries could block the server and disconnect clients (#9013) +Fix: Improve validation of OpenGL video driver to avoid crashes (#9007) +Fix: Credits scrolled too slowly with larger font sizes (#8994) +Fix #8977: Crash when altering max sprite resolution (#8993) +Fix #8956: Industry disaster news messages showed the wrong location (#8992) +Fix: [Win32] Font glyphs of certain widths had broken rendering (#8990) +Fix #8930: [Win32] Duplicate text input issue for systems using IME (#8976) +Fix: [Network] Potential stale client entries in client list (#8959) +Fix: Graphical issues when dragging measurement tooltips (#8951) +Fix: [Fluidsynth] Use provided default soundfont if available (#8948, #8953) +Fix #8935: [macOS] Crash on save (#8944) +Fix #8922: Crash when selling shared vehicles with shared vehicle window open (#8926) +Fix: Compiling on armhf (Raspberry Pi) (#8924) + + +1.11.0 (2021-04-01) +------------------------------------------------------------------------ +Feature: Allow setting a custom terrain type to define highest peak (#8891) +Feature: Auto-detect map height limit based on generated map (#8891) +Feature: Setting to indicate desert coverage for tropic climate and snow coverage for arctic climate (replaces snow line height) (#8891) +Add: Allow setting the highest mountain for heightmaps (#8891) +Change: Scale exported heightmaps to highest peak and inform the user of this value (#8891) +Change: Remove "maximum map height" from the New Game GUI (#8891) +Fix #8803: Only auto-remove signals when rail can be built (#8904) +Fix #8565: Stopped road vehicle displays a speed different than 0 (#8901) +Fix #8886: Don't try to resolve folders within tars named '.' (#8893) +Fix: Placing random trees in SE crashes the game (#8892) +Fix #8875: Filter string in station window breaks flow in user interface (#8885) +Fix #8871: [OpenGL] Initialize all buffers after resize and clear back buffer (#8877) +Fix: OpenGL performance with some AMD GPUs (#8876) +Fix: Recompute road/railtype availability after disabling the engine (#8872) +Fix: OSK layout not scaled for 2x or 4x GUI scale (#8868) + + +1.11.0-RC1 (2021-03-14) +------------------------------------------------------------------------ +Feature: Option to (dis-)allow hardware accelerated video drivers (#8819) +Feature: Option to set display refresh rate (#8813) +Feature: Allow custom width/height of screenshot and making heightmap screenshots via console (#8804) +Feature: Allow filtering on name in rail station window (#8706) +Feature: Setting for highest resolution of sprites to use (#8604) +Add: Make NewGRF Scanner / World Generation update smoother and make aborting it react faster (#8830) +Add: Malaysia Ringgit as Currency (#8783) +Add: "Engines only" filter in build train window (#8733) +Change: De-limit framerate window's framerate (#8772) +Change: Clarify what effect town interactions have (#8744) +Change: Don't show global goals in company goal windows (#8709) +Change: Recolour graph windows to brown (#8700) +Fix #8855: Bootstrap could result in an empty screen when bootstrap fails (#8856) +Fix #8851: Don't allow infinite "exec" depth in script, but limit to 10 deep (#8852) +Fix #8647: Incorrect drawing order of tram catenary sprites (#8843) +Fix #8711: Having gui_zoom lower than zoom_min causes a crash (#8835) +Fix #8810: "aircraft out of fuel" news shows the wrong place (#8832) +Fix #8833: Don't reload NewGRFs when we are shutting down (#8830) +Fix: Scale padding between elements the same as other padding (#8829) +Fix #8808: [OSX, OpenGL] Crash on switching blitters due to double-mapping the video buffer (#8822) +Fix #8784: Using Alt+Enter doesn't update the fullscreen toggle visibly (#8820) +Fix #8817: Keep NewGRF order for object class sorting (#8818) +Fix #8809: Crash when removing airport when hangar window open (#8815) +Fix #8799: Crash when Search Internet in Multiplayer (#8801) +Fix #8775: [Win32] Don't create the main window when Alt-Tabbing back into fullscreen (#8792) +Fix #8774: Black screenshots when using 40bpp-blitter (#8791) +Fix: [OSX] Hide dock when entering fullscreen (#8789) +Fix: Bootstrap fails to start on clean install (#8788) +Fix: Terraform limit acts random when maxing out per_64k_frames setting (#8782) +Fix: Max-value of fast-forward-speed-limit can be outside its storage size (#8769) + + 1.11.0-beta2 (2021-02-28) ------------------------------------------------------------------------ Feature: Add setting to limit fast-forward speed (#8766) diff --git a/known-bugs.txt b/known-bugs.txt index be09c970bf..4e9e3e9b5e 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,6 @@ OpenTTD's known bugs -Last updated: 2021-02-28 -Release version: 1.11.0-beta2 +Last updated: 2021-04-01 +Release version: 1.11.0 ------------------------------------------------------------------------ From c3d43d7b1c3b418041b32127bc5e89567433a672 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 14 Aug 2021 18:48:37 +0000 Subject: [PATCH 53/63] Update: Translations from eints --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 1 + src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/chuvash.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 1 + src/lang/danish.txt | 1 + src/lang/dutch.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 1 + src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 1 + src/lang/french.txt | 1 + src/lang/frisian.txt | 1 + src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hindi.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/ido.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 1 + src/lang/japanese.txt | 1 + src/lang/korean.txt | 1 + src/lang/latin.txt | 1 + src/lang/latvian.txt | 1 + src/lang/lithuanian.txt | 1 + src/lang/luxembourgish.txt | 1 + src/lang/macedonian.txt | 1 + src/lang/malay.txt | 1 + src/lang/maltese.txt | 1 + src/lang/marathi.txt | 1 + src/lang/norwegian_bokmal.txt | 1 + src/lang/norwegian_nynorsk.txt | 1 + src/lang/persian.txt | 1 + src/lang/polish.txt | 1 + src/lang/portuguese.txt | 1 + src/lang/romanian.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 1 + src/lang/spanish_MX.txt | 1 + src/lang/swedish.txt | 1 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/urdu.txt | 1 + src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 1 + 64 files changed, 64 insertions(+) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 88feaaf5de..7ad80533ba 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -774,6 +774,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * GE STR_STATUSBAR_AUTOSAVE :{RED}OUTOSTOOR STR_STATUSBAR_SAVING_GAME :{RED}* * STOOR SPELETJIE * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Boodskapgeskiedenis STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}'n Lys van al die onlangs nuus boodskappe diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 73cdc9aefe..adf46c42ae 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -755,6 +755,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * م STR_STATUSBAR_AUTOSAVE :{RED}حفظ تلقائي STR_STATUSBAR_SAVING_GAME :{RED}* * يتم حفظ اللعبة * * + # News message history STR_MESSAGE_HISTORY :{WHITE}الرسائل السابقة STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}قائمة بآخر الاخبار diff --git a/src/lang/basque.txt b/src/lang/basque.txt index f8227a53bf..35851034f2 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -753,6 +753,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * G STR_STATUSBAR_AUTOSAVE :{RED}AUTO-GORDEA STR_STATUSBAR_SAVING_GAME :{RED}* * JOKOA GORDETZEN * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Mezu Historia STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Azken albiste mezuetako zerrenda diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index d86e12b47c..34efa6a2a4 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1083,6 +1083,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * STR_STATUSBAR_AUTOSAVE :{RED}Аўтазахаваньне STR_STATUSBAR_SAVING_GAME :{RED}* * ЗАХАВАНЬНЕ ГУЛЬНІ * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Гісторыя паведамленьняў STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Сьпіс нядаўніх навін diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 4b8cd7940f..3b725078a3 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}Salvo Automaticamente STR_STATUSBAR_SAVING_GAME :{RED}* * SALVANDO JOGO * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Histórico de Mensagens STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Uma lista das mensagens de notícias recentes diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index b553e907fa..4ae686fbb5 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -759,6 +759,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * И STR_STATUSBAR_AUTOSAVE :{RED}АВТОЗАПАЗВАНЕ STR_STATUSBAR_SAVING_GAME :{RED}* * ЗАПИСВАНЕ НА ИГРА * * + # News message history STR_MESSAGE_HISTORY :{WHITE}История на съобщенията STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Списък с последните новини diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 3700b7e2e7..1a08864346 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * E STR_STATUSBAR_AUTOSAVE :{RED}DESADA AUTOMÀTICA STR_STATUSBAR_SAVING_GAME :{RED}* * DESANT PARTIDA * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Historial de missatges STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Llista de les notícies més recents diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index a2a5d98ac7..04fafa0995 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -440,6 +440,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * STR_STATUSBAR_AUTOSAVE :{RED}ХӐЙ УПРАВ STR_STATUSBAR_SAVING_GAME :{RED}* * ВӐЙЙИ УПРАВ * * + # News message history STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index ee703ab1e6..1b9e892ed4 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -869,6 +869,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * S STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATSKO SPREMANJE STR_STATUSBAR_SAVING_GAME :{RED}* * SPREMAM IGRU * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Povijest poruka STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Popis nedavnih novinskih poruka diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 4478cb0af3..d67de0e7ce 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -870,6 +870,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}Automatické ukládání STR_STATUSBAR_SAVING_GAME :{RED}* * HRA SE UKLÁDÁ * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Historie zpráv STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Seznam předešlých zpráv diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 55b6281cad..fa0cc6f846 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -773,6 +773,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * PA STR_STATUSBAR_AUTOSAVE :{RED}AUTOGEM STR_STATUSBAR_SAVING_GAME :{RED}* * GEMMER SPIL * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Beskedhistorik STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}En liste over seneste nyheder diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 554693df7f..cd860471ec 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -783,6 +783,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * GEP STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATISCH OPSLAAN STR_STATUSBAR_SAVING_GAME :{RED}* * SPEL WORDT OPGESLAGEN * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Berichtengeschiedenis STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Een lijst met recente nieuwsberichten diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index fe1ac894f0..215e1c5d0c 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -751,6 +751,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * P STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Message History STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}A list of the recent news messages diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index a12f9bf380..6b1e975bff 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -783,6 +783,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Message History STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}A list of the recent news messages diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 29487c4638..77b244110a 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -750,6 +750,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * PA STR_STATUSBAR_AUTOSAVE :{RED}AŬTOMATA KONSERVADO STR_STATUSBAR_SAVING_GAME :{RED}* * KONSERVAS LUDON * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Mesaĝa historio STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Listo da aktualaj novaĵoj diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 026dcf66a5..879fcdb660 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -840,6 +840,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * S STR_STATUSBAR_AUTOSAVE :{RED}VÄLPSALVESTUS STR_STATUSBAR_SAVING_GAME :{RED}* * MÄNGU SALVESTAMINE * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Sõnumite ajalugu STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Nimekiri hiljutistest uudistest diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 58b7ffcdaf..6c917ea256 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -733,6 +733,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * S STR_STATUSBAR_AUTOSAVE :{RED}SJÁLVGOYMSLA STR_STATUSBAR_SAVING_GAME :{RED}* * GOYMUR SPÆL * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Boðs søga STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Yvirlit yvir fesk tíðinda boð diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 5c212eac23..5d40e9409a 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -783,6 +783,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * T STR_STATUSBAR_AUTOSAVE :{RED}AUTOMAATTITALLENNUS STR_STATUSBAR_SAVING_GAME :{RED}* * TALLENNETAAN PELIÄ * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Viestihistoria STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Lista viimeisimmistä uutisviesteistä diff --git a/src/lang/french.txt b/src/lang/french.txt index ccce8c29b8..7b48f3a727 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * S STR_STATUSBAR_AUTOSAVE :{RED}ENREGISTREMENT AUTOMATIQUE STR_STATUSBAR_SAVING_GAME :{RED}* * SAUVEGARDE EN COURS * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Historique des messages STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Liste des messages récents diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 74f7ce4c07..3f111a02f8 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -760,6 +760,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * SK STR_STATUSBAR_AUTOSAVE :{RED}Automatysk bewarje STR_STATUSBAR_SAVING_GAME :{RED}* * SLAAT SPUL OP * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Berjochtenskiednis STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}In list fan resinte nijsberjochten diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index f8c4de288f..b242f3c63a 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -965,6 +965,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * N STR_STATUSBAR_AUTOSAVE :{RED}FÈIN-SHÀBHALADH STR_STATUSBAR_SAVING_GAME :{RED}* * A' SÀBHALADH GEAMA * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Eachdraidh nam brath STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Liosta nam brath-naidheachd o chionn ghoirid diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 137509d040..c141b99cd8 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -774,6 +774,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * EN STR_STATUSBAR_AUTOSAVE :{RED}AUTOGRAVADO STR_STATUSBAR_SAVING_GAME :{RED}* * GRAVANDO PARTIDA * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Historial de mensaxes STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Unha lista das mensaxes e novas recentes diff --git a/src/lang/german.txt b/src/lang/german.txt index fc18077c89..3c2504614b 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}Autosicherung STR_STATUSBAR_SAVING_GAME :{RED}* * SPEICHERE SPIEL * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Nachrichtenchronik STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Eine Liste der aktuellen Nachrichten diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 5c57edeb90..3fcb9b4a20 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -885,6 +885,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}** ΠΑ STR_STATUSBAR_AUTOSAVE :{RED}ΑΥΤΟΜΑΤΗ ΑΠΟΘΗΚΕΥΣΗ STR_STATUSBAR_SAVING_GAME :{RED}* * ΑΠΟΘΗΚΕΥΣΗ ΠΑΙΧΝΙΔΙΟΥ * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Ιστορικό Μηνυμάτων STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Λίστα των πρόσφατων μηνυμάτων ειδήσεων diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index a06b8f73eb..92a93d5d53 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -778,6 +778,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * ה STR_STATUSBAR_AUTOSAVE :{RED}שמירה אוטומטית STR_STATUSBAR_SAVING_GAME :{RED}* * שומר משחק * * + # News message history STR_MESSAGE_HISTORY :{WHITE}היסטוריית ההודעות STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}רשימת ההודעות האחרונות diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 51b0a259b8..37e6da9ae0 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -220,6 +220,7 @@ STR_SMALLMAP_TOWN :{TINY_FONT}{WHI # Status bar messages STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * ठहरा हुआ (संपर्क चित्र अद्यतन के लिये प्रतीक्षारत) * * + # News message history STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLACK}{STRING} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index f1ea7283f9..701dbed1ed 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -847,6 +847,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * S STR_STATUSBAR_AUTOSAVE :{RED}Automatikus mentés STR_STATUSBAR_SAVING_GAME :{RED}* * JÁTÉK MENTÉSE * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Előző üzenetek STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Az előző hírüzenetek listája diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 4d08869dbc..39dc2476b0 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -732,6 +732,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * ST STR_STATUSBAR_AUTOSAVE :{RED}SJÁLFVIRK VISTUN STR_STATUSBAR_SAVING_GAME :{RED}* * VISTA LEIK * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Saga skilaboða STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Listi yfir nýlegar fréttir diff --git a/src/lang/ido.txt b/src/lang/ido.txt index bf4e15e9cb..05d157bfb9 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -429,6 +429,7 @@ STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Montras # Status bar messages STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - + # News message history STR_NEWS_MESSAGE_CAPTION :{WHITE}Sendajo diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 8c5fdca55d..ff95f09e49 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -783,6 +783,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAU STR_STATUSBAR_AUTOSAVE :{RED}SIMPAN OTOMATIS STR_STATUSBAR_SAVING_GAME :{RED}* * MENYIMPAN PERMAINAN * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Pesan Lampau STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Daftar pesan berita-berita yang ada diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 25738aeffb..025138d110 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -760,6 +760,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * A STR_STATUSBAR_AUTOSAVE :{RED}UATHSHÁBHÁIL STR_STATUSBAR_SAVING_GAME :{RED}* * CLUICHE Á SHÁBHÁIL * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Stair na dteachtaireachtaí STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Liosta de gach teachtaireacht nuachta le déanaí diff --git a/src/lang/italian.txt b/src/lang/italian.txt index fe7f9810d0..dec73c2179 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -785,6 +785,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * I STR_STATUSBAR_AUTOSAVE :{RED}SALVATAGGIO AUTOMATICO STR_STATUSBAR_SAVING_GAME :{RED}* * SALVATAGGIO PARTITA * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Cronologia messaggi STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Elenco delle notizie recenti diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 9b577dd5f2..f069b26ac2 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -783,6 +783,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * STR_STATUSBAR_AUTOSAVE :{RED}オートセーブ STR_STATUSBAR_SAVING_GAME :{RED}* * ゲームセーブ中 * * + # News message history STR_MESSAGE_HISTORY :{WHITE}メッセージ履歴 STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}最新のニュース/メッセージのリストです diff --git a/src/lang/korean.txt b/src/lang/korean.txt index a49534fb00..d99be2aeac 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * STR_STATUSBAR_AUTOSAVE :{RED}자동 저장 STR_STATUSBAR_SAVING_GAME :{RED}* * 게임 저장 중 * * + # News message history STR_MESSAGE_HISTORY :{WHITE}메시지 기록 STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}최근 뉴스 메시지의 기록입니다 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index e95558cfff..8c5245358d 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -955,6 +955,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * I STR_STATUSBAR_AUTOSAVE :{RED}AUTOSERVANS STR_STATUSBAR_SAVING_GAME :{RED}* * LUDUM SERVANS * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Historia Nuntiorum STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Index nuntiorum recentium diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 8b9c130a94..bc30d0f223 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -785,6 +785,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE} * * PA STR_STATUSBAR_AUTOSAVE :{RED}AUTOMĀTISKĀ SAGLABĀŠANA STR_STATUSBAR_SAVING_GAME :{RED}* * SPĒLE TIEK SAGLABĀTA * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Ziņojumu vēsture STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Neseno ziņojumu saraksts diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 834d878b3e..d1a96bbc4b 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -988,6 +988,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATINIS SAUGOJIMAS STR_STATUSBAR_SAVING_GAME :{RED}* * Išsaugomas žaidimas * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Žinučių istorija STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Paskutinių žinučių sąrašas diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 3a11afe8e9..b52bdb1b7d 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -783,6 +783,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}AUTOSPÄICHEREN STR_STATUSBAR_SAVING_GAME :{RED}* * SPÄICHERT D'SPILL * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Meldungshistorie STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Eng Lëscht vun de leschten Meldungen diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 9c90f4015e..3b35dd1a88 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -727,6 +727,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * STR_STATUSBAR_AUTOSAVE :{RED}Автозачувување STR_STATUSBAR_SAVING_GAME :{RED}* * ЗАШТЕДА НА ИГРА * * + # News message history STR_MESSAGE_HISTORY :{WHITE}порака Историја STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Листа на последните вести пораки diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 71f6bc24ed..1c7e165ce9 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -737,6 +737,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * DI STR_STATUSBAR_AUTOSAVE :{RED}SIMPANAN AUTOMATIK STR_STATUSBAR_SAVING_GAME :{RED}* * SEDANG SIMPAN PERMAINAN * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Pesanan Sebelumnya STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Senarai laporan berita terkini diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index d10e67fcca..21a4ef0257 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -363,6 +363,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Uri l-pr # Status bar messages STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - + # News message history diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 20d6859fee..dd5659d63c 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -652,6 +652,7 @@ STR_SMALLMAP_TOWN :{TINY_FONT}{WHI # Status bar messages STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - + # News message history STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index e46d49fe56..aaaeb6fc68 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -785,6 +785,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * SPI STR_STATUSBAR_AUTOSAVE :{RED}AUTOLAGRING STR_STATUSBAR_SAVING_GAME :{RED}* * LAGRER SPILL * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Meldingshistorikk STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}En liste over de siste nyhetsmeldingene diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 642b313602..92feb57a7e 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -762,6 +762,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * PA STR_STATUSBAR_AUTOSAVE :{RED}AUTOLAGRING STR_STATUSBAR_SAVING_GAME :{RED}* * LAGRAR SPEL * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Meldingshistorikk STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Ei liste over siste nyheiter diff --git a/src/lang/persian.txt b/src/lang/persian.txt index da7b3b0fad..688b83dab9 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -752,6 +752,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * ت STR_STATUSBAR_AUTOSAVE :{RED}ذخیره اتوماتیک STR_STATUSBAR_SAVING_GAME :{RED}»»»» در حال ذخيره بازي «««« + # News message history STR_MESSAGE_HISTORY :{WHITE}تاریخچه پیام ها STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}لیست آخرین پیام های اخباری diff --git a/src/lang/polish.txt b/src/lang/polish.txt index f26eeb68b0..4d55f01638 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1163,6 +1163,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}AUTOZAPIS STR_STATUSBAR_SAVING_GAME :{RED}* * ZAPISYWANIE GRY * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Poprzednie wiadomości STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Lista ostatnich wiadomości diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index ff1202f1e6..5c603616b5 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * E STR_STATUSBAR_AUTOSAVE :{RED}AUTOGUARDADO STR_STATUSBAR_SAVING_GAME :{RED}* * A GUARDAR JOGO * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Histórico de Mensagens STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Lista de notícias recentes diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index f42454072e..1a8c3b5e93 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -779,6 +779,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}SALVARE AUTOMATĂ STR_STATUSBAR_SAVING_GAME :{RED}* * SALVARE JOC * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Cronologia mesajelor STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}O listă a celor mai recente mesaje diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 081df3aee8..c2637890c8 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -928,6 +928,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * П STR_STATUSBAR_AUTOSAVE :{RED}АВТОСОХРАНЕНИЕ STR_STATUSBAR_SAVING_GAME :{RED}* * СОХРАНЕНИЕ ИГРЫ * * + # News message history STR_MESSAGE_HISTORY :{WHITE}История сообщений STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Список недавних новостей diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 3e28df0606..522e047639 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -978,6 +978,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}AUTO-ČUVANJE STR_STATUSBAR_SAVING_GAME :{RED}* * ČUVAM PARTIJU * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Arhiva Vesti STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Spisak skorašnjih novosti diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 9cb0b33bfb..941c2caaf3 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -783,6 +783,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * STR_STATUSBAR_AUTOSAVE :{RED}自动保存 STR_STATUSBAR_SAVING_GAME :{RED}* * 保存游戏中 * * + # News message history STR_MESSAGE_HISTORY :{WHITE}消息历史 STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}最新的新闻列表 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 39b0bd4d82..a1a612342d 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -851,6 +851,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}AUTOULOŽENIE STR_STATUSBAR_SAVING_GAME :{RED}* * HRA SA UKLADÁ * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Archív správ STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Zoznam posledných správ diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 927db5d3c8..d6543b9771 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -913,6 +913,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * PA STR_STATUSBAR_AUTOSAVE :{RED}Samodejno shranjevanje STR_STATUSBAR_SAVING_GAME :{RED}* * SHRANJEVANJE * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Arhiv sporočil STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Seznam zadnjih novic diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 9bb2c41627..b2f56bdda1 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE} * * EN STR_STATUSBAR_AUTOSAVE :{RED}AUTOGUARDADO STR_STATUSBAR_SAVING_GAME :{RED}* * GUARDANDO JUEGO * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Historial de mensajes STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Muestra la lista de los mensajes más recientes diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index cf7280bad0..1f65c189ec 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * E STR_STATUSBAR_AUTOSAVE :{RED}GUARDADO AUTOMÁTICO STR_STATUSBAR_SAVING_GAME :{RED}* * GUARDANDO PARTIDA * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Historial de mensajes STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Lista de los mensajes más recientes diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 285a7557bd..41c07862a8 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -783,6 +783,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * P STR_STATUSBAR_AUTOSAVE :{RED}AUTOSPARA STR_STATUSBAR_SAVING_GAME :{RED}* * SPARAR SPEL * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Meddelandehistorik STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}En lista med de senaste nyheterna diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index aba48dd837..38b543ee3b 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -758,6 +758,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * STR_STATUSBAR_AUTOSAVE :{RED}பதிவுசெய்தல் STR_STATUSBAR_SAVING_GAME :{RED}* * ஆட்டம் பதிவாகிறது * * + # News message history STR_MESSAGE_HISTORY :{WHITE}செய்தி வரலாறு STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}சமீப செய்திகளின் பட்டியல் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 17f01e7b4d..37711149c1 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -752,6 +752,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * STR_STATUSBAR_AUTOSAVE :{RED}กำลังทำการเซฟอัตโนมัติ STR_STATUSBAR_SAVING_GAME :{RED}* * กำลังบันทึกเกม * * + # News message history STR_MESSAGE_HISTORY :{WHITE}ข้อความย้อนหลัง STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}รายการแสดงข้อความข่าวเมื่อเร็วๆนี้ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 7484d4e823..5924c9c83b 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -765,6 +765,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * STR_STATUSBAR_AUTOSAVE :{RED}自動儲存 STR_STATUSBAR_SAVING_GAME :{RED}* * 遊戲儲存中 * * + # News message history STR_MESSAGE_HISTORY :{WHITE}訊息記錄 STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}列出最近的新聞內容 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 0d0b5ae030..45087c82d4 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * D STR_STATUSBAR_AUTOSAVE :{RED}OTOMATİK KAYDET STR_STATUSBAR_SAVING_GAME :{RED}* * KAYDEDiYOR * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Mesaj Geçmişi STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}En son haberlerin özetleri diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 1573b0ab17..46c330b753 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -911,6 +911,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * П STR_STATUSBAR_AUTOSAVE :{RED}АВТОЗБЕРЕЖЕННЯ STR_STATUSBAR_SAVING_GAME :{RED}* * ЗБЕРЕЖЕННЯ ГРИ * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Історія повідомлень STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Список останніх повідомлень diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 16624ee692..900dad4876 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -732,6 +732,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}٭ ٭ STR_STATUSBAR_AUTOSAVE :{RED}خود مختار بچاو STR_STATUSBAR_SAVING_GAME :{RED}٭ ٭ کھیل کو بچائیں ٭ ٭ + # News message history STR_MESSAGE_HISTORY :{WHITE}پرانے پیغام STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}حالیہ پیغاموں کی فہرست diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 043ceafd25..12951ef96c 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -783,6 +783,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * T STR_STATUSBAR_AUTOSAVE :{RED}LƯU TỰ ĐỘNG STR_STATUSBAR_SAVING_GAME :{RED}* * ĐANG LƯU GAME * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Lịch Sử Thông Điệp STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Danh sách những tin tức gần đây diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 7ccf26c2ef..a17371eee3 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -761,6 +761,7 @@ STR_STATUSBAR_PAUSED :{YELLOW}* * WE STR_STATUSBAR_AUTOSAVE :{RED}AWTOGADW STR_STATUSBAR_SAVING_GAME :{RED}* * CADW GÊM * * + # News message history STR_MESSAGE_HISTORY :{WHITE}Hanes Negeseuon STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Rhestr o'r negeseuon newyddion diweddaraf From db13eebf2920194d3b221d97807f5f2c34e5d9c2 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 14 Aug 2021 21:00:30 +0200 Subject: [PATCH 54/63] Fix 508e465b: network servers didn't show invite-code / connection-type in Online Players GUI (#9478) The selector selects the first widget, which by accident was now only the server visibility. --- src/network/network_gui.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 34e06712cf..0c2294da6d 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1609,20 +1609,22 @@ static const NWidgetPart _nested_client_list_widgets[] = { NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_SERVER_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP), EndContainer(), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_CL_SERVER_SELECTOR), - NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY, STR_NULL), - NWidget(NWID_SPACER), SetMinimalSize(10, 0), SetFill(1, 0), SetResize(1, 0), - NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_CL_SERVER_VISIBILITY), SetDataTip(STR_BLACK_STRING, STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP), - EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE, STR_NULL), - NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_INVITE_CODE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), - EndContainer(), - NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), - NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE, STR_NULL), - NWidget(NWID_SPACER), SetMinimalSize(10, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_CONNECTION_TYPE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(NWID_VERTICAL), + NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY, STR_NULL), + NWidget(NWID_SPACER), SetMinimalSize(10, 0), SetFill(1, 0), SetResize(1, 0), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_CL_SERVER_VISIBILITY), SetDataTip(STR_BLACK_STRING, STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE, STR_NULL), + NWidget(NWID_SPACER), SetMinimalSize(10, 0), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_INVITE_CODE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + EndContainer(), + NWidget(NWID_HORIZONTAL), SetPIP(0, 3, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalTextLines(1, 0), SetDataTip(STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE, STR_NULL), + NWidget(NWID_SPACER), SetMinimalSize(10, 0), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_SERVER_CONNECTION_TYPE), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + EndContainer(), EndContainer(), EndContainer(), EndContainer(), From 3d55ea2d4d1259fd34f30395743b10521b7ec11a Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 14 Aug 2021 23:07:18 +0200 Subject: [PATCH 55/63] Feature: make "join game" button join the game, instead of first showing a lobby window (#9467) Nobody really paid attention to the lobby window, and it completely missed its purpose. Most people don't even wait for companies to show up, but just hit "New Company". This in turn means people create a lot of unneeded companies, while they "just want to watch the game" or join another company. Instead, "Join Game" now just joins the game as spectators. --- src/lang/english.txt | 25 --- src/network/core/tcp_game.h | 2 +- src/network/network.cpp | 36 ---- src/network/network_client.cpp | 42 +---- src/network/network_gui.cpp | 322 +-------------------------------- src/network/network_gui.h | 2 - src/network/network_internal.h | 1 - src/widgets/network_widget.h | 15 -- src/window_type.h | 2 - 9 files changed, 4 insertions(+), 443 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 4f00d1a729..551fd94cb4 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2086,31 +2086,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Other pl STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Enter a name for the network game -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multiplayer game lobby - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparing to join: {ORANGE}{RAW_STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}A list of all companies currently in this game. You can either join one or start a new one if there is a free company slot - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}COMPANY INFO -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Company name: {WHITE}{RAW_STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguration: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Company value: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Current balance: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Last year's income: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Performance: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vehicles: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stations: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Players: {WHITE}{RAW_STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}New company -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Spectate game -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Watch the game as a spectator -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Join company -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Help manage this company - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Connecting... diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index 90b7184f0a..cbef799cf9 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -38,7 +38,7 @@ enum PacketGameType { PACKET_CLIENT_JOIN, ///< The client telling the server it wants to join. PACKET_SERVER_ERROR, ///< Server sending an error message to the client. - /* Packets used for the pre-game lobby. */ + /* Packets used for the pre-game lobby (unused, but remain for backward/forward compatibility). */ PACKET_CLIENT_COMPANY_INFO, ///< Request information about all companies. PACKET_SERVER_COMPANY_INFO, ///< Information about a single company. diff --git a/src/network/network.cpp b/src/network/network.cpp index 3bce6d4d5d..929e50450f 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -657,42 +657,6 @@ void NetworkQueryServer(const std::string &connection_string) new TCPQueryConnecter(connection_string); } -/** Non blocking connection to query servers for their game and company info. */ -class TCPLobbyQueryConnecter : TCPServerConnecter { -private: - std::string connection_string; - -public: - TCPLobbyQueryConnecter(const std::string &connection_string) : TCPServerConnecter(connection_string, NETWORK_DEFAULT_PORT), connection_string(connection_string) {} - - void OnFailure() override - { - CloseWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY); - - ShowErrorMessage(STR_NETWORK_ERROR_NOCONNECTION, INVALID_STRING_ID, WL_ERROR); - } - - void OnConnect(SOCKET s) override - { - _networking = true; - new ClientNetworkGameSocketHandler(s, this->connection_string); - MyClient::SendInformationQuery(true); - } -}; - -/** - * Query a server to fetch the game-info for the lobby. - * @param connection_string the address to query. - */ -void NetworkQueryLobbyServer(const std::string &connection_string) -{ - if (!_network_available) return; - - NetworkInitialize(); - - new TCPLobbyQueryConnecter(connection_string); -} - /** * Validates an address entered as a string and adds the server to * the list. If you use this function, the games will be marked diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index a1a86c8de3..d2b5b489b2 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -569,11 +569,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packe { if (this->status != STATUS_COMPANY_INFO && this->status != STATUS_GAME_INFO) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - NetworkGameList *item = GetLobbyGameInfo(); - if (item == nullptr) { - /* This is not the lobby, so add it to the game list. */ - item = NetworkGameListAddItem(this->connection_string); - } + NetworkGameList *item = NetworkGameListAddItem(this->connection_string); /* Clear any existing GRFConfig chain. */ ClearGRFConfigList(&item->info.grfconfig); @@ -584,9 +580,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packe /* Ensure we consider the server online. */ item->online = true; - /* It could be either window, but only one is open, so redraw both. */ UpdateNetworkGameWindow(); - SetWindowDirty(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY); /* We will receive company info next, so keep connection open. */ if (this->status == STATUS_COMPANY_INFO) return NETWORK_RECV_STATUS_OKAY; @@ -597,39 +591,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMPANY_INFO(Pa { if (this->status != STATUS_COMPANY_INFO) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - byte company_info_version = p->Recv_uint8(); - - if (!this->HasClientQuit() && company_info_version == NETWORK_COMPANY_INFO_VERSION) { - /* We have received all data... (there are no more packets coming) */ - if (!p->Recv_bool()) return NETWORK_RECV_STATUS_CLOSE_QUERY; - - CompanyID current = (Owner)p->Recv_uint8(); - if (current >= MAX_COMPANIES) return NETWORK_RECV_STATUS_CLOSE_QUERY; - - NetworkCompanyInfo *company_info = GetLobbyCompanyInfo(current); - if (company_info == nullptr) return NETWORK_RECV_STATUS_CLOSE_QUERY; - - company_info->company_name = p->Recv_string(NETWORK_COMPANY_NAME_LENGTH); - company_info->inaugurated_year = p->Recv_uint32(); - company_info->company_value = p->Recv_uint64(); - company_info->money = p->Recv_uint64(); - company_info->income = p->Recv_uint64(); - company_info->performance = p->Recv_uint16(); - company_info->use_password = p->Recv_bool(); - for (uint i = 0; i < NETWORK_VEH_END; i++) { - company_info->num_vehicle[i] = p->Recv_uint16(); - } - for (uint i = 0; i < NETWORK_VEH_END; i++) { - company_info->num_station[i] = p->Recv_uint16(); - } - company_info->ai = p->Recv_bool(); - - company_info->clients = p->Recv_string(NETWORK_CLIENTS_LENGTH); - - SetWindowDirty(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY); - - return NETWORK_RECV_STATUS_OKAY; - } + /* Unused, but this packet is part of the "this will never change" packet group. */ return NETWORK_RECV_STATUS_CLOSE_QUERY; } diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 0c2294da6d..503cebf4e8 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -53,7 +53,6 @@ #include "../safeguards.h" static void ShowNetworkStartServerWindow(); -static void ShowNetworkLobbyWindow(NetworkGameList *ngl); static const int NETWORK_LIST_REFRESH_DELAY = 30; ///< Time, in seconds, between updates of the network list. @@ -770,7 +769,7 @@ public: case WID_NG_JOIN: // Join Game if (this->server != nullptr) { - ShowNetworkLobbyWindow(this->server); + NetworkClientConnectGame(this->server->connection_string, COMPANY_SPECTATOR); } break; @@ -990,7 +989,6 @@ static WindowDesc _network_game_window_desc( void ShowNetworkGameWindow() { static bool first = true; - CloseWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY); CloseWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_START); /* Only show once */ @@ -1266,328 +1264,10 @@ static void ShowNetworkStartServerWindow() if (!NetworkValidateOurClientName()) return; CloseWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME); - CloseWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY); new NetworkStartServerWindow(&_network_start_server_window_desc); } -struct NetworkLobbyWindow : public Window { - CompanyID company; ///< Selected company - NetworkGameList *server; ///< Selected server - NetworkCompanyInfo company_info[MAX_COMPANIES]; - Scrollbar *vscroll; - - NetworkLobbyWindow(WindowDesc *desc, NetworkGameList *ngl) : - Window(desc), company(INVALID_COMPANY), server(ngl) - { - this->CreateNestedTree(); - this->vscroll = this->GetScrollbar(WID_NL_SCROLLBAR); - this->FinishInitNested(WN_NETWORK_WINDOW_LOBBY); - } - - CompanyID NetworkLobbyFindCompanyIndex(byte pos) const - { - /* Scroll through all this->company_info and get the 'pos' item that is not empty. */ - for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { - if (!this->company_info[i].company_name.empty()) { - if (pos-- == 0) return i; - } - } - - return COMPANY_FIRST; - } - - void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override - { - switch (widget) { - case WID_NL_HEADER: - size->height = WD_MATRIX_TOP + FONT_HEIGHT_NORMAL + WD_MATRIX_BOTTOM; - break; - - case WID_NL_MATRIX: - resize->height = WD_MATRIX_TOP + std::max(std::max(GetSpriteSize(SPR_LOCK).height, GetSpriteSize(SPR_PROFIT_LOT).height), FONT_HEIGHT_NORMAL) + WD_MATRIX_BOTTOM; - size->height = 10 * resize->height; - break; - - case WID_NL_DETAILS: - size->height = 30 + 11 * FONT_HEIGHT_NORMAL; - break; - } - } - - void SetStringParameters(int widget) const override - { - switch (widget) { - case WID_NL_TEXT: - SetDParamStr(0, this->server->info.server_name); - break; - } - } - - void DrawWidget(const Rect &r, int widget) const override - { - switch (widget) { - case WID_NL_DETAILS: - this->DrawDetails(r); - break; - - case WID_NL_MATRIX: - this->DrawMatrix(r); - break; - } - } - - void OnPaint() override - { - const NetworkGameInfo *gi = &this->server->info; - - /* Join button is disabled when no company is selected and for AI companies. */ - this->SetWidgetDisabledState(WID_NL_JOIN, this->company == INVALID_COMPANY || GetLobbyCompanyInfo(this->company)->ai); - /* Cannot start new company if there are too many. */ - this->SetWidgetDisabledState(WID_NL_NEW, gi->companies_on >= gi->companies_max); - - this->vscroll->SetCount(gi->companies_on); - - /* Draw window widgets */ - this->DrawWidgets(); - } - - void DrawMatrix(const Rect &r) const - { - bool rtl = _current_text_dir == TD_RTL; - uint left = r.left + WD_FRAMERECT_LEFT; - uint right = r.right - WD_FRAMERECT_RIGHT; - uint text_offset = (this->resize.step_height - WD_MATRIX_TOP - WD_MATRIX_BOTTOM - FONT_HEIGHT_NORMAL) / 2 + WD_MATRIX_TOP; - - Dimension lock_size = GetSpriteSize(SPR_LOCK); - int lock_width = lock_size.width; - int lock_y_offset = (this->resize.step_height - WD_MATRIX_TOP - WD_MATRIX_BOTTOM - lock_size.height) / 2 + WD_MATRIX_TOP; - - Dimension profit_size = GetSpriteSize(SPR_PROFIT_LOT); - int profit_width = lock_size.width; - int profit_y_offset = (this->resize.step_height - WD_MATRIX_TOP - WD_MATRIX_BOTTOM - profit_size.height) / 2 + WD_MATRIX_TOP; - - uint text_left = left + (rtl ? lock_width + profit_width + 4 : 0); - uint text_right = right - (rtl ? 0 : lock_width + profit_width + 4); - uint profit_left = rtl ? left : right - profit_width; - uint lock_left = rtl ? left + profit_width + 2 : right - profit_width - lock_width - 2; - - int y = r.top; - /* Draw company list */ - int pos = this->vscroll->GetPosition(); - while (pos < this->server->info.companies_on) { - byte company = NetworkLobbyFindCompanyIndex(pos); - bool income = false; - if (this->company == company) { - GfxFillRect(r.left + WD_BEVEL_LEFT, y + 1, r.right - WD_BEVEL_RIGHT, y + this->resize.step_height - 2, PC_GREY); // show highlighted item with a different colour - } - - DrawString(text_left, text_right, y + text_offset, this->company_info[company].company_name, TC_BLACK); - if (this->company_info[company].use_password != 0) DrawSprite(SPR_LOCK, PAL_NONE, lock_left, y + lock_y_offset); - - /* If the company's income was positive puts a green dot else a red dot */ - if (this->company_info[company].income >= 0) income = true; - DrawSprite(income ? SPR_PROFIT_LOT : SPR_PROFIT_NEGATIVE, PAL_NONE, profit_left, y + profit_y_offset); - - pos++; - y += this->resize.step_height; - if (pos >= this->vscroll->GetPosition() + this->vscroll->GetCapacity()) break; - } - } - - void DrawDetails(const Rect &r) const - { - const int detail_height = 12 + FONT_HEIGHT_NORMAL + 12; - /* Draw info about selected company when it is selected in the left window. */ - GfxFillRect(r.left + 1, r.top + 1, r.right - 1, r.top + detail_height - 1, PC_DARK_BLUE); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + 12, STR_NETWORK_GAME_LOBBY_COMPANY_INFO, TC_FROMSTRING, SA_HOR_CENTER); - - if (this->company == INVALID_COMPANY || this->company_info[this->company].company_name.empty()) return; - - int y = r.top + detail_height + 4; - const NetworkGameInfo *gi = &this->server->info; - - SetDParam(0, gi->clients_on); - SetDParam(1, gi->clients_max); - SetDParam(2, gi->companies_on); - SetDParam(3, gi->companies_max); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_SERVER_LIST_CLIENTS); - y += FONT_HEIGHT_NORMAL; - - SetDParamStr(0, this->company_info[this->company].company_name); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_COMPANY_NAME); - y += FONT_HEIGHT_NORMAL; - - SetDParam(0, this->company_info[this->company].inaugurated_year); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR); // inauguration year - y += FONT_HEIGHT_NORMAL; - - SetDParam(0, this->company_info[this->company].company_value); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_VALUE); // company value - y += FONT_HEIGHT_NORMAL; - - SetDParam(0, this->company_info[this->company].money); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE); // current balance - y += FONT_HEIGHT_NORMAL; - - SetDParam(0, this->company_info[this->company].income); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME); // last year's income - y += FONT_HEIGHT_NORMAL; - - SetDParam(0, this->company_info[this->company].performance); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_PERFORMANCE); // performance - y += FONT_HEIGHT_NORMAL; - - SetDParam(0, this->company_info[this->company].num_vehicle[NETWORK_VEH_TRAIN]); - SetDParam(1, this->company_info[this->company].num_vehicle[NETWORK_VEH_LORRY]); - SetDParam(2, this->company_info[this->company].num_vehicle[NETWORK_VEH_BUS]); - SetDParam(3, this->company_info[this->company].num_vehicle[NETWORK_VEH_SHIP]); - SetDParam(4, this->company_info[this->company].num_vehicle[NETWORK_VEH_PLANE]); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_VEHICLES); // vehicles - y += FONT_HEIGHT_NORMAL; - - SetDParam(0, this->company_info[this->company].num_station[NETWORK_VEH_TRAIN]); - SetDParam(1, this->company_info[this->company].num_station[NETWORK_VEH_LORRY]); - SetDParam(2, this->company_info[this->company].num_station[NETWORK_VEH_BUS]); - SetDParam(3, this->company_info[this->company].num_station[NETWORK_VEH_SHIP]); - SetDParam(4, this->company_info[this->company].num_station[NETWORK_VEH_PLANE]); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_STATIONS); // stations - y += FONT_HEIGHT_NORMAL; - - SetDParamStr(0, this->company_info[this->company].clients); - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_PLAYERS); // players - } - - void OnClick(Point pt, int widget, int click_count) override - { - switch (widget) { - case WID_NL_CANCEL: // Cancel button - ShowNetworkGameWindow(); - break; - - case WID_NL_MATRIX: { // Company list - uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NL_MATRIX); - this->company = (id_v >= this->server->info.companies_on) ? INVALID_COMPANY : NetworkLobbyFindCompanyIndex(id_v); - this->SetDirty(); - - /* FIXME the disabling should go into some InvalidateData, which is called instead of the SetDirty */ - if (click_count > 1 && !this->IsWidgetDisabled(WID_NL_JOIN)) this->OnClick(pt, WID_NL_JOIN, 1); - break; - } - - case WID_NL_JOIN: // Join company - /* Button can be clicked only when it is enabled. */ - NetworkClientConnectGame(this->server->connection_string, this->company); - break; - - case WID_NL_NEW: // New company - NetworkClientConnectGame(this->server->connection_string, COMPANY_NEW_COMPANY); - break; - - case WID_NL_SPECTATE: // Spectate game - NetworkClientConnectGame(this->server->connection_string, COMPANY_SPECTATOR); - break; - - case WID_NL_REFRESH: // Refresh - /* Clear the information so removed companies don't remain */ - for (auto &company : this->company_info) company = {}; - - NetworkQueryLobbyServer(this->server->connection_string); - break; - } - } - - void OnResize() override - { - this->vscroll->SetCapacityFromWidget(this, WID_NL_MATRIX); - } -}; - -static const NWidgetPart _nested_network_lobby_window_widgets[] = { - NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_LIGHT_BLUE), - NWidget(WWT_CAPTION, COLOUR_LIGHT_BLUE), SetDataTip(STR_NETWORK_GAME_LOBBY_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - EndContainer(), - NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NL_BACKGROUND), - NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NL_TEXT), SetDataTip(STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN, STR_NULL), SetResize(1, 0), SetPadding(10, 10, 0, 10), - NWidget(NWID_SPACER), SetMinimalSize(0, 3), - NWidget(NWID_HORIZONTAL), SetPIP(10, 0, 10), - /* Company list. */ - NWidget(NWID_VERTICAL), - NWidget(WWT_PANEL, COLOUR_WHITE, WID_NL_HEADER), SetMinimalSize(146, 0), SetResize(1, 0), SetFill(1, 0), EndContainer(), - NWidget(WWT_MATRIX, COLOUR_LIGHT_BLUE, WID_NL_MATRIX), SetMinimalSize(146, 0), SetResize(1, 1), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP), SetScrollbar(WID_NL_SCROLLBAR), - EndContainer(), - NWidget(NWID_VSCROLLBAR, COLOUR_LIGHT_BLUE, WID_NL_SCROLLBAR), - NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetResize(0, 1), - /* Company info. */ - NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NL_DETAILS), SetMinimalSize(232, 0), SetResize(1, 1), SetFill(1, 1), EndContainer(), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 9), - /* Buttons. */ - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 3, 10), - NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 3, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NL_JOIN), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_GAME_LOBBY_JOIN_COMPANY, STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NL_NEW), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_GAME_LOBBY_NEW_COMPANY, STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP), - EndContainer(), - NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 3, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NL_SPECTATE), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_GAME_LOBBY_SPECTATE_GAME, STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NL_REFRESH), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_NETWORK_SERVER_LIST_REFRESH, STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP), - EndContainer(), - NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(0, 3, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NL_CANCEL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_BUTTON_CANCEL, STR_NULL), - NWidget(NWID_SPACER), SetFill(1, 1), - EndContainer(), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 8), - EndContainer(), -}; - -static WindowDesc _network_lobby_window_desc( - WDP_CENTER, nullptr, 0, 0, - WC_NETWORK_WINDOW, WC_NONE, - 0, - _nested_network_lobby_window_widgets, lengthof(_nested_network_lobby_window_widgets) -); - -/** - * Show the networklobbywindow with the selected server. - * @param ngl Selected game pointer which is passed to the new window. - */ -static void ShowNetworkLobbyWindow(NetworkGameList *ngl) -{ - if (!NetworkValidateOurClientName()) return; - - CloseWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_START); - CloseWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME); - - _settings_client.network.last_joined = ngl->connection_string; - - NetworkQueryLobbyServer(ngl->connection_string); - - new NetworkLobbyWindow(&_network_lobby_window_desc, ngl); -} - -/** - * Get the company information of a given company to fill for the lobby. - * @param company the company to get the company info struct from. - * @return the company info struct to write the (downloaded) data to. - */ -NetworkCompanyInfo *GetLobbyCompanyInfo(CompanyID company) -{ - NetworkLobbyWindow *lobby = dynamic_cast(FindWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY)); - return (lobby != nullptr && company < MAX_COMPANIES) ? &lobby->company_info[company] : nullptr; -} - -/** - * Get the game information for the lobby. - * @return the game info struct to write the (downloaded) data to. - */ -NetworkGameList *GetLobbyGameInfo() -{ - NetworkLobbyWindow *lobby = dynamic_cast(FindWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY)); - return lobby != nullptr ? lobby->server : nullptr; -} - /* The window below gives information about the connected clients * and also makes able to kick them (if server) and stuff like that. */ diff --git a/src/network/network_gui.h b/src/network/network_gui.h index 06b501cb5d..c3194edaf9 100644 --- a/src/network/network_gui.h +++ b/src/network/network_gui.h @@ -37,8 +37,6 @@ struct NetworkCompanyInfo : NetworkCompanyStats { std::string clients; ///< The clients that control this company (Name1, name2, ..) }; -NetworkCompanyInfo *GetLobbyCompanyInfo(CompanyID company); -NetworkGameList *GetLobbyGameInfo(); void ShowNetworkAskRelay(const std::string &connection_string, const std::string &token); #endif /* NETWORK_GUI_H */ diff --git a/src/network/network_internal.h b/src/network/network_internal.h index 5f04088f47..f26f60a186 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -94,7 +94,6 @@ extern uint8 _network_reconnect; extern CompanyMask _network_company_passworded; void NetworkQueryServer(const std::string &connection_string); -void NetworkQueryLobbyServer(const std::string &connection_string); void GetBindAddresses(NetworkAddressList *addresses, uint16 port); struct NetworkGameList *NetworkAddServer(const std::string &connection_string, bool manually = true, bool never_expire = false); diff --git a/src/widgets/network_widget.h b/src/widgets/network_widget.h index ea98912763..f50bf04e93 100644 --- a/src/widgets/network_widget.h +++ b/src/widgets/network_widget.h @@ -75,21 +75,6 @@ enum NetworkStartServerWidgets { WID_NSS_CANCEL, ///< 'Cancel' button. }; -/** Widgets of the #NetworkLobbyWindow class. */ -enum NetworkLobbyWidgets { - WID_NL_BACKGROUND, ///< Background of the window. - WID_NL_TEXT, ///< Heading text. - WID_NL_HEADER, ///< Header above list of companies. - WID_NL_MATRIX, ///< List of companies. - WID_NL_SCROLLBAR, ///< Scroll bar. - WID_NL_DETAILS, ///< Company details. - WID_NL_JOIN, ///< 'Join company' button. - WID_NL_NEW, ///< 'New company' button. - WID_NL_SPECTATE, ///< 'Spectate game' button. - WID_NL_REFRESH, ///< 'Refresh server' button. - WID_NL_CANCEL, ///< 'Cancel' button. -}; - /** Widgets of the #NetworkClientListWindow class. */ enum ClientListWidgets { WID_CL_PANEL, ///< Panel of the window. diff --git a/src/window_type.h b/src/window_type.h index 00aaaf1fde..6eb9573b60 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -25,7 +25,6 @@ enum WindowNumberEnum { WN_CONFIRM_POPUP_QUERY_BOOTSTRAP, ///< Query popup confirm for bootstrap. WN_NETWORK_WINDOW_GAME = 0, ///< Network game window. - WN_NETWORK_WINDOW_LOBBY, ///< Network lobby window. WN_NETWORK_WINDOW_CONTENT_LIST, ///< Network content list. WN_NETWORK_WINDOW_START, ///< Network start server. @@ -459,7 +458,6 @@ enum WindowClass { /** * Network window; %Window numbers: * - #WN_NETWORK_WINDOW_GAME = #NetworkGameWidgets - * - #WN_NETWORK_WINDOW_LOBBY = #NetworkLobbyWidgets * - #WN_NETWORK_WINDOW_CONTENT_LIST = #NetworkContentListWidgets * - #WN_NETWORK_WINDOW_START = #NetworkStartServerWidgets */ From 1ef4d3cf19160745cd473d5de09f6f53bc6fd240 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 14 Aug 2021 23:24:02 +0200 Subject: [PATCH 56/63] Remove: COMPANY_INFO packets and related code (#9475) --- src/network/core/core.h | 2 - src/network/core/tcp_game.cpp | 4 -- src/network/core/tcp_game.h | 40 +----------- src/network/network.cpp | 2 +- src/network/network_client.cpp | 25 +------ src/network/network_client.h | 4 +- src/network/network_server.cpp | 115 --------------------------------- src/network/network_server.h | 2 - 8 files changed, 8 insertions(+), 186 deletions(-) diff --git a/src/network/core/core.h b/src/network/core/core.h index 3e470ef5f1..84d5b62013 100644 --- a/src/network/core/core.h +++ b/src/network/core/core.h @@ -71,8 +71,6 @@ public: * Reopen the socket so we can send/receive stuff again. */ void Reopen() { this->has_quit = false; } - - void SendCompanyInformation(Packet *p, const struct Company *c, const struct NetworkCompanyStats *stats, uint max_len = NETWORK_COMPANY_NAME_LENGTH); }; #endif /* NETWORK_CORE_CORE_H */ diff --git a/src/network/core/tcp_game.cpp b/src/network/core/tcp_game.cpp index 7a1d183495..9ac53c597f 100644 --- a/src/network/core/tcp_game.cpp +++ b/src/network/core/tcp_game.cpp @@ -73,8 +73,6 @@ NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet *p) case PACKET_SERVER_ERROR: return this->Receive_SERVER_ERROR(p); case PACKET_CLIENT_GAME_INFO: return this->Receive_CLIENT_GAME_INFO(p); case PACKET_SERVER_GAME_INFO: return this->Receive_SERVER_GAME_INFO(p); - case PACKET_CLIENT_COMPANY_INFO: return this->Receive_CLIENT_COMPANY_INFO(p); - case PACKET_SERVER_COMPANY_INFO: return this->Receive_SERVER_COMPANY_INFO(p); case PACKET_SERVER_CLIENT_INFO: return this->Receive_SERVER_CLIENT_INFO(p); case PACKET_SERVER_NEED_GAME_PASSWORD: return this->Receive_SERVER_NEED_GAME_PASSWORD(p); case PACKET_SERVER_NEED_COMPANY_PASSWORD: return this->Receive_SERVER_NEED_COMPANY_PASSWORD(p); @@ -161,8 +159,6 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet *p) { ret NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_ERROR); } NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_GAME_INFO(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_GAME_INFO); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_GAME_INFO); } -NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_COMPANY_INFO(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_COMPANY_INFO); } -NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_COMPANY_INFO(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_COMPANY_INFO); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_CLIENT_INFO); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_NEED_GAME_PASSWORD(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_NEED_GAME_PASSWORD); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_NEED_COMPANY_PASSWORD); } diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index cbef799cf9..833b9077f8 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -38,9 +38,9 @@ enum PacketGameType { PACKET_CLIENT_JOIN, ///< The client telling the server it wants to join. PACKET_SERVER_ERROR, ///< Server sending an error message to the client. - /* Packets used for the pre-game lobby (unused, but remain for backward/forward compatibility). */ - PACKET_CLIENT_COMPANY_INFO, ///< Request information about all companies. - PACKET_SERVER_COMPANY_INFO, ///< Information about a single company. + /* Unused packet types, formerly used for the pre-game lobby. */ + PACKET_CLIENT_UNUSED, ///< Unused. + PACKET_SERVER_UNUSED, ///< Unused. /* Packets used to get the game info. */ PACKET_SERVER_GAME_INFO, ///< Information about the server. @@ -200,40 +200,6 @@ protected: */ virtual NetworkRecvStatus Receive_SERVER_GAME_INFO(Packet *p); - /** - * Request company information (in detail). - * @param p The packet that was just received. - */ - virtual NetworkRecvStatus Receive_CLIENT_COMPANY_INFO(Packet *p); - - /** - * Sends information about the companies (one packet per company): - * uint8 Version of the structure of this packet (NETWORK_COMPANY_INFO_VERSION). - * bool Contains data (false marks the end of updates). - * uint8 ID of the company. - * string Name of the company. - * uint32 Year the company was inaugurated. - * uint64 Value. - * uint64 Money. - * uint64 Income. - * uint16 Performance (last quarter). - * bool Company is password protected. - * uint16 Number of trains. - * uint16 Number of lorries. - * uint16 Number of busses. - * uint16 Number of planes. - * uint16 Number of ships. - * uint16 Number of train stations. - * uint16 Number of lorry stations. - * uint16 Number of bus stops. - * uint16 Number of airports and heliports. - * uint16 Number of harbours. - * bool Company is an AI. - * string Client names (comma separated list) - * @param p The packet that was just received. - */ - virtual NetworkRecvStatus Receive_SERVER_COMPANY_INFO(Packet *p); - /** * Send information about a client: * uint32 ID of the client (always unique on a server. 1 = server, 0 is invalid). diff --git a/src/network/network.cpp b/src/network/network.cpp index 929e50450f..07b4840d2f 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -640,7 +640,7 @@ public: { _networking = true; new ClientNetworkGameSocketHandler(s, this->connection_string); - MyClient::SendInformationQuery(false); + MyClient::SendInformationQuery(); } }; diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index d2b5b489b2..3196f4ce93 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -331,19 +331,11 @@ static_assert(NETWORK_SERVER_ID_LENGTH == 16 * 2 + 1); /** * Query the server for server information. */ -NetworkRecvStatus ClientNetworkGameSocketHandler::SendInformationQuery(bool request_company_info) +NetworkRecvStatus ClientNetworkGameSocketHandler::SendInformationQuery() { my_client->status = STATUS_GAME_INFO; my_client->SendPacket(new Packet(PACKET_CLIENT_GAME_INFO)); - if (request_company_info) { - my_client->status = STATUS_COMPANY_INFO; - _network_join_status = NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO; - SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); - - my_client->SendPacket(new Packet(PACKET_CLIENT_COMPANY_INFO)); - } - return NETWORK_RECV_STATUS_OKAY; } @@ -567,7 +559,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet * NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet *p) { - if (this->status != STATUS_COMPANY_INFO && this->status != STATUS_GAME_INFO) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + if (this->status != STATUS_GAME_INFO) return NETWORK_RECV_STATUS_MALFORMED_PACKET; NetworkGameList *item = NetworkGameListAddItem(this->connection_string); @@ -582,17 +574,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packe UpdateNetworkGameWindow(); - /* We will receive company info next, so keep connection open. */ - if (this->status == STATUS_COMPANY_INFO) return NETWORK_RECV_STATUS_OKAY; - return NETWORK_RECV_STATUS_CLOSE_QUERY; -} - -NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMPANY_INFO(Packet *p) -{ - if (this->status != STATUS_COMPANY_INFO) return NETWORK_RECV_STATUS_MALFORMED_PACKET; - - /* Unused, but this packet is part of the "this will never change" packet group. */ - return NETWORK_RECV_STATUS_CLOSE_QUERY; } @@ -688,7 +669,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p * NETWORK_ERROR_NOT_EXPECTED on requesting the game info. Show a special * error popup in that case. */ - if (error == NETWORK_ERROR_NOT_EXPECTED && (this->status == STATUS_GAME_INFO || this->status == STATUS_COMPANY_INFO)) { + if (error == NETWORK_ERROR_NOT_EXPECTED && this->status == STATUS_GAME_INFO) { ShowErrorMessage(STR_NETWORK_ERROR_SERVER_TOO_OLD, INVALID_STRING_ID, WL_CRITICAL); return NETWORK_RECV_STATUS_CLOSE_QUERY; } diff --git a/src/network/network_client.h b/src/network/network_client.h index 37deece813..85f954a125 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -23,7 +23,6 @@ private: enum ServerStatus { STATUS_INACTIVE, ///< The client is not connected nor active. STATUS_GAME_INFO, ///< We are trying to get the game information. - STATUS_COMPANY_INFO, ///< We are trying to get company information. STATUS_JOIN, ///< We are trying to join a server. STATUS_NEWGRFS_CHECK, ///< Last action was checking NewGRFs. STATUS_AUTH_GAME, ///< Last action was requesting game (server) password. @@ -46,7 +45,6 @@ protected: NetworkRecvStatus Receive_SERVER_BANNED(Packet *p) override; NetworkRecvStatus Receive_SERVER_ERROR(Packet *p) override; NetworkRecvStatus Receive_SERVER_GAME_INFO(Packet *p) override; - NetworkRecvStatus Receive_SERVER_COMPANY_INFO(Packet *p) override; NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet *p) override; NetworkRecvStatus Receive_SERVER_NEED_GAME_PASSWORD(Packet *p) override; NetworkRecvStatus Receive_SERVER_NEED_COMPANY_PASSWORD(Packet *p) override; @@ -82,7 +80,7 @@ public: NetworkRecvStatus CloseConnection(NetworkRecvStatus status) override; void ClientError(NetworkRecvStatus res); - static NetworkRecvStatus SendInformationQuery(bool request_company_info); + static NetworkRecvStatus SendInformationQuery(); static NetworkRecvStatus SendJoin(); static NetworkRecvStatus SendCommand(const CommandPacket *cp); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index c817acc900..fecaa2e00a 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -362,64 +362,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendGameInfo() return NETWORK_RECV_STATUS_OKAY; } -/** Send the client information about the companies. */ -NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyInfo() -{ - /* Fetch the latest version of the stats */ - NetworkCompanyStats company_stats[MAX_COMPANIES]; - NetworkPopulateCompanyStats(company_stats); - - /* Make a list of all clients per company */ - std::string clients[MAX_COMPANIES]; - - /* Add the local player (if not dedicated) */ - const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); - if (ci != nullptr && Company::IsValidID(ci->client_playas)) { - clients[ci->client_playas] = ci->client_name; - } - - for (NetworkClientSocket *csi : NetworkClientSocket::Iterate()) { - std::string client_name = static_cast(csi)->GetClientName(); - - ci = csi->GetInfo(); - if (ci != nullptr && Company::IsValidID(ci->client_playas)) { - if (!clients[ci->client_playas].empty()) { - clients[ci->client_playas] += ", "; - } - - clients[ci->client_playas] += client_name; - } - } - - /* Now send the data */ - - Packet *p; - - for (const Company *company : Company::Iterate()) { - p = new Packet(PACKET_SERVER_COMPANY_INFO); - - p->Send_uint8 (NETWORK_COMPANY_INFO_VERSION); - p->Send_bool (true); - this->SendCompanyInformation(p, company, &company_stats[company->index]); - - if (clients[company->index].empty()) { - p->Send_string(""); - } else { - p->Send_string(clients[company->index]); - } - - this->SendPacket(p); - } - - p = new Packet(PACKET_SERVER_COMPANY_INFO); - - p->Send_uint8 (NETWORK_COMPANY_INFO_VERSION); - p->Send_bool (false); - - this->SendPacket(p); - return NETWORK_RECV_STATUS_OKAY; -} - /** * Send an error to the client, and close its connection. * @param error The error to disconnect for. @@ -835,11 +777,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GAME_INFO(Packe return this->SendGameInfo(); } -NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMPANY_INFO(Packet *p) -{ - return this->SendCompanyInfo(); -} - NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_NEWGRFS_CHECKED(Packet *p) { if (this->status != STATUS_NEWGRFS_CHECK) { @@ -1446,58 +1383,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MOVE(Packet *p) return NETWORK_RECV_STATUS_OKAY; } -/** - * Package some generic company information into a packet. - * @param p The packet that will contain the data. - * @param c The company to put the of into the packet. - * @param stats The statistics to put in the packet. - * @param max_len The maximum length of the company name. - */ -void NetworkSocketHandler::SendCompanyInformation(Packet *p, const Company *c, const NetworkCompanyStats *stats, uint max_len) -{ - /* Grab the company name */ - char company_name[NETWORK_COMPANY_NAME_LENGTH]; - SetDParam(0, c->index); - - assert(max_len <= lengthof(company_name)); - GetString(company_name, STR_COMPANY_NAME, company_name + max_len - 1); - - /* Get the income */ - Money income = 0; - if (_cur_year - 1 == c->inaugurated_year) { - /* The company is here just 1 year, so display [2], else display[1] */ - for (uint i = 0; i < lengthof(c->yearly_expenses[2]); i++) { - income -= c->yearly_expenses[2][i]; - } - } else { - for (uint i = 0; i < lengthof(c->yearly_expenses[1]); i++) { - income -= c->yearly_expenses[1][i]; - } - } - - /* Send the information */ - p->Send_uint8 (c->index); - p->Send_string(company_name); - p->Send_uint32(c->inaugurated_year); - p->Send_uint64(c->old_economy[0].company_value); - p->Send_uint64(c->money); - p->Send_uint64(income); - p->Send_uint16(c->old_economy[0].performance_history); - - /* Send 1 if there is a password for the company else send 0 */ - p->Send_bool (!_network_company_states[c->index].password.empty()); - - for (uint i = 0; i < NETWORK_VEH_END; i++) { - p->Send_uint16(stats->num_vehicle[i]); - } - - for (uint i = 0; i < NETWORK_VEH_END; i++) { - p->Send_uint16(stats->num_station[i]); - } - - p->Send_bool(c->is_ai); -} - /** * Populate the company stats. * @param stats the stats to update diff --git a/src/network/network_server.h b/src/network/network_server.h index 76bc95dbc9..419d1e6be0 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -25,7 +25,6 @@ class ServerNetworkGameSocketHandler : public NetworkClientSocketPool::PoolItem< protected: NetworkRecvStatus Receive_CLIENT_JOIN(Packet *p) override; NetworkRecvStatus Receive_CLIENT_GAME_INFO(Packet *p) override; - NetworkRecvStatus Receive_CLIENT_COMPANY_INFO(Packet *p) override; NetworkRecvStatus Receive_CLIENT_GAME_PASSWORD(Packet *p) override; NetworkRecvStatus Receive_CLIENT_COMPANY_PASSWORD(Packet *p) override; NetworkRecvStatus Receive_CLIENT_GETMAP(Packet *p) override; @@ -42,7 +41,6 @@ protected: NetworkRecvStatus Receive_CLIENT_MOVE(Packet *p) override; NetworkRecvStatus SendGameInfo(); - NetworkRecvStatus SendCompanyInfo(); NetworkRecvStatus SendNewGRFCheck(); NetworkRecvStatus SendWelcome(); NetworkRecvStatus SendNeedGamePassword(); From 579f393374c4fae2458523a674c453349fce7c59 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 15 Aug 2021 00:17:10 +0200 Subject: [PATCH 57/63] Add: open Online Players GUI on starting/joining a server (#9479) --- src/network/network_client.cpp | 2 ++ src/network/network_gui.cpp | 29 ++++++++++++++++------------- src/openttd.cpp | 3 +++ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 3196f4ce93..ccbdab3be3 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -868,6 +868,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet /* Say we received the map and loaded it correctly! */ SendMapOk(); + ShowClientList(); + /* New company/spectator (invalid company) or company we want to join is not active * Switch local company to spectator and await the server's judgement */ if (_network_join.company == COMPANY_NEW_COMPANY || !Company::IsValidID(_network_join.company)) { diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 503cebf4e8..7dc3c47372 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1579,15 +1579,15 @@ private: /** * Part of RebuildList() to create the information for a single company. * @param company_id The company to build the list for. - * @param own_ci The NetworkClientInfo of the client itself. + * @param client_playas The company the client is joined as. */ - void RebuildListCompany(CompanyID company_id, const NetworkClientInfo *own_ci) + void RebuildListCompany(CompanyID company_id, CompanyID client_playas) { ButtonCommon *chat_button = new CompanyButton(SPR_CHAT, company_id == COMPANY_SPECTATOR ? STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP : STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP, COLOUR_ORANGE, company_id, &NetworkClientListWindow::OnClickCompanyChat); if (_network_server) this->buttons[line_count].emplace_back(new CompanyButton(SPR_ADMIN, STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP, COLOUR_RED, company_id, &NetworkClientListWindow::OnClickCompanyAdmin, company_id == COMPANY_SPECTATOR)); this->buttons[line_count].emplace_back(chat_button); - if (own_ci->client_playas != company_id) this->buttons[line_count].emplace_back(new CompanyButton(SPR_JOIN, STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP, COLOUR_ORANGE, company_id, &NetworkClientListWindow::OnClickCompanyJoin, company_id != COMPANY_SPECTATOR && Company::Get(company_id)->is_ai)); + if (client_playas != company_id) this->buttons[line_count].emplace_back(new CompanyButton(SPR_JOIN, STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP, COLOUR_ORANGE, company_id, &NetworkClientListWindow::OnClickCompanyJoin, company_id != COMPANY_SPECTATOR && Company::Get(company_id)->is_ai)); this->line_count += 1; @@ -1618,6 +1618,7 @@ private: void RebuildList() { const NetworkClientInfo *own_ci = NetworkClientInfo::GetByClientID(_network_own_client_id); + CompanyID client_playas = own_ci == nullptr ? COMPANY_SPECTATOR : own_ci->client_playas; this->buttons.clear(); this->line_count = 0; @@ -1625,24 +1626,24 @@ private: this->player_self_index = -1; /* As spectator, show a line to create a new company. */ - if (own_ci->client_playas == COMPANY_SPECTATOR && !NetworkMaxCompaniesReached()) { + if (client_playas == COMPANY_SPECTATOR && !NetworkMaxCompaniesReached()) { this->buttons[line_count].emplace_back(new CompanyButton(SPR_JOIN, STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP, COLOUR_ORANGE, COMPANY_SPECTATOR, &NetworkClientListWindow::OnClickCompanyNew)); this->line_count += 1; } - if (own_ci->client_playas != COMPANY_SPECTATOR) { - this->RebuildListCompany(own_ci->client_playas, own_ci); + if (client_playas != COMPANY_SPECTATOR) { + this->RebuildListCompany(client_playas, client_playas); } /* Companies */ for (const Company *c : Company::Iterate()) { - if (c->index == own_ci->client_playas) continue; + if (c->index == client_playas) continue; - this->RebuildListCompany(c->index, own_ci); + this->RebuildListCompany(c->index, client_playas); } /* Spectators */ - this->RebuildListCompany(COMPANY_SPECTATOR, own_ci); + this->RebuildListCompany(COMPANY_SPECTATOR, client_playas); this->vscroll->SetCount(this->line_count); } @@ -2063,16 +2064,18 @@ public: } NetworkClientInfo *own_ci = NetworkClientInfo::GetByClientID(_network_own_client_id); - if (own_ci->client_playas == COMPANY_SPECTATOR && !NetworkMaxCompaniesReached()) { + CompanyID client_playas = own_ci == nullptr ? COMPANY_SPECTATOR : own_ci->client_playas; + + if (client_playas == COMPANY_SPECTATOR && !NetworkMaxCompaniesReached()) { this->DrawCompany(COMPANY_NEW_COMPANY, r.left, r.right, r.top, line); } - if (own_ci->client_playas != COMPANY_SPECTATOR) { - this->DrawCompany(own_ci->client_playas, r.left, r.right, r.top, line); + if (client_playas != COMPANY_SPECTATOR) { + this->DrawCompany(client_playas, r.left, r.right, r.top, line); } for (const Company *c : Company::Iterate()) { - if (own_ci->client_playas == c->index) continue; + if (client_playas == c->index) continue; this->DrawCompany(c->index, r.left, r.right, r.top, line); } diff --git a/src/openttd.cpp b/src/openttd.cpp index 0ea1fa75d9..db2bb3bdb7 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -65,6 +65,7 @@ #include "viewport_sprite_sorter.h" #include "framerate_type.h" #include "industry.h" +#include "network/network_gui.h" #include "linkgraph/linkgraphschedule.h" @@ -884,6 +885,8 @@ static void MakeNewGameDone() CheckEngines(); CheckIndustries(); MarkWholeScreenDirty(); + + if (_network_server && !_network_dedicated) ShowClientList(); } static void MakeNewGame(bool from_heightmap, bool reset_settings) From 2183fd4dabe72bd96b264bf8cdb3a2a8be625cf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20=C5=A0efl?= Date: Sun, 15 Aug 2021 11:17:05 +0200 Subject: [PATCH 58/63] Feature: [NewGRF] Maximum curve speed modifier for rail vehicles (#9346) --- src/engine_type.h | 1 + src/newgrf.cpp | 4 ++++ src/newgrf_engine.cpp | 15 +++++++++++---- src/newgrf_engine.h | 4 ++-- src/newgrf_properties.h | 1 + src/table/engines.h | 2 +- src/train.h | 10 ++++++++++ src/train_cmd.cpp | 8 ++++++++ 8 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/engine_type.h b/src/engine_type.h index 83f8dc307e..f0b6ea5450 100644 --- a/src/engine_type.h +++ b/src/engine_type.h @@ -59,6 +59,7 @@ struct RailVehicleInfo { byte tractive_effort; ///< Tractive effort coefficient byte air_drag; ///< Coefficient of air drag byte user_def_data; ///< Property 0x25: "User-defined bit mask" Used only for (very few) NewGRF vehicles + int16 curve_speed_mod; ///< Modifier to maximum speed in curves (fixed-point binary with 8 fractional bits) }; /** Information about a ship vehicle. */ diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 7c7d55dea7..8d2f5f9f90 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1331,6 +1331,10 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop break; } + case PROP_TRAIN_CURVE_SPEED_MOD: // 0x2E Curve speed modifier + rvi->curve_speed_mod = buf->ReadWord(); + break; + default: ret = CommonVehicleChangeInfo(ei, prop, buf); break; diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index fa26f7b68f..e574102247 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1177,16 +1177,23 @@ uint16 GetVehicleCallbackParent(CallbackID callback, uint32 param1, uint32 param /* Callback 36 handlers */ -uint GetVehicleProperty(const Vehicle *v, PropertyID property, uint orig_value) +int GetVehicleProperty(const Vehicle *v, PropertyID property, int orig_value, bool is_signed) { - return GetEngineProperty(v->engine_type, property, orig_value, v); + return GetEngineProperty(v->engine_type, property, orig_value, v, is_signed); } -uint GetEngineProperty(EngineID engine, PropertyID property, uint orig_value, const Vehicle *v) +int GetEngineProperty(EngineID engine, PropertyID property, int orig_value, const Vehicle *v, bool is_signed) { uint16 callback = GetVehicleCallback(CBID_VEHICLE_MODIFY_PROPERTY, property, 0, engine, v); - if (callback != CALLBACK_FAILED) return callback; + if (callback != CALLBACK_FAILED) { + if (is_signed) { + /* Sign extend 15 bit integer */ + return static_cast(callback << 1) >> 1; + } else { + return callback; + } + } return orig_value; } diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h index 90d755d3c4..f63134d9f6 100644 --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -100,8 +100,8 @@ bool UsesWagonOverride(const Vehicle *v); /* Handler to Evaluate callback 36. If the callback fails (i.e. most of the * time) orig_value is returned */ -uint GetVehicleProperty(const Vehicle *v, PropertyID property, uint orig_value); -uint GetEngineProperty(EngineID engine, PropertyID property, uint orig_value, const Vehicle *v = nullptr); +int GetVehicleProperty(const Vehicle *v, PropertyID property, int orig_value, bool is_signed = false); +int GetEngineProperty(EngineID engine, PropertyID property, int orig_value, const Vehicle *v = nullptr, bool is_signed = false); enum VehicleTrigger { VEHICLE_TRIGGER_NEW_CARGO = 0x01, diff --git a/src/newgrf_properties.h b/src/newgrf_properties.h index 835a873847..a33e02f165 100644 --- a/src/newgrf_properties.h +++ b/src/newgrf_properties.h @@ -28,6 +28,7 @@ enum PropertyID { PROP_TRAIN_SHORTEN_FACTOR = 0x21, ///< Shorter vehicles PROP_TRAIN_USER_DATA = 0x25, ///< User defined data for vehicle variable 0x42 PROP_TRAIN_CARGO_AGE_PERIOD = 0x2B, ///< Number of ticks before carried cargo is aged + PROP_TRAIN_CURVE_SPEED_MOD = 0x2E, ///< Modifier to maximum speed in curves PROP_ROADVEH_RUNNING_COST_FACTOR = 0x09, ///< Yearly runningcost PROP_ROADVEH_CARGO_CAPACITY = 0x0F, ///< Capacity diff --git a/src/table/engines.h b/src/table/engines.h index f6ce10bf13..ab6ba77467 100644 --- a/src/table/engines.h +++ b/src/table/engines.h @@ -386,7 +386,7 @@ static const EngineInfo _orig_engine_info[] = { * Tractive effort coefficient by default is the same as TTDPatch, 0.30*256=76 * Air drag value depends on the top speed of the vehicle. */ -#define RVI(a, b, c, d, e, f, g, h, i, j, k) { a, b, c, j, d, e, f, g, h, k, i, 0, 0, 0, VE_DEFAULT, 0, 76, 0, 0 } +#define RVI(a, b, c, d, e, f, g, h, i, j, k) { a, b, c, j, d, e, f, g, h, k, i, 0, 0, 0, VE_DEFAULT, 0, 76, 0, 0, 0 } #define M RAILVEH_MULTIHEAD #define W RAILVEH_WAGON #define G RAILVEH_SINGLEHEAD diff --git a/src/train.h b/src/train.h index af638c283d..0b7b7be5bf 100644 --- a/src/train.h +++ b/src/train.h @@ -72,6 +72,7 @@ struct TrainCache { /* cached values, recalculated on load and each time a vehicle is added to/removed from the consist. */ bool cached_tilt; ///< train can tilt; feature provides a bonus in curves + int cached_curve_speed_mod; ///< curve speed modifier of the entire train byte user_def_data; ///< Cached property 0x25. Can be set by Callback 0x36. @@ -312,6 +313,15 @@ protected: // These functions should not be called outside acceleration code. return GetRailTypeInfo(GetRailType(this->tile))->max_speed; } + /** + * Returns the curve speed modifier of this vehicle. + * @return Current curve speed modifier, in fixed-point binary representation with 8 fractional bits. + */ + inline int GetCurveSpeedModifier() const + { + return GetVehicleProperty(this, PROP_TRAIN_CURVE_SPEED_MOD, RailVehInfo(this->engine_type)->curve_speed_mod, true); + } + /** * Checks if the vehicle is at a tile that can be sloped. * @return True if the tile can be sloped. diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 17e298c33d..1498a5fad5 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -115,6 +115,7 @@ void Train::ConsistChanged(ConsistChangeFlags allowed_changes) this->compatible_railtypes = RAILTYPES_NONE; bool train_can_tilt = true; + int min_curve_speed_mod = INT_MAX; for (Train *u = this; u != nullptr; u = u->Next()) { const RailVehicleInfo *rvi_u = RailVehInfo(u->engine_type); @@ -146,6 +147,7 @@ void Train::ConsistChanged(ConsistChangeFlags allowed_changes) const RailVehicleInfo *rvi_u = &e_u->u.rail; if (!HasBit(e_u->info.misc_flags, EF_RAIL_TILTS)) train_can_tilt = false; + min_curve_speed_mod = std::min(min_curve_speed_mod, u->GetCurveSpeedModifier()); /* Cache wagon override sprite group. nullptr is returned if there is none */ u->tcache.cached_override = GetWagonOverrideSpriteSet(u->engine_type, u->cargo_type, u->gcache.first_engine); @@ -229,6 +231,7 @@ void Train::ConsistChanged(ConsistChangeFlags allowed_changes) /* store consist weight/max speed in cache */ this->vcache.cached_max_speed = max_speed; this->tcache.cached_tilt = train_can_tilt; + this->tcache.cached_curve_speed_mod = min_curve_speed_mod; this->tcache.cached_max_curve_speed = this->GetCurveSpeedLimit(); /* recalculate cached weights and power too (we do this *after* the rest, so it is known which wagons are powered and need extra weight added) */ @@ -357,6 +360,11 @@ int Train::GetCurveSpeedLimit() const /* Apply max_speed bonus of 20% for a tilting train */ max_speed += max_speed / 5; } + + /* Apply max_speed modifier (cached value is fixed-point binary with 8 fractional bits) + * and clamp the result to an acceptable range. */ + max_speed += (max_speed * this->tcache.cached_curve_speed_mod) >> 8; + max_speed = Clamp(max_speed, 2, absolute_max_speed); } return max_speed; From ee333a954934fee206a65795670d15150178c0f3 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 15 Aug 2021 12:14:53 +0200 Subject: [PATCH 59/63] Fix 2183fd4d: [NewGRF] Use divide instead of right shift for signed numbers. (#9480) "For negative a, the value of a >> b is implementation-defined (in most implementations, this performs arithmetic right shift, so that the result remains negative)." --- src/newgrf_engine.cpp | 2 +- src/train_cmd.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index e574102247..ee4af5e6a0 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1189,7 +1189,7 @@ int GetEngineProperty(EngineID engine, PropertyID property, int orig_value, cons if (callback != CALLBACK_FAILED) { if (is_signed) { /* Sign extend 15 bit integer */ - return static_cast(callback << 1) >> 1; + return static_cast(callback << 1) / 2; } else { return callback; } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 1498a5fad5..f926be6374 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -363,7 +363,7 @@ int Train::GetCurveSpeedLimit() const /* Apply max_speed modifier (cached value is fixed-point binary with 8 fractional bits) * and clamp the result to an acceptable range. */ - max_speed += (max_speed * this->tcache.cached_curve_speed_mod) >> 8; + max_speed += (max_speed * this->tcache.cached_curve_speed_mod) / 256; max_speed = Clamp(max_speed, 2, absolute_max_speed); } From eca73a810c19ed5cfb3f24cb5560d0735e19ea00 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 14 Aug 2021 18:28:35 +0200 Subject: [PATCH 60/63] Change: rebrand 1.12.0 to 12.0 One question that keeps popping up: "when do we release 2.0?". NewGRF will force that at least 1.16 will be 2.0, but to not wait for this, let's drop the "1." and be for ever done with that conversation. We are following in the footstep of giants here. --- CMakeLists.txt | 3 +-- bin/ai/CMakeLists.txt | 2 +- bin/ai/{compat_1.12.nut => compat_12.nut} | 0 bin/game/CMakeLists.txt | 2 +- bin/game/{compat_1.12.nut => compat_12.nut} | 0 cmake/scripts/FindVersion.cmake | 3 --- known-bugs.txt | 2 -- regression/regression/info.nut | 2 +- regression/stationlist/info.nut | 2 +- src/ai/ai_info.cpp | 2 +- src/game/game_info.cpp | 2 +- src/os/windows/ottdres.rc.in | 4 ++-- src/rev.cpp.in | 11 +++++++---- src/script/api/ai_changelog.hpp | 2 +- src/script/api/game_changelog.hpp | 2 +- src/script/api/script_controller.hpp | 15 ++++++++++++--- 16 files changed, 30 insertions(+), 24 deletions(-) rename bin/ai/{compat_1.12.nut => compat_12.nut} (100%) rename bin/game/{compat_1.12.nut => compat_12.nut} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 36d504e105..37e8697e40 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ if(NOT BINARY_NAME) endif() project(${BINARY_NAME} - VERSION 1.12.0 + VERSION 12.0 ) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) @@ -76,7 +76,6 @@ add_custom_target(find_version -DCPACK_BINARY_DIR=${CMAKE_BINARY_DIR} -DREV_MAJOR=${PROJECT_VERSION_MAJOR} -DREV_MINOR=${PROJECT_VERSION_MINOR} - -DREV_BUILD=${PROJECT_VERSION_PATCH} -DWINDOWS=${WIN32} -P "${CMAKE_SOURCE_DIR}/cmake/scripts/FindVersion.cmake" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} diff --git a/bin/ai/CMakeLists.txt b/bin/ai/CMakeLists.txt index 83eb11962d..9417004fce 100644 --- a/bin/ai/CMakeLists.txt +++ b/bin/ai/CMakeLists.txt @@ -12,7 +12,7 @@ set(AI_COMPAT_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.9.nut ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut - ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.12.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_12.nut ) foreach(AI_COMPAT_SOURCE_FILE IN LISTS AI_COMPAT_SOURCE_FILES) diff --git a/bin/ai/compat_1.12.nut b/bin/ai/compat_12.nut similarity index 100% rename from bin/ai/compat_1.12.nut rename to bin/ai/compat_12.nut diff --git a/bin/game/CMakeLists.txt b/bin/game/CMakeLists.txt index 508254e1f2..55a992be32 100644 --- a/bin/game/CMakeLists.txt +++ b/bin/game/CMakeLists.txt @@ -9,7 +9,7 @@ set(GS_COMPAT_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.9.nut ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.10.nut ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.11.nut - ${CMAKE_CURRENT_SOURCE_DIR}/compat_1.12.nut + ${CMAKE_CURRENT_SOURCE_DIR}/compat_12.nut ) foreach(GS_COMPAT_SOURCE_FILE IN LISTS GS_COMPAT_SOURCE_FILES) diff --git a/bin/game/compat_1.12.nut b/bin/game/compat_12.nut similarity index 100% rename from bin/game/compat_1.12.nut rename to bin/game/compat_12.nut diff --git a/cmake/scripts/FindVersion.cmake b/cmake/scripts/FindVersion.cmake index 43255e8011..c4ff99a7fd 100644 --- a/cmake/scripts/FindVersion.cmake +++ b/cmake/scripts/FindVersion.cmake @@ -6,9 +6,6 @@ endif() if(NOT REV_MINOR) set(REV_MINOR 0) endif() -if(NOT REV_BUILD) - set(REV_BUILD 0) -endif() # # Finds the current version of the current folder. diff --git a/known-bugs.txt b/known-bugs.txt index 4e9e3e9b5e..1b9a465af7 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,4 @@ OpenTTD's known bugs -Last updated: 2021-04-01 -Release version: 1.11.0 ------------------------------------------------------------------------ diff --git a/regression/regression/info.nut b/regression/regression/info.nut index 50c9fa5146..1a52cfebbb 100644 --- a/regression/regression/info.nut +++ b/regression/regression/info.nut @@ -4,7 +4,7 @@ class Regression extends AIInfo { function GetShortName() { return "REGR"; } function GetDescription() { return "This runs regression-tests on some commands. On the same map the result should always be the same."; } function GetVersion() { return 1; } - function GetAPIVersion() { return "1.12"; } + function GetAPIVersion() { return "12"; } function GetDate() { return "2007-03-18"; } function CreateInstance() { return "Regression"; } function UseAsRandomAI() { return false; } diff --git a/regression/stationlist/info.nut b/regression/stationlist/info.nut index 0558ccc1fb..ad91c7645c 100644 --- a/regression/stationlist/info.nut +++ b/regression/stationlist/info.nut @@ -4,7 +4,7 @@ class StationList extends AIInfo { function GetShortName() { return "REGS"; } function GetDescription() { return "This runs stationlist-tests on some commands. On the same map the result should always be the same."; } function GetVersion() { return 1; } - function GetAPIVersion() { return "1.12"; } + function GetAPIVersion() { return "12"; } function GetDate() { return "2007-03-18"; } function CreateInstance() { return "StationList"; } function UseAsRandomAI() { return false; } diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 10d34ea58a..17ad012579 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -25,7 +25,7 @@ */ static bool CheckAPIVersion(const char *api_version) { - static const std::set versions = { "0.7", "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11", "1.12" }; + static const std::set versions = { "0.7", "1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11", "12" }; return versions.find(api_version) != versions.end(); } diff --git a/src/game/game_info.cpp b/src/game/game_info.cpp index 60b4d0dcca..98818e8dd1 100644 --- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -23,7 +23,7 @@ */ static bool CheckAPIVersion(const char *api_version) { - static const std::set versions = { "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11", "1.12" }; + static const std::set versions = { "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11", "12" }; return versions.find(api_version) != versions.end(); } diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index 31309382cf..279389a04c 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -77,8 +77,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION ${REV_MAJOR},${REV_MINOR},${REV_BUILD},${REV_ISODATE} - PRODUCTVERSION ${REV_MAJOR},${REV_MINOR},${REV_BUILD},${REV_ISODATE} + FILEVERSION ${REV_MAJOR},${REV_MINOR},0,${REV_ISODATE} + PRODUCTVERSION ${REV_MAJOR},${REV_MINOR},0,${REV_ISODATE} FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 3939ca5a0e..337519ee28 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -75,14 +75,17 @@ const byte _openttd_revision_tagged = ${REV_ISTAG}; /** * The NewGRF revision of OTTD: * bits meaning. - * 28-31 major version - * 24-27 minor version - * 20-23 build + * 24-31 major version + 16 + * 20-23 minor version * 19 1 if it is a release, 0 if it is not. * 0-18 used to be the SVN revision, now just last revision before switch to git * * The 19th bit is there so the development/betas/alpha, etc. leading to a * final release will always have a lower version number than the released * version, thus making comparisons on specific revisions easy. + * + * The + 16 for the major version is because we went from 1.11.0 to 12.0, dropping + * the "patch" part of the version. To make sure "1.11.0" is smaller than "12.0", we + * have to adjust the major by 16. */ -const uint32 _openttd_newgrf_version = ${REV_MAJOR} << 28 | ${REV_MINOR} << 24 | ${REV_BUILD} << 20 | ${REV_ISSTABLETAG} << 19 | 28004; +const uint32 _openttd_newgrf_version = (${REV_MAJOR} + 16) << 24 | ${REV_MINOR} << 20 | ${REV_ISSTABLETAG} << 19 | 28004; diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 6e32838203..e5699a7d47 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -13,7 +13,7 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * - * \b 1.12.0 + * \b 12.0 * * This version is not yet released. The following changes are not set in stone yet. * diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 5d214efb12..d3efea9197 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -13,7 +13,7 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * - * \b 1.12.0 + * \b 12.0 * * This version is not yet released. The following changes are not set in stone yet. * diff --git a/src/script/api/script_controller.hpp b/src/script/api/script_controller.hpp index 992a9ebf22..d0bb129e9d 100644 --- a/src/script/api/script_controller.hpp +++ b/src/script/api/script_controller.hpp @@ -135,11 +135,20 @@ public: /** * Get the OpenTTD version of this executable. The version is formatted * with the bits having the following meaning: - * 28-31 major version - * 24-27 minor version - * 20-23 build + * 24-31 major version + 16. + * 20-23 minor version. * 19 1 if it is a release, 0 if it is not. * 0-18 revision number; 0 when the revision is unknown. + * You have to subtract 16 from the major version to get the correct + * value. + * + * Prior to OpenTTD 12, the bits have the following meaning: + * 28-31 major version. + * 24-27 minor version. + * 20-23 build. + * 19 1 if it is a release, 0 if it is not. + * 0-18 revision number; 0 when the revision is unknown. + * * @return The version in newgrf format. */ static uint GetVersion(); From 43c4c9d560d1e171230244fe72ac0304fa68af14 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 14 Aug 2021 13:12:14 +0200 Subject: [PATCH 61/63] Doc: Prepare for 12.0-beta1 release --- changelog.txt | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/changelog.txt b/changelog.txt index b7d9da8250..a661cab6ec 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,99 @@ +12.0-beta1 (2021-08-15) +------------------------------------------------------------------------ +Feature: [Network] Remove lobby window; pressing "Join Game" now immediately joins a server (#9467) +Feature: [Network] Synchronize server name to clients and display in Online Players window (#9472) +Feature: [Network] Mention you are a spectator in the status bar (#9471) +Feature: [Network] No longer require port-forwarding to host a server (#9443, #9447) +Feature: [Network] Allow setting your server visibility to "invite-only" (#9434) +Feature: [Network] Join servers based on their invite code (#9432) +Feature: Raise the maximum NewGRF limit to 255 (#9428) +Feature: Persistent rotation of numbered auto/netsave after restart (#9395, #9397) +Feature: [NewGRF] Maximum curve speed modifier for rail vehicles (#9346) +Feature: Move sensitive information to secrets.cfg and private information to private.cfg (#9298) +Feature: Signed Windows builds (#9294) +Feature: [NewGRF] Define refittability of default vehicles using cargo classes (#9148) +Feature: Configurable subsidy duration, up to 5000 years (#9081) +Feature: [Network] Rework in-game Online Players window (#9067) +Feature: [Network] Show previous chat history when the chat message box is open (#9025) +Feature: Button to reset game settings to their default values (#8958) +Feature: Press Ctrl to build diagonal rivers in Scenario Editor (#8880) +Feature: Set wagon replacement per group when using autoreplace (#7441) +Add: [Network] Open Online Players window on starting/joining a server (#9479) +Add: [Script] Basic information about loaded NewGRFs for scripts (#9464) +Add: [AI] Get the number of vehicles in a given group (#9462) +Add: [Network] Inform network clients what game-script a server is running (#9441) +Add: Hindi translation (#9086) +Add: [Network] Ensure players fill in a name instead of defaulting to "Player" (#9080) +Change: Allow pause/unpause console command in single player (#9342) +Change: Make savegame format self-descriptive and consistent across all objects (#9322, #9335, #9338, #9339) +Change: By default, make "unload all" leave stations empty (#9301) +Change: Reworked the debug levels and messages for network logs (#9230, #9251) +Change: [Emscripten] Set default scrolling mode to non-pointer-locking (#9191) +Change: Use neutral pronouns for various strings (#9189, #9203, #9228) +Change: Make the town directory horizontally resizable (#9157) +Change: Allow non-ASCII currency separators (#9121) +Change: [NewGRF] Display a pop-up window for Errors with severity ERROR (#9119) +Change: Treat languages as finished, if translations are 75% completed (#9019, #9086) +Change: Disable NewGRF window apply button if no change was made (#8934) +Fix: [Script] Crash when iterating lists of which the key is larger than 32bit (#9465) +Fix: [Network] Desync due to use of unstable sort when distributing cargo production (#9460) +Fix #9440: Negative cargo payments not being handled correctly (#9455) +Fix: [Network] Crash when joining a server again after a TCP disconnect (#9453) +Fix: Don't enable rename button for network clients in build vehicle window (#9452) +Fix: Money could underflow and wrap around (#9451) +Fix: Parse the console settings the same way as config settings (#9438) +Fix: Ensure no more than the allowed number of NewGRFs are loaded from the configuration (#9430) +Fix: [NewGRF] Overflow when determining cargo mask for string code 9A 1E (#9423) +Fix: Integers for scripts are 64bit, but saved as 32bit (#9415) +Fix #9392: [Script] Return a valid value with GetBuildWithRefitCapacity even when AIs are maxed out in vehicles (#9393) +Fix #8169: Crash when autoreplacing vehicle with no orders (#9387) +Fix: Wrong cargo line position in IndustryCargo window (#9383) +Fix: Race-condition during startup of NewGRF scan (#9382) +Fix: Don't propagate Shift/Ctrl state till next game-tick (#9381) +Fix: Prevent palette updates during copying to the video driver (#9379) +Fix: [Network] Determining GetNetworkRevisionString could overflow and underflow its buffer (#9372) +Fix #9358: Don't skip empty files in tar archives (#9367) +Fix: For old savegames, station bus/truck station cache was not updated (#9366) +Fix #9353: [Script] Garbage collecting on priority queues could crash the game (#9356) +Fix: Respect the autosave_on_exit setting for Null video driver (#9343) +Fix: Compatible NewGRFs in crash-log reported wrong MD5 hash (#9340) +Fix: [Script] Ensure the saved script strings are properly validated and terminated (#9336) +Fix #9316: Town bridge length limit check incorrect above 250k inhabitants (#9318) +Fix: Limit heightmap sizes to 8192x8192 (#9307) +Fix #9281: Money generating exploit when buying out a company (#9300) +Fix: Part of a tile might not be redrawn when terraforming (#9296) +Fix: [OpenGL] Increase timeout when waiting for the GPU to be done with the drawing buffer (#9282) +Fix: Vehicles sent in the wrong direction if there is no path to the destination (#9280) +Fix #9264: Do not attach temporary wagons to free wagon chains when autoreplacing (#9278) +Fix #9267: [Script] Crash during garbage collection (#9275) +Fix: Encountering two-way red signals could prune unrelated Pathfinder branches (#9271) +Fix #9255: [Network] Crash when hostname is not found (#9259) +Fix #9256: Invalid read after free when replacing train chains (#9258) +Fix: [Emscripten] Force secure WebSockets over HTTPS (#9248) +Fix #9242: Tree tick handler did not scale by map size (#9246) +Fix: [Network] Mark server as offline when no longer reachable (#9244) +Fix: [Network] Don't rebuild the host-list during iterating the list (#9240) +Fix: [Network] Don't mark the last-joined server as a manually added server (#9239) +Fix: [Network] Clients leaving because of broken connections was not broadcasted (#9238) +Fix: [Network] Check on CIDR for netmask check considered everything valid (#9235) +Fix: Creating screenshots on dedicated servers failed (#9232) +Fix: Leaking file descriptors for downloaded content (#9229) +Fix: Spelling of several town names (#9222) +Fix #9209: Game hangs when resizing highscore/news window if the screen is too small (#9210) +Fix: [Network] Optimize creating network connections for clients using IPv4 and IPv6 (#9199) +Fix #9186: Fix incorrect bounding box height causing station sprite glitch (#9187) +Fix: Truncating strings in settings could leave invalid UTF-8 characters (#9121) +Fix: Many issues related to window scaling (#9087, #9219) +Fix: Invalidate cached vehicle colourmaps when changing liveries setting (#9006) +Fix #8981: Don't attempt to re-reserve path if already entering/entered depot (#9000) +Fix: Missing 'Town names:' colon in map gen GUI (#8986) +Fix: Sorting and filtering industries that produce/accept many cargoes (#8468) +Remove: [Network] COMPANY_INFO packets (#9475) +Remove: [Network] A server can no longer set a limit to the amount of spectators allowed (#9466) +Remove: Arbitrary limit on number of statically loaded NewGRFs (#9431) +Remove: [Network] Language and map-name from server information (#9070) + + 1.11.2 (2021-05-03) ------------------------------------------------------------------------ Change: [Win32] Limit hardware accelerated video driver to OpenGL 3.2 or higher (#9077) From cb9a2dec0d847a9130a7a3ee9a8418035f37483e Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 15 Aug 2021 11:06:15 +0000 Subject: [PATCH 62/63] Update: Translations from eints portuguese: 1 change by azulcosta --- src/lang/afrikaans.txt | 25 ------------------------- src/lang/arabic_egypt.txt | 25 ------------------------- src/lang/basque.txt | 25 ------------------------- src/lang/belarusian.txt | 25 ------------------------- src/lang/brazilian_portuguese.txt | 25 ------------------------- src/lang/bulgarian.txt | 25 ------------------------- src/lang/catalan.txt | 25 ------------------------- src/lang/chuvash.txt | 6 ------ src/lang/croatian.txt | 25 ------------------------- src/lang/czech.txt | 25 ------------------------- src/lang/danish.txt | 25 ------------------------- src/lang/dutch.txt | 25 ------------------------- src/lang/english_AU.txt | 25 ------------------------- src/lang/english_US.txt | 25 ------------------------- src/lang/esperanto.txt | 25 ------------------------- src/lang/estonian.txt | 25 ------------------------- src/lang/faroese.txt | 25 ------------------------- src/lang/finnish.txt | 25 ------------------------- src/lang/french.txt | 25 ------------------------- src/lang/frisian.txt | 19 ------------------- src/lang/gaelic.txt | 25 ------------------------- src/lang/galician.txt | 25 ------------------------- src/lang/german.txt | 25 ------------------------- src/lang/greek.txt | 25 ------------------------- src/lang/hebrew.txt | 25 ------------------------- src/lang/hindi.txt | 7 ------- src/lang/hungarian.txt | 25 ------------------------- src/lang/icelandic.txt | 25 ------------------------- src/lang/ido.txt | 6 ------ src/lang/indonesian.txt | 25 ------------------------- src/lang/irish.txt | 25 ------------------------- src/lang/italian.txt | 25 ------------------------- src/lang/japanese.txt | 25 ------------------------- src/lang/korean.txt | 25 ------------------------- src/lang/latin.txt | 25 ------------------------- src/lang/latvian.txt | 25 ------------------------- src/lang/lithuanian.txt | 25 ------------------------- src/lang/luxembourgish.txt | 25 ------------------------- src/lang/macedonian.txt | 6 ------ src/lang/malay.txt | 25 ------------------------- src/lang/maltese.txt | 6 ------ src/lang/marathi.txt | 8 -------- src/lang/norwegian_bokmal.txt | 25 ------------------------- src/lang/norwegian_nynorsk.txt | 25 ------------------------- src/lang/persian.txt | 25 ------------------------- src/lang/polish.txt | 25 ------------------------- src/lang/portuguese.txt | 26 +------------------------- src/lang/romanian.txt | 25 ------------------------- src/lang/russian.txt | 25 ------------------------- src/lang/serbian.txt | 25 ------------------------- src/lang/simplified_chinese.txt | 25 ------------------------- src/lang/slovak.txt | 25 ------------------------- src/lang/slovenian.txt | 25 ------------------------- src/lang/spanish.txt | 25 ------------------------- src/lang/spanish_MX.txt | 25 ------------------------- src/lang/swedish.txt | 25 ------------------------- src/lang/tamil.txt | 23 ----------------------- src/lang/thai.txt | 25 ------------------------- src/lang/traditional_chinese.txt | 25 ------------------------- src/lang/turkish.txt | 25 ------------------------- src/lang/ukrainian.txt | 25 ------------------------- src/lang/urdu.txt | 25 ------------------------- src/lang/vietnamese.txt | 25 ------------------------- src/lang/welsh.txt | 25 ------------------------- 64 files changed, 1 insertion(+), 1481 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 7ad80533ba..b13d9ca2c9 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1983,31 +1983,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Ander sp STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Tik 'n naam in vir die netwerk speeletjie -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multispeler spel tuiste - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Berei tans voor om te verbind: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}'n Lys van alle ondernemings tans in hierdie speletjie. U kan een van beide sluit aan een of begin 'n nuwe een indien daar is 'n vry maatskappy gleuf - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}MAATSKAPPY INFORMASIE -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Maatskappy naam: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inwyding: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Maatskappy boekwaarde: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Huidige kontantvloei: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Vorige jaar se inkomste: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Werkverrignting: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Voertuie: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stasies: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spelers: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nuwe Maatskappy -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Skep 'n nuwe maatskappy -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Aanskou speletjie -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Bekyk die spel as 'n aanskouer -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Verbind maatskappy -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hulp om die maatskappy te bestuur - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Besig om the konnek... diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index adf46c42ae..46e0e2979a 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1679,31 +1679,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}اللا STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}أدخل أسم اللعبة للشبكة -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}ردهة تعدد اللاعبين - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}التحضير لالانضمام الى:{ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}قائمة بالشركات الموجودة باللعبة ، يمكنك الإنضمام لشركة أو تأسيس واحدة - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}معلومات الشركة -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}أسم الشركة:{WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}افتتاح:{WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}قيمة الشركة:{WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}الرصيد الحالي:{WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}دخل السنة الماضية:{WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}الأداء:{WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}مركبة:{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}محطات:{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}لاعبين:{WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}شركة جديدة -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}أنشئ شركة جديدة -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}شاهد اللعبة -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}شاهد اللعبة كامشاهد -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}أنضم لشركة -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}ساعد في إدارة الشركة - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}إتصال... diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 35851034f2..c3f8f865cd 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1858,31 +1858,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Beste jo STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Sare joko batentzako izena sartu -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multijokalari joko itxia - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Sartzeko prestatzen: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Joko honetan egun dauden konpainien zerrenda. Konpainia batera batu zaitezke edo konpainia berria sortu dezakezu lekua badago - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}KONPAINIA INFORMAZIOA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Konpainia izena: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Sortutako urtea: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Konpainiaren balioa: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Egungo balorazioa: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Iazko diru sarrerak: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Errendimendua: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Ibilgailuak: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Geltokiak: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Jokalariak: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Konpainia berria -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Konpainia berria sortu -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Ikusle jokoa -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Jokoan ikusle bezala sartu -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Konpainian sartu -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Konpainia hau kudeatzen lagundu - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Konektatzen... diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 34efa6a2a4..8a26eee0b3 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2293,31 +2293,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Іншы STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Увядзіце назву сеткавай гульні -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Вітальня сеткавай гульні - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Падрыхтоўка далучэньня: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Сьпіс кампаніяў, якія зараз у гульні. Вы можаце далучыцца да якойсьці існуючай або адкрыць сваю, калі ёсьць вольны слот - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}ІНФАРМАЦЫЯ АБ КАМПАНІІ -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Назва кампаніі: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Заснавана: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Кошт кампаніі: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Бягучы балянс: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Прыбытак летась: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Прадукцыйнасьць: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Транспарт: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Станцыi: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Гульцы: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Новая кампанія -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Заснаваць новую кампанію -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Назіраць за гульнёй -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Сачыць за гульнёй у якасьці гледача -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Далучыцца да кампаніі -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Далучыцца да кампаніі й дапамагчы ў кіраваньні ёю - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Злучэньне... diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 3b725078a3..22cbc9b506 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2086,31 +2086,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Outros j STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Coloque o nome para o jogo em rede -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Sala de espera do jogo - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparando para conectar em: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista de todas as empresas ativas no jogo. Você pode juntar-se a uma delas ou iniciar uma nova empresa. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFORMAÇÃO DA EMPRESA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nome da empresa: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguração: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Valor da empresa: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Balanço atual: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Desempenho: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Veículos: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Estações: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Jogadores: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nova empresa -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Criar uma nova empresa -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Observar jogo -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Ver jogo como um espectador -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Unir-se à empresa -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Auxiliar na gestão desta empresa - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Conectando... diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 4ae686fbb5..b40cfa0cfc 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1904,31 +1904,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Друг STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Въведете име за мрежовата игра -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Преддверие на мрежовите игри - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Подготовка за присъединяване: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Списък с всички компании в играта. Можете да се присъедините към някоя или да започнете нова ако има свободно място - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}ИНФОРМАЦИЯ ЗА КОМПАНИЯ -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Име на компания: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Основаване: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Стойност на компанията: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Текущ баланс: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Приход от предходната година: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Представяне: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Превозни средства: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Станции: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Играчи: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Нова компания -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Създаване на нова компания -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Наблюдаване на играта -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Наблюдаване на играта като наблюдател -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Присъединяване към компания -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Помощ за управлението на компанията - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Свързване... diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 1a08864346..54d06fba0f 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2086,31 +2086,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Els altr STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Posa el nom de la partida en xarxa -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Lobby de partida multijugador - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparant per connectar: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Una llista de totes les companyies actuals en aquesta partida. Podeu utilitzar-ne una o bé iniciar-ne una de nova si hi ha algun lloc lliure. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFORMACIÓ DE LA COMPANYIA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nom companyia: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguració: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Valor de la companyia: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Balanç actual: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Ingressos del darrer any: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Rendiment: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vehicles: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Estacions: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Jugadors: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Crea companyia nova -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Obre una nova companyia. -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Espectador -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Veure la partida com a espectador -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Uneix-te a la companyia -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Ajuda a gestionar aquesta companyia - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Connectant... diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 04fafa0995..0ae6cf68fa 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -774,12 +774,6 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн -# Network game lobby - - - - - # Network connecting window ############ Leave those lines in this order!! diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 1b9e892ed4..bf19573632 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2088,31 +2088,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Drugi ig STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Upišite ime mrežne igre -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Predvorje igre za više igrača - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Pripremanje za pridruživanje: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Popis svih tvrtki trenutno u igri. Možete se pridružiti jednoj ili osnovati novu ako postoji slobodno mjesto - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}PODACI O TVRTKI -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Ime tvrtke: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Ustoličenje: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Vrijednost tvrtke: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Trenutno stanje: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Prošlogodišnji prihod: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Učinkovitost: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vozila: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Postaje: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Igrači: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nova tvrtka -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Otvori novu tvrtku -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Gledaj igru -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Promatraj igru kao gledatelj -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Pridruži se tvrtki -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Pomozi upravljati ovom tvrtkom - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Spajanje... diff --git a/src/lang/czech.txt b/src/lang/czech.txt index d67de0e7ce..7be291914d 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2145,31 +2145,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aby osta STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Zadej jméno této síťové hry -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Vstupní místnost do hry více hráčů - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Připravuji se na vstoupení: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Současný seznam všech společností v této hře. Buď můžeš do jedné vstoupit, nebo můžeš založit novou - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFO O SPOLEČNOSTI -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Jméno společnosti: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Založeno: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Hodnota společnosti: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Stav na účtu: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Loňský hrubý zisk: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Výkon: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vozidla: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stanice: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Hráči: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nová společnost -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Založit novou společnost -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Navštívit hru -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Připojit se do hry jako pozorovatel -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Vstoupit do společnosti -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Pomoz vést tuto společnost - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Připojování... diff --git a/src/lang/danish.txt b/src/lang/danish.txt index fa0cc6f846..ec5f9e8e17 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1997,31 +1997,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andre sp STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Skriv et navn for netværksspillet -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Netværksspils lobby - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Forbereder tilslutning: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}En liste over alle selskaber i spillet lige nu. Du kan enten tilslutte dig et eller starte et nyt, hvis der er plads til flere selskaber - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}SELSKABSINFO -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Selskabsnavn: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Grundlagt: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Virksomhedens værdi: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Nuværende beholdning: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Sidste års indtægt: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Præstation: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Køretøjer: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stationer: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spillere: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nyt selskab -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Opret et nyt selskab -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Tilskuer -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Tilslut spillet som tilskuer -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Tilslut dig selskab -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hjælp med at bestyrre dette selskab - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Tilslutter... diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index cd860471ec..f74335cc90 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2085,31 +2085,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andere s STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Geef de naam van het netwerkspel -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Verzamelkamer voor netwerkspellen - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Klaar om deel te nemen: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Een lijst met alle bedrijven die momenteel in dit spel bestaan. Je kan meedoen met een bestaand bedrijf of een nieuw bedrijf beginnen - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}BEDRIJFSINFORMATIE -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Bedrijfsnaam: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Gestart in: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Bedrijfswaarde: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Huidige kas: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Inkomen vorig jaar: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Prestatie: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Voertuigen: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stations: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spelers: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nieuw bedrijf -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Start een nieuw bedrijf -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Bekijk spel -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Bekijk het spel als een toeschouwer -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Meedoen met dit bedrijf -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Help met het beheren van dit bedrijf - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Verbinden... diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 215e1c5d0c..04abaee782 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1914,31 +1914,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Other pl STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Enter a name for the network game -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multiplayer game lobby - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparing to join: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}A list of all companies currently in this game. You can either join one or start a new one if there is a free company slot - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}COMPANY INFO -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Company name: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguration: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Company value: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Current balance: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Last year's income: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Performance: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vehicles: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stations: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Players: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}New company -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Spectate game -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Watch the game as a spectator -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Join company -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Help manage this company - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Connecting... diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 6b1e975bff..4939bd3a4c 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2085,31 +2085,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Other pl STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Enter a name for the network game -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multiplayer game lobby - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparing to join: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}A list of all companies currently in this game. You can either join one or start a new one if there is a free company slot - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}COMPANY INFO -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Company name: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguration: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Company value: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Current balance: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Last year's income: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Performance: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vehicles: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stations: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Players: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}New company -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Spectate game -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Watch the game as a spectator -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Join company -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Help manage this company - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Connecting... diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 77b244110a..4d60d5a9af 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1598,31 +1598,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aliaj lu STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Tajpu nomon por la retludo -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Atendejo por plurludantaj ludoj - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparanta por aliĝi: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Listo da kompanioj haveblaj en ĉi tiu ludo. Vi povas aliĝi al unu aŭ komenci novan kompanion se restas loko - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}KOMPANIAJ INFORMOJ -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Kompaninomo: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inaŭguro: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Kompanivaloro: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Nuna monstato: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Lastjara enspezo: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Rendimento: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Veturiloj: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stacioj: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Ludantoj: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nova kompanio -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Kreu novan kompanion -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Spektu ludon -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Spektu la ludon kiel spektanto -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Aliĝu al kompanio -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Helpu manaĝi ĉi tiun kompanion - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Konektante... diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 879fcdb660..aa16bdd292 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2125,31 +2125,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Teavitab STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Sisesta mitmikmängu nimi -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Mitmikmängu jututuba - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Liitumiseks valmistumine: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Nimekiri mängus oelvatest ettevõtetest. Saad liituda ühega või alustada uut, kui on vabu kohti - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}ETTEVÕTTE ANDMED -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Ettevõtte nimi: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Avamine: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Firmaväärtus: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Rahaline seis: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Eelmise aasta tulud: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Suutlikus: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Sõidukid: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Jaamad: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Mängijad: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Uus ettevõte -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Uue ettevõtte loomine -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Jälgi mängu -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Ole mängu vaatleja -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Liitu ettevõttega -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Aita seda ettevõtet töös hoida - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Ühendumine... diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 6c917ea256..006000283b 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1764,31 +1764,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aðrir s STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Gev netverks spælinum eitt navn -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Hópspæls forhøll - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Fyrireikar samband við: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Listi yvir allar fyritøkur í hesum spælinum júst nú. Tú kann antin taka lut í einari, ella stovna eina nyggja um ta er pláss - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}KUNNING UM FYRITØKU -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Navn á fyritøku: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Stovnað: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Virði á fyritøku: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Peningur á bók júst nú: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Inntøka síðsta ár: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Avrik: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Flutningstól: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Støðir: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spælarir: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nýggja fyritøku -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Stovnað eina nýggja fyritøku -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Eygleið spæl -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Hygg eftir spælinum sum eygleiðari -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Tak lut í fyritøku -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hjálp við at leiða hesa fyritøkuna - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Fær samband... diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 5d40e9409a..42fd8994c5 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2085,31 +2085,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Toiset p STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Syötä nimi verkkopelille -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Moninpeliaula - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Valmistautuu yhdistämään: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista pelissä olevista yhtiöistä. Voit joko liittyä yhteen tai perustaa omasi - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}YHTIÖN TIEDOT -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Yhtiön nimi: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Perustettu: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Yhtiön arvo: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Nykyinen kate: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Viime vuoden tulot: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Suorite: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Kulkuneuvot: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Asemat: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Pelaajat: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Uusi yhtiö -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Perusta uusi yhtiö -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Seuraa peliä -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Seuraa pelin kulkua -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Liity yhtiöön -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Auta tämän yhtiön hallinnassa - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Yhdistetään... diff --git a/src/lang/french.txt b/src/lang/french.txt index 7b48f3a727..6ff5cde119 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2086,31 +2086,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Les autr STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Entrer un nom pour la partie en réseau -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Préparation de la partie - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Se prépare à rejoindre{NBSP}: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Liste des compagnies présentes dans le jeu. Vous pouvez soit en rejoindre une, soit en créer une si il reste un emplacement libre. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFOS SUR LA COMPAGNIE -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nom de la compagnie{NBSP}: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguration{NBSP}: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Valeur de la compagnie{NBSP}: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Argent courant{NBSP}: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Revenus de l'année dernière{NBSP}: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Performance{NBSP}: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Véhicules{NBSP}: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stations{NBSP}: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Joueurs{NBSP}: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nouvelle compagnie -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Créer une nouvelle compagnie -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Observer la partie -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Observer une partie en tant que spectateur -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Rejoindre la compagnie -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Aider à gérer cette compagnie - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Connexion en cours... diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 3f111a02f8..5a7a2a5441 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1848,25 +1848,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Sprutsen STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Fier in namme yn foar it networkspul -# Network game lobby - - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}BEDRIUWSYNFORMAASJE -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Bedriuwsnamme: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Bedriuwswearde: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Prestaasje: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Auto's: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stasjons: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spilers: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nei Bedriuw -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Nei bedriuw oprjochtsje -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Spul taskôgje -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Spul besjen as taskôger -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Meidwaan mei dit bedriuw -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Help dit bedriuw bestjoeren - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Ferbyning meitsje... diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index b242f3c63a..57a7b98c0c 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2149,31 +2149,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Bidh fio STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Cuir a-steach ainm airson a' gheama lìonraidh -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Lobaidh nan geamannan ioma-chluicheadair - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Ag ullachadh gus gabhail ann: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Liosta dhen a h-uile companaidh a tha sa gheama an-dràsta. ’S urrainn dhut gabhail ann an tè no tè ùr a stèidheachadh ma tha slot companaidh saor ri làimh - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}FIOSRACHADH A' CHOMPANAIDH -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Ainm na companaidh: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Stèidheachadh: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Luach a' chompanaidh: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Balans an-dràsta: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Teachd a-steach an-uiridh: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Dèanadas: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Carbadan: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stèiseanan: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Cluicheadairean: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Companaidh ùr -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Cruthaich companaidh ùr -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Coimhead air geama -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Coimhead air a' gheama mar amharcaiche -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Gabh sa chompanaidh -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Cuidich le stiùireadh na companaidh seo - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}A' ceangal ... diff --git a/src/lang/galician.txt b/src/lang/galician.txt index c141b99cd8..92603dbd52 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1985,31 +1985,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Outros x STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Escribe un nome para a partida en rede -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Sala de espera de partida multixogador - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparando para unirse: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Unha lista de tódalas compañías nesta patida. Podes unirte a unha ou empezar unha nova se hai algún lugar libre - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFORMACIÓN DA COMPAÑÍA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nome da compañía: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguración: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Valor da compañía: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Balance actual: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Ingresos do ano pasado: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Rendemento: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vehículos: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Estacións: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Xogadores: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nova compañía -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Crear unha nova compañía -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Observar partida -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Observa-la partida coma espectador -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Unirse a unha compañía -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Axudar a dirixir esta compañía - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Conectando... diff --git a/src/lang/german.txt b/src/lang/german.txt index 3c2504614b..3afe8e4831 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2086,31 +2086,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Damit an STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Namen für das Netzwerkspiel eingeben -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Mehrspielerlobby - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Spieleintritt vorbereiten: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Eine Liste aller Firmen, die sich im Spiel befinden. Man kann einer Firma beitreten oder eine eigene Firma gründen, sofern ein Platz frei ist - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}Firmenprofil -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Firmenname: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Gründung: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Firmenwert: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Kontostand: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Einkommen (letzes Jahr): {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Leistung: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Fahrzeuge: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stationen: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spieler: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Neue Firma -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Eine neue Firma gründen -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Beim Spiel zusehen -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Als Zuschauer dem Spiel zusehen -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Firma beitreten -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Beim Verwalten der ausgewählten Firma helfen - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Verbinden... diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 3fcb9b4a20..606e390be9 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2106,31 +2106,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Οι υ STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Εισάγετε το όνομα του δικτυακού παιχνιδιού -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Αίθουσα παιχνιδιού για πολλούς παίκτες - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Προετοιμασία για συμμετοχή: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Λίστα όλων των εταιρειών αυτήν τη στιγμή στο παιχνίδι. Μπορείτε είτε να συμμετάσχετε σε μία ή να δημιουργήσετε μια νέα αν υπάρχει κενή θέση - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}ΠΛΗΡΟΦΟΡΙΕΣ ΕΤΑΙΡΕΙΑΣ -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Όνομα εταιρείας: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Ίδρυση: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Αξία εταιρείας: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Τρέχων ισοζύγιο: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Έσοδα τελευταίας χρονιάς: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Απόδοση: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Οχήματα: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Σταθμοί: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Παίκτες: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Νέα εταιρεία -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Δημιουργία νέας εταιρείας -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Παρακολούθηση παιχνιδιού -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Δείτε το παιχνίδι ως θεατής -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Συμμετοχή σε εταιρεία -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Βοηθήστε στη διαχείριση αυτής της εταιρείας - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Σύνδεση... diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 92a93d5d53..15ea073503 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1963,31 +1963,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}שחקנ STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}הזן שם למשחק רשת -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}לובי של משחק רשת - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{ORANGE}{STRING} {BLACK} :מתכונן להצטרף אל -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}רשימת החברות המשתתפות במשחק. ניתן להצטרף לחברה קיימת או ליצור חברה חדשה במידה וקיים מקום פנוי - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}פרטי חברה -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}שם החברה: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{WHITE}{NUM}{SILVER} :שנת הקמה -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}ערך החברה: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{WHITE}{CURRENCY_LONG}{SILVER} :מאזן נוכחי -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{WHITE}{CURRENCY_LONG}{SILVER} :הכנסות בשנה האחרונה -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{WHITE}{NUM}{SILVER} :מדד הביצועים - -STR_NETWORK_GAME_LOBBY_VEHICLES :{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} {SILVER} :כלי תעבורה -STR_NETWORK_GAME_LOBBY_STATIONS :{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} {SILVER} :תחנות -STR_NETWORK_GAME_LOBBY_PLAYERS :{WHITE}{STRING} {SILVER} :שחקנים - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}חברה חדשה -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}יצירת חברה חדשה -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}צפה במשחק -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}הצטרף למשחק כצופה -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}הצטרף לחברה -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}הצטרף להנהלת חברה זו - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}מתחבר... diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 37e6da9ae0..679bd2bb00 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -432,13 +432,6 @@ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}सर -# Network game lobby - - -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}उद्घाटन: {WHITE}{NUM} - - - # Network connecting window ############ Leave those lines in this order!! diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 701dbed1ed..6f9314c5b4 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2130,31 +2130,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}A többi STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Add meg a hálózati játékhoz a neved -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Hálózati játék előszoba - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Készülődés a kapcsolódáshoz: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Egy lista az összes vállalatról aki játékban van. Alapíthatsz újat, beléphetsz egybe, vagy csak nézheted őket megfigyelőként - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}VÁLLALAT INFÓ -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}A vállalat neve: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Beiktatás: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}A vállalat értéke: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Jelenlegi összeg: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Előző évi bevétel: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Teljesítmény: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Járművek: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Állomások: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Játékosok: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Új vállalat -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Új vállalatot alapít -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Játék megvizsgálása -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Megtekinted a játékot mint megfigyelő -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Belépés a vállalatba -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Segítesz a vállalatirányításban - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Kapcsolódás... diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 39dc2476b0..4a2577f925 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1802,31 +1802,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aðrir n STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Sláðu inn nafn netleiksins -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Anddyri fjölspilunarleiks - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Undirbý tengingu við: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Listi yfir öll fyrirtæki í leiknum. Þú getur annað hvort gengið í lið með einu eða komið á fót nýju ef pláss er fyrir nýtt - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}UPPLÝSINGAR UM FYRIRTÆKI -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nafn fyrirtækis: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Upphaf: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Verðmæti fyrirtækis: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Núverandi staða: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Innkoma síðasta árs: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Frammistaða: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Farartæki: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stöðvar: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Leikmenn: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nýtt fyrirtæki -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Koma á fót nýju fyrirtæki -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Fylgjast með leik -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Fylgjast með leiknum sem áhorfandi -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Ganga í lið með fyrirtæki -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hjálpa við stjórnun þessa fyrirtækis - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Tengist... diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 05d157bfb9..abc8d215f4 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -622,12 +622,6 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x -# Network game lobby - - - - - # Network connecting window ############ Leave those lines in this order!! diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index ff95f09e49..310e36bbb9 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -2066,31 +2066,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Agar pem STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Masukkan nama dari permainan di jaringan -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Lobi Bermain bersama - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Persiapan bergabung: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Daftar perusahaan yang ada dalam sesi permainan ini. Anda bisa bergabung dengan salah satu perusahaan, atau membuat perusahaan baru bila masih ada ruang tersisa. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFO PERUSAHAAN -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nama Perusahaan: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Dilantik: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Nilai perusahaan: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Neraca saat ini: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Pendapatan tahun terakhir: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Performa: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Kendaraan: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stasiun: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Para pemain: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Perusahaan baru -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Ciptakan satu perusahaan baru -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Nonton permainan -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Menonton permainan sebagai penonton -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Bergabung dengan perusahaan -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Membantu untuk mengatur perusahaan ini - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Menghubungkan... diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 025138d110..4342d4e560 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1937,31 +1937,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Beidh a STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Iontráil ainm don chluiche líonra -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Forsheomra cluichí ilimreoirí - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Ag ullmhú le dul isteach: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Liosta de gach cuideachta sa chluiche seo faoi láthair. Is féidir leat dul isteach i gceann acu nó cuideachta nua a thosú má tá spás saor do chuideachta - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}FAISNÉIS CUIDEACHTA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Ainm na cuideachta: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Tús gnó: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Luach na cuideachta: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Iarmhéid reatha: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Ioncam na bliana seo caite: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Feidhmíocht: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Feithiclí: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stáisiúin: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Imreoirí: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Cuideachta nua -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Cruthaigh cuideachta na -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Féach ar chluiche -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Breathnaigh ar an gcluiche mar fhéachadóir -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Téigh isteach sa chuideachta -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Cabhraigh leis an gcuideachta seo a bhainistiú - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Ag nascadh... diff --git a/src/lang/italian.txt b/src/lang/italian.txt index dec73c2179..d9c00be463 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2078,31 +2078,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Fa saper STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Inserire il nome della partita -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Stanza principale partita multigiocatore - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparazione all'ingresso in: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Elenco di tutte le compagnie attualmente nella partita. È possibile unirsi ad una di esse o fondarne una nuova se è disponibile un posto - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFORMAZIONI COMPAGNIA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nome compagnia: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inaugurazione: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Valore compagnia: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Saldo corrente: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Ricavi anno scorso: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Prestazioni: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Veicoli: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stazioni: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Giocatori: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nuova compagnia -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Crea una nuova compagnia -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Assisti alla partita -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Osserva la partita come spettatore -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Usa compagnia -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Aiuta a controllare questa compagnia - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Connessione... diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index f069b26ac2..91ad70b449 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -2067,31 +2067,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}この STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}ネットワークゲーム名を入力 -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}マルチプレイヤーゲーム ロビー - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{ORANGE}{STRING}{BLACK}への参加準備 -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}このゲームに現在参加している会社のリストです。ゲームに参加する場合、既にある会社の経営に参画するか、新規開業(空きスロットがある場合)するかのいずれかになります - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}会社情報 -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}会社名: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}開業日: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}企業価値: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}預金残高: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}昨年の損益: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}会社格付: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}輸送機器数: {WHITE}{NUM} {TRAIN}、{NUM} {LORRY}、{NUM} {BUS}、{NUM} {SHIP}、{NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}停留施設数: {WHITE}{NUM} {TRAIN}、{NUM} {LORRY}、{NUM} {BUS}、{NUM} {SHIP}、{NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}プレイヤー数: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}新規会社 -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}新しく会社を設立します -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}ゲームを観覧 -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}観覧者としてゲームを観戦します -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}経営に参画 -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}この交通会社の経営に参画します - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}接続中… diff --git a/src/lang/korean.txt b/src/lang/korean.txt index d99be2aeac..e50072d5f9 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2086,31 +2086,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}서버 STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}네트워크 게임에서 사용할 이름을 입력하세요 -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}멀티플레이 게임 대기실 - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}참가 준비중: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}이 게임에 있는 회사의 목록입니다. 다른 회사에 같이 참여하거나, 빈 자리가 있을 경우 새로운 회사를 세워서 시작할 수 있습니다 - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}회사 정보 -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}회사 이름: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}설립: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}회사가치: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}재정 수익: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}작년 수익: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}성취도: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}차량: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}역: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}플레이어: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}새 회사 -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}새 회사를 만듭니다 -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}게임 관전 -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}게임에 참여하지 않고 보기만 합니다 -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}회사 참여 -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}이 회사를 도와 플레이합니다 - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}접속중... diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 8c5245358d..7d1f9583f0 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2156,31 +2156,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Lingua i STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Inscribe nomen ludi retis -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Atrium Plurium Lusorum - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Parans ad iungendum: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Index societatum in hoc ludo. Potes iungere aut novam incipere si locus vacuus adest - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INDICIA SOCIETATIS -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nomen societatis: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Initium: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Aestimatio societatis: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Pecunia currens: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Reditus anni prioris: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Effectus: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vehicula: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stationes: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Lusores: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Societas Nova -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Creare societatem novam -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Ludum spectare -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Aspicere ludum sicut spectator -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Societatem iungere -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Administrare hanc societatem - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Coniungens... diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index bc30d0f223..676c6eb8fa 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2032,31 +2032,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Citi lie STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Ievadīt tīkla spēles nosaukumu -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Vairākspēlētāju spēles vestibils - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Gatavojos pievienoties: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Spēlē esošo uzņēmumu saraksts. Jūs varat vai nu kādam pievienoties, vai arī sākt jaunu, ja ir brīvs uzņēmuma slots - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}UZŅĒMUMA INFORMĀCIJA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Uzņēmuma nosaukums: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Atklāšana: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Uzņēmuma vērtība: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Šībrīža bilance: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Ienākumi pērn: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Veiktspēja: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Satiksmes līdzekļi: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stacijas: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spēlētāji: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Jauns uzņēmums -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Izveidot jaunu uzņēmumu -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Novērot spēli -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Skatīties spēli kā novērotājam -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Pievienoties uzņēmumam -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Palīdzēt vadīt šo uzņēmumu - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Savienojas... diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index d1a96bbc4b..95e3b5a327 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2276,31 +2276,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Kiti ža STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Įveskite tinklo žaidimo pavadinimą -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Kelių žaidėjų meniu - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Ruošiamasi prisijungti: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Sąrašas visų kompanijų žaidime. Gali arba prisijungti prie kurios nors, arba sukurti naują kompaniją (jei yra laisvų vietų) - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}KOMPANIJOS INFORMACIJA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Įmonės pavadinimas: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{G=vyr}{SILVER}Įkurtas: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Įmonės vertė: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Dabartinis balansas: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Praeitų metų pajamos: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Sparta: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Transporto priemonės: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stotelės: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Žaidejai: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nauja kompanija -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Sukursi naują kompaniją -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Stebėti žaidimą -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Stebėsi žaidimą kaip žiūrovas -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Prisijungti prie kompanijos -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Padėsi valdyti šią kompaniją - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Jungiamasi... diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index b52bdb1b7d..e419e1fbb6 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2057,31 +2057,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aner Lei STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Gëff en Numm fir d'Spill un -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multiplayer-Spill Lobby - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparéiert fir bäizetrieden: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Eng Lëscht vun de Firmen an dësem Spill. Du kanns enger bäitrieden oder eng nei opmaachen. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}FIRMENINFO -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Firmennumm: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Grënnung: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Firmewäert: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Kontostand: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Akommes vum leschte Joer: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Performance: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Gefierer: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Statiounen: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spiller: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nei Firma -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Nei Firma erstellen -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Dem Spill nokucken -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Dem Spill als Zuschauer nokucken -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Firma bäitrieden -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Des Firma matverwalten - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Connectioun... diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 3b35dd1a88..98cf08fff8 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -980,12 +980,6 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x -# Network game lobby - - - - - # Network connecting window ############ Leave those lines in this order!! diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 1c7e165ce9..99224fcc66 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1699,31 +1699,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Pemain l STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Masukkan nama untuk permainan rangkaian -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Ruang tunggu berbilang pemain - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Sedang bersedia untuk menyambung: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Senarai semua syarikat yang sedang beroperasi. Anda boleh sertai salah satu syarikat atau mulakan syarikat yang baru jika ada slot kosong - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}MAKLUMAT SYARIKAT -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nama syarikat: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Ditubuhkan: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Nilai syarikat: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Baki sekarang: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Pendapatan tahun lepas: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Prestasi: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Kenderaan: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stesen-stesen: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Pemain: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Syarikat baru -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Mulakan syarikat baru -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Saksikan permainan -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Saksikan permainan sebagai seorang penyaksi -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Sertai syarikat -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Bantu uruskan syarikat ini - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Menyambung... diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 21a4ef0257..b8615baefd 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -548,12 +548,6 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x -# Network game lobby - - - - - # Network connecting window ############ Leave those lines in this order!! diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index dd5659d63c..416d1e2cb2 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -916,14 +916,6 @@ STR_NETWORK_SERVER_LIST_LANGUAGE :{SILVER}भा -# Network game lobby - - -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}गेल्या वर्ष्याची कमाई: {WHITE}{CURRENCY_LONG} - -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}स्थानक: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} - - # Network connecting window ############ Leave those lines in this order!! diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index aaaeb6fc68..130f19ab66 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2089,31 +2089,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andre sp STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Skriv inn et navn for nettverksspillet -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Flerspillerlobby - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Prøver å koble til: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}En liste over alle nåværende firmaer i spillet. Du kan enten bli med i et eller starte et nytt hvis det er en ledig firmaplass. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}FIRMAOVERSIKT -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Firmanavn: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Grunnlagt: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Firmaverdi: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Nåværende balanse: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Inntekt i fjor: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Nettverksytelse: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Kjøretøy: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stasjoner: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spillere: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nytt firma -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Start et nytt firma -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Vær tilskuer -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Vær tilskuer til spillet -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Bli med i firmaet -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hjelp til med å styre dette firmaet - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Kobler til... diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 92feb57a7e..b2ece56fa1 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1861,31 +1861,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andre sp STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Gje eit namn til nettverksspelet -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Fleirspelarspel-lobby - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Freistar å verte med: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Ei liste over firma i spelet. Du kan anten verte med i eit eller starte eit nytt. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}FIRMAOVERSIKT -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Firmanamn: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Skipa: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Firmaverdi: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Noverande saldo: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Inntekt i fjor: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Nettverksyting: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Køyretøy: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stasjonar: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spelarar: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nytt firma -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Skip eit nytt firma -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Vær tilskodar -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Ver tilskodar til spelet -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Ver med i firmaet -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hjelp å styre dette firmaet - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Kobler til... diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 688b83dab9..0454f7b33a 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1659,31 +1659,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}دیگر STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}برای بازی شبکه‌ای یک نام وارد نمایید -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}سالن انتظار بازی چندنفره - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}آماده سازی برای پیوستن: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}لیستی از تمامی شرکت هایی که در بازی وجود دارند. شما می توانید به یکی از آنها بپیوندید یا در صورت وجود جای خالی برای ساخت شرکت، یک شرکت جدید بسازید - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}مشخصات شرکت -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}نام شرکت: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}گشایش: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}ارزش شرکت: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}موجودی فعلی: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}درآمد سال گذشته: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}کارایی: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}وسایل نقلیه: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}ایستگاه ها: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}بازیگران: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}شرکت جدید -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}ساختن یک شرکت جدید -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}تماشای بازی -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}دیدن بازی به عنوان یک تماشاگر -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}پیوستن به شرکت -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}کمک به مدیریت این شرکت - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}درحال وصل شدن... diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 4d55f01638..e343ec2c1d 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2465,31 +2465,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Inni gra STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Wpisz nazwę dla gry sieciowej -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Rozpoczęcie gry wieloosobowej - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Przygotowanie do połączenia: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista wszystkich firm w grze. Możesz przyłączyć się do jednej z nich, lub założyć nową - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFO O FIRMIE -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nazwa firmy: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguracja: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Wartość firmy: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Bieżący bilans: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Dochód w ostatnim roku: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Wydajność: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Pojazdy: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stacje: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Gracze: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nowa firma -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Rozpoczęcie działalności nowej firmy -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Obserwuj grę -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Oglądaj grę jako widz -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Dołącz do firmy -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Pomóż zarządzać tą firmą - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Łączenie... diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 5c603616b5..9f947617f5 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -784,6 +784,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * E STR_STATUSBAR_AUTOSAVE :{RED}AUTOGUARDADO STR_STATUSBAR_SAVING_GAME :{RED}* * A GUARDAR JOGO * * +STR_STATUSBAR_SPECATOR :{WHITE}(espectador) # News message history STR_MESSAGE_HISTORY :{WHITE}Histórico de Mensagens @@ -2086,31 +2087,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Outros j STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Digite nome para o jogo de rede -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Sala de espera de jogo multi-jogador - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparando para entrar: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista das empresas activas neste jogo. Pode entrar numa delas ou iniciar uma nova empresa. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFORMAÇÃO DA EMPRESA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nome da empresa: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguração: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Valor da empresa: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Balanço actual: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Rendimento do último ano: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Desempenho: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Veículos: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Estações: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Jogadores: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nova empresa -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Criar uma nova empresa -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Observar jogo -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Ver jogo como um espectador -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Entrar na empresa -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Auxiliar na gestão desta empresa - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}A ligar... diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 1a8c3b5e93..5c3fc997ab 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2036,31 +2036,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Ceilalţ STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Introduceţi un nume pentru joc -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Chatul jocului multiplayer - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}În pregătire pentru joc: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista companiilor din jocul curent. Poţi colabora cu o companie sau să infiinţezi una - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFO COMPANIE -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Numele companiei: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inaugurarea: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Valoarea companiei: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Balanţa curentă: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Venituri anul trecut: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Performanţa: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vehicule: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Staţii: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Jucători: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Companie nouă -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Fondează o companie nouă -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Modul spectator -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Vizionează jocul din poziţia de spectator -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Alătură-te companiei -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Ajută la conducerea acestei companii - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Conectare... diff --git a/src/lang/russian.txt b/src/lang/russian.txt index c2637890c8..9b4ddbbbee 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2236,31 +2236,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Друг STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Введите название сетевой игры -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Состояние сетевой игры - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Подготовка соединения: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Список компаний в игре. Вы можете присоединиться к одной из существующих или основать новую, если есть свободная позиция. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}ИНФОРМАЦИЯ О КОМПАНИИ -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Название компании: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Основана: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Стоимость компании: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Текущий баланс: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Доход в прошлом году: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Результативность: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Транспорт: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Станции: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Игроки: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Новая компания -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Основать новую компанию -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Наблюдать за игрой -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Следить за игрой в качестве зрителя -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Присоединиться -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Присоединиться к компании и помочь в управлении ею - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Соединение... diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 522e047639..382fe2c9fe 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2252,31 +2252,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Drugi ig STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Unos naziva mrežne partije -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Predvorje partije sa više igrača - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Pripremanje za ulazak: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Spisak svih preduzeća u ovoj partiji. Možete se priključiti nekom ili osnovati novo ukoliko postoji slobodno mesto - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}PODACI O PREDUZEĆU -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Naziv preduzeća: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguracija: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Vrednost preduzeća: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Trenutni balans: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Prošlogodišnji prihod: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Uspešnost: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vozila: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stanice: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Igrači: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Novo preduzeće -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Osnujte novo preduzeće -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Posmatranje partije -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Priključite se partiji kao posmatrač -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Pridruženje preduzeću -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Pomozite upravljanje ovoim preduzećem - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Povezivanje... diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 941c2caaf3..0629ab5db8 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2062,31 +2062,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}其他 STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}为您的联机游戏取名 -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}联机游戏大厅 - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}正在准备加入: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}当前参与游戏的公司列表{}您可以加入其中一个公司{}或者在有空位的情况下重建一个公司 - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}公司信息 -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}公司信息: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}开业时间: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}公司市值: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}流动资金: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}去年收入: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}表现评价: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}车辆船只: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}站台: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}玩家:{WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}新公司 -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}创建新公司 -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}旁观公司 -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}作为旁观者观看公司 -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}加入公司 -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}帮助管理公司 - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}正在连接…… diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index a1a612342d..db0dcbb3d7 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2153,31 +2153,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Aby osta STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Zadajte názov sieťovej hry -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Sieťová hra - čakáreň - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Pripravuje sa k vstupu: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Aktuálny zoznam spoločností v tejto hre. Buď môžeš do jednej vstúpiť, alebo založiť novú spoločnosť. - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFO O SPOLOČNOSTI -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Názov spoločnosti: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Založené: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Hodnota spoločnosti: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Stav účtu: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Zisk v minulom roku: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Výkon: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vozidlá: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stanice: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Hráči: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nová spoločnosť -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Založiť novú spoločnosť -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Sledovať hru -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Sledovať hru len ako divák -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Vstúpiť do spoločnosti -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Pomôcť viesť túto spoločnosť - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Pripájam sa... diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index d6543b9771..d4a99a4884 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2093,31 +2093,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Drugi ig STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Vpiši ime za mrežno igro -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Seje večigralskih iger - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Priprava na vstop: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Seznam podjetij trenutno v tej igri. Lahko se pridružiš eni ali poženeš novo, če je kako mesto za podjetje prosto - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}PODATKI O PODJETJU -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Ime podjetja: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Ustanovljeno: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Vrednost podjetja: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Trenutno stanje: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Lanski dohodek: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Ocene: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vozila: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Postaje: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Igralci: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Novo podjetje -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Ustvari novo podjetje -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Ogled igre -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Sodeluj kot gledalec -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Pridruži se podjetju -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Pomagaj upravljati podjetje - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Povezujem... diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index b2f56bdda1..96c55fae01 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2076,31 +2076,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Los otro STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Introduce un nombre para el juego en red -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Sala de espera de la partida multijugador - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparándose para unirse: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Listado de empresas actualmente en la partida. Puedes unirte a una empresa existente o crear una nueva si hay espacio libre - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFORMACIÓN DE LA EMPRESA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nombre empresa: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguración: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Valor empresa: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Balance actual: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Ingresos último año: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Rendimiento: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vehículos: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Estaciones: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Jugadores: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nueva empresa -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Crea una empresa nueva -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Observar juego -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Observa una partida como espectador -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Unirse a empresa -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Ayuda a dirigir esta empresa - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Conectando... diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 1f65c189ec..b5eef60f01 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2086,31 +2086,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Otros ju STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Introducir un nombre para la partida en red -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Sala virtual de partidas multijugador - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Preparándose para unirse: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista de empresas presentes en el juego. Puedes unirte a una empresa existente o crear una nueva si hay espacio libre - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}INFORMACIÓN DE LA EMPRESA -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Nombre empresa: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Inauguración: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Valor de la empresa: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Saldo actual: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Ingresos último año: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Desempeño: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Vehículos: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Estaciones: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Jugadores: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nueva empresa -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Crear nueva empresa -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Observar partida -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Observar una partida como espectador -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Unirse a empresa -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Ayudar a dirigir esta empresa - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Conectando... diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 41c07862a8..2cd1b94804 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2083,31 +2083,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andra sp STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Mata in ett namn för nätverksspelet -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Nätverksspel - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Förbereder att ansluta: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}En lista på alla nuvarande företag som är i spelet. Du kan antingen ansluta till ett befintligt eller starta ett nytt på en ledig plats - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}FÖRETAGSINFO -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Företagsnamn: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Etableringsår: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Företagsvärde: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Nuvarande saldo: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Förra årets inkomst: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Prestationsbetyg: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Fordon: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Stationer: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spelare: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nytt företag -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Starta ett nytt företag -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Titta på spelet -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Titta på spelet som en åskådare -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Anslut till företag -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hjälp till att styra detta företag - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Ansluter... diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 38b543ee3b..d887538bf3 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1802,29 +1802,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}பே STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}இணைய ஆட்டத்திற்கு ஒரு பெயரினை இடு -# Network game lobby - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}சேர தொடங்கப்படுகிறது: {ORANGE}{STRING} - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}நிறுவனங்களின் விவரம் -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}நிறுவனத்தின் பெயர்: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}தொடக்கம்: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}நிறுவனத்தின் மதிப்பு: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}தற்போதைய கையிருப்பு: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}சென்ற வருட வருமானம்: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}செயல்திறன்: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}வாகனங்கள்: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}நிலையங்கள்: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}வீரர்கள்: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}புதிய நிருவனம் -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}புதிய நிறுவனத்தை உருவாக்கு -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}விளையாட்டை பார்வையிடு -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}ஆட்டத்தினைப் பார்வையாளராக கவனி -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}நிறுவனத்தில் சேறு -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}நிறுவனத்தை கட்டுபடுத்த உதவு - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}இணைக்கப்படுகிறது... diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 37711149c1..f3d1ab46d7 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1888,31 +1888,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}ผู STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}พิมพ์ชื่อสำหรับเล่นในเครือข่าย -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}ห้องรับรองโหมดผู้เล่นหลายคน - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}กำลังเตรียมการเข้าร่วม: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}รายการของบริษัททั้งหมดที่อยู่ในเกมนี้ คุณสามารถที่จะเข้าร่วมหนึ่งในรายชื่อบริษัทเหล่านี้ได้หรือสามารถที่จะสร้างบริษัทใหม่ได้หากมีช่องว่างให้คุณ - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}ข้อมูลบริษัท -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}ชื่อบริษัท: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}วันที่เริ่มเปิด: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}มูลค่าของบริษัท: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}งบดุลปัจจุบัน: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}รายได้ของปีที่แล้ว: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}สมรรถภาพ: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}ภาหนะ: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}สถานี: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}ผู้เล่น: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}บริษัทใหม่ -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}สร้างบริษัทใหม่ -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}เข้าชมเกม -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}ดูเกมในฐานะผู้ชม -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}เข้าร่วมบริษัท -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}ช่วยบริหารจัดการบริษัทนี้ - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}กำลังเชื่อมต่อ... diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 5924c9c83b..4fd1cca9a7 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1951,31 +1951,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}讓其 STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}為連線遊戲輸入一個名稱 -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}多人遊戲大廳 - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}準備加入:{ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}列出遊戲内所有公司。若公司還有空位的話您可以加入現有公司,或是創立新公司 - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}公司資訊 -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}公司名稱:{WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}成立於:{WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}公司市值:{WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}目前餘額:{WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}去年收入:{WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}效率:{WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}運輸工具總數:{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}車站:{WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}玩家:{WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}新公司 -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}建立新公司 -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}旁觀遊戲 -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}以旁觀者身分參與遊戲 -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}加入公司 -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}共同管理這間公司 - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}連線中... diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 45087c82d4..0195a7be3e 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2067,31 +2067,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Diğer o STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Ağ oyunu için bir isim girin -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Çok oyunculu oyun lobisi - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Katılmaya hazırlanıyor: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Oyundaki tüm şirketlerin listesi. Birine katılabilir ya da boş yer varsa yeni bir tane açabilirsiniz - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}ŞİRKET BİLGİSİ -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Şirket adı: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Kurulus: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Şirket değeri: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Şimdiki dengesi: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Geçen seneki geliri: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Performans: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Araçlar: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}İstasyon: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Oyuncular: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Yeni şirket -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Yeni bir şirket kur -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Oyunu izle -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Oyuna izlemek için katıl -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Şirkete Katil -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Şirket yönetimine yardım et - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Bağlanıyor... diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 46c330b753..0794cab491 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2185,31 +2185,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Інші STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Введіть назву мережевої гри -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Мережева гра - кімната - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Підготовка до з'єднання: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Список всіх компаній присутніх у цій грі. Ви можете як приєднатись до компанії так і створити нову, якщо є вільне місце - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}Інформація про компанію -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Назва компанії: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Засновано: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Вартість компанії: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Поточний баланс: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Прибуток торік: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Продуктивність: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Транспорт: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Станцій: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Гравців: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Нова компанія -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Створити нову компанію -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Спостерігати гру -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Спостерігати за грою як глядач -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Приєднатись до компанії -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Допомогти керувати цією компанією - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}З'єднання... diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 900dad4876..77ddc8f0db 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1550,31 +1550,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}دوسر STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}نیٹ ورک والے کھیل کا نام لکھیں -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}زیادہ کھلاڑیوں والے کھیل کی لابی - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}شامل ہونے کی تیاری کرتے ہوئے: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}موجودہ کھیل میں شامل کمپنیوں کی فہرست۔ آپ ان میں سے کسی میں شامل ہو سکتے ہیں یا جگہ ہونے کی صورت میں نئی کمپنی شروع کر سکتے ہیں - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}کمپنی کی معلومات -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}کمپنی کا نام: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}افتتاح: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}کمپنی کی مالیت: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}موجودہ بقایا: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}پچھلے سال کی آمدن: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}کادکردگی: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}گاڑیاں: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}اسٹیشن: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}کھلاڑی: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}نئی کمپنی -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}نئی کمپنی بنائیں -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}کھیل دیکھیں -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}کھیل کو ناظر کے طور پر دیکھیں -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}کھیل میں شامل ہوں -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}کمپنی کو چلانے میں مدد کریں - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}رابطہ کر رہے ہیں۔ ۔ ۔ diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 12951ef96c..3f22d307a4 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2085,31 +2085,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Những STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Nhập tên của ván chơi mạng -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Sảnh chơi game nhiều người - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Chuẩn bị tham gia: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Danh sách tất cả các công ty đang ở trong ván chơi. Bạn có thể gia nhập một công ty hiện có hoặc tạo mới nếu còn chỗ - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}THÔNG TIN CÔNG TY -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Tên công ty: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Khánh thành: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Giá trị Công ty: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Số dư hiện thời: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Thu nhập năm ngoái: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Năng suất: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Phương tiện giao thông: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Ga, bến, cảng: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Người chơi: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Công ty mới -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Khai sinh một công ty -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Xem ván chơi -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Vào ván chơi như là một người xem -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Gia nhập công ty -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Trợ giúp quản lý công ty này - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Tạo kết nối... diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index a17371eee3..c19fae5af1 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1945,31 +1945,6 @@ STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Rhoi gwy STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Rhowch enw ar gyfer y gêm rhwydwaith -# Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Cyntedd Gemau Amlchwaraewr - -STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Paratoi i ymuno: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Rhestr o'r holl gwmnïau yn y gêm. Gellwch unai ymuno ag un neu ddechrau un newydd os oes slot cwmni'n rhydd - -STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}GWYBODAETH CWMNI -STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Enw cwmni: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Sefydlwyd: {WHITE}{NUM} -STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Gwerth cwmni: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Balans presennol: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Incwm y llynedd: {WHITE}{CURRENCY_LONG} -STR_NETWORK_GAME_LOBBY_PERFORMANCE :{SILVER}Perfformiad: {WHITE}{NUM} - -STR_NETWORK_GAME_LOBBY_VEHICLES :{SILVER}Cerbydau: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Gorsafoedd: {WHITE}{NUM} {TRAIN}, {NUM} {LORRY}, {NUM} {BUS}, {NUM} {SHIP}, {NUM} {PLANE} -STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Chwaraewyr: {WHITE}{STRING} - -STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Cwmni newydd -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Creu cwmni newydd -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Gwylio gêm -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Gwylio'r gêm fel gwyliwr -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Ymuno â chwmni -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Helpu rheoli'r cwmni hwn - # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Wrthi'n Cysylltu... From b67ef1e5b85cda0af8be0c7d99b8b00b5ec05ebb Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 15 Aug 2021 13:08:58 +0200 Subject: [PATCH 63/63] Fix: [Actions] Ubuntu 18.04 by default has a compiler too old for OpenTTD (#9481) --- .github/workflows/release.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 90d1a9d5b3..fd6a8d8fa1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -373,14 +373,19 @@ jobs: include: - container_image: "ubuntu:18.04" bundle_name: "bionic" + compiler: "g++-8" - container_image: "ubuntu:20.04" bundle_name: "focal" + compiler: "g++" - container_image: "ubuntu:20.10" bundle_name: "groovy" + compiler: "g++" - container_image: "debian:buster" bundle_name: "buster" + compiler: "g++" - container_image: "debian:bullseye" bundle_name: "bullseye" + compiler: "g++" runs-on: ubuntu-20.04 container: @@ -406,7 +411,7 @@ jobs: apt-get install -y --no-install-recommends \ cmake \ debhelper \ - g++ \ + ${{ matrix.compiler }} \ git \ make \ openssl \ @@ -432,7 +437,7 @@ jobs: cd build echo "::group::CMake" - cmake ${GITHUB_WORKSPACE} \ + CXX=${{ matrix.compiler }} cmake ${GITHUB_WORKSPACE} \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=/usr \ # EOF