diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index 0af8a89791..4801435901 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -5,13 +5,13 @@ title: "Bug Report" --- ## Version of OpenTTD - + ## Expected result ## Actual result - + ## Steps to reproduce diff --git a/.github/ISSUE_TEMPLATE/crash.md b/.github/ISSUE_TEMPLATE/crash.md index f7d127e930..00f62f05c9 100644 --- a/.github/ISSUE_TEMPLATE/crash.md +++ b/.github/ISSUE_TEMPLATE/crash.md @@ -6,7 +6,7 @@ title: "Crash Report" ## Version of OpenTTD - + ## Steps to reproduce diff --git a/cmake/CreateGrfCommand.cmake b/cmake/CreateGrfCommand.cmake index 4ad9734198..107ec09b88 100644 --- a/cmake/CreateGrfCommand.cmake +++ b/cmake/CreateGrfCommand.cmake @@ -35,9 +35,9 @@ function(create_grf_command) -DNFORENUM_EXECUTABLE=${NFORENUM_EXECUTABLE} -DGRFCODEC_EXECUTABLE=${GRFCODEC_EXECUTABLE} -P ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake - MAIN_DEPENDENCY ${GRF_NFO_SOURCE_FILES} + MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake DEPENDS ${GRF_PNG_BINARY_FILES} - ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake + ${GRF_NFO_SOURCE_FILES} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating ${GRF_SOURCE_FOLDER_NAME}.grf" ) diff --git a/cmake/scripts/CreateGRF.cmake b/cmake/scripts/CreateGRF.cmake index 8631284f33..d47e39aa0e 100644 --- a/cmake/scripts/CreateGRF.cmake +++ b/cmake/scripts/CreateGRF.cmake @@ -39,6 +39,20 @@ foreach(NFO_LINE IN LISTS NFO_LINES) endif() endforeach() -execute_process(COMMAND ${NFORENUM_EXECUTABLE} -s sprites/${GRF_SOURCE_FOLDER_NAME}.nfo) -execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf) +execute_process(COMMAND ${NFORENUM_EXECUTABLE} -s sprites/${GRF_SOURCE_FOLDER_NAME}.nfo RESULT_VARIABLE RESULT) +if(RESULT) + if(NOT RESULT MATCHES "^[0-9]*$") + message(FATAL_ERROR "Failed to run NFORenum (${RESULT}), please check NFORENUM_EXECUTABLE variable") + endif() + message(FATAL_ERROR "NFORenum failed") +endif() + +execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf RESULT_VARIABLE RESULT) +if(RESULT) + if(NOT RESULT MATCHES "^[0-9]*$") + message(FATAL_ERROR "Failed to run GRFCodec (${RESULT}), please check GRFCODEC_EXECUTABLE variable") + endif() + message(FATAL_ERROR "GRFCodec failed") +endif() + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${GRF_SOURCE_FOLDER_NAME}.grf ${GRF_BINARY_FILE}) diff --git a/media/baseset/openttd.grf b/media/baseset/openttd.grf index a63bfc4e29..837e4b12d2 100644 Binary files a/media/baseset/openttd.grf and b/media/baseset/openttd.grf differ diff --git a/media/baseset/openttd/openttdgui.nfo b/media/baseset/openttd/openttdgui.nfo index eb1313365e..2fd5a5bb4c 100644 --- a/media/baseset/openttd/openttdgui.nfo +++ b/media/baseset/openttd/openttdgui.nfo @@ -4,7 +4,7 @@ // 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 . // -1 * 0 0C "OpenTTD GUI graphics" - -1 * 3 05 15 \b 186 // OPENTTD_SPRITE_COUNT + -1 * 3 05 15 \b 191 // OPENTTD_SPRITE_COUNT -1 sprites/openttdgui.png 8bpp 66 8 64 31 -31 7 normal -1 sprites/openttdgui.png 8bpp 146 8 64 31 -31 7 normal -1 sprites/openttdgui.png 8bpp 226 8 64 31 -31 7 normal @@ -191,3 +191,8 @@ -1 sprites/openttdgui_convert_tram.png 8bpp 24 0 32 32 0 0 normal -1 sprites/openttdgui.png 8bpp 513 440 10 10 0 0 normal -1 sprites/openttdgui.png 8bpp 526 440 10 10 0 0 normal + -1 sprites/openttdgui.png 8bpp 539 440 12 10 0 0 normal + -1 sprites/openttdgui.png 8bpp 553 440 12 10 0 0 normal + -1 sprites/openttdgui.png 8bpp 567 440 12 10 0 0 normal + -1 sprites/openttdgui.png 8bpp 581 440 10 10 0 0 normal + -1 sprites/openttdgui.png 8bpp 593 440 10 10 0 0 normal diff --git a/media/baseset/openttd/openttdgui.png b/media/baseset/openttd/openttdgui.png index 1fc02aa61e..5b80c33260 100644 Binary files a/media/baseset/openttd/openttdgui.png and b/media/baseset/openttd/openttdgui.png differ diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index d16e0916e1..e04eba302a 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -81,7 +81,7 @@ class ReplaceVehicleWindow : public Window { bool replace_engines; ///< If \c true, engines are replaced, if \c false, wagons are replaced (only for trains). bool reset_sel_engine; ///< Also reset #sel_engine while updating left and/or right and no valid engine selected. GroupID sel_group; ///< Group selected to replace. - int details_height; ///< Minimal needed height of the details panels (found so far). + int details_height; ///< Minimal needed height of the details panels, in text lines (found so far). byte sort_criteria; ///< Criteria of sorting vehicles. bool descending_sort_order; ///< Order of sorting vehicles. bool show_hidden_engines; ///< Whether to show the hidden engines. @@ -229,7 +229,7 @@ public: this->engines[0].ForceRebuild(); this->engines[1].ForceRebuild(); this->reset_sel_engine = true; - this->details_height = ((vehicletype == VEH_TRAIN) ? 10 : 9) * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; + this->details_height = ((vehicletype == VEH_TRAIN) ? 10 : 9); this->sel_engine[0] = INVALID_ENGINE; this->sel_engine[1] = INVALID_ENGINE; this->show_hidden_engines = _engine_sort_show_hidden_engines[vehicletype]; @@ -274,7 +274,7 @@ public: case WID_RV_LEFT_DETAILS: case WID_RV_RIGHT_DETAILS: - size->height = this->details_height; + size->height = FONT_HEIGHT_NORMAL * this->details_height + padding.height; break; case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: { @@ -482,7 +482,7 @@ public: NWidgetBase *nwi = this->GetWidget(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS); int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT, nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side], ted); - needed_height = std::max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM); + needed_height = std::max(needed_height, (text_end - (int)nwi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL); } } if (needed_height != this->details_height) { // Details window are not high enough, enlarge them. diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index cf5361dc4a..a3e6c4c170 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1081,7 +1081,7 @@ struct BuildVehicleWindow : Window { CargoID cargo_filter[NUM_CARGO + 3]; ///< Available cargo filters; CargoID or CF_ANY or CF_NONE or CF_ENGINES StringID cargo_filter_texts[NUM_CARGO + 4]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID byte cargo_filter_criteria; ///< Selected cargo filter - int details_height; ///< Minimal needed height of the details panels (found so far). + int details_height; ///< Minimal needed height of the details panels, in text lines (found so far). Scrollbar *vscroll; bool virtual_train_mode; ///< Are we building a virtual train? Train **virtual_train_out; ///< Virtual train ptr @@ -1150,7 +1150,7 @@ struct BuildVehicleWindow : Window { widget->tool_tip = STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP + type; widget->SetLowered(this->show_hidden_engines); - this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9) * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; + this->details_height = ((this->vehicle_type == VEH_TRAIN) ? 10 : 9); this->FinishInitNested(this->window_number); @@ -1597,7 +1597,7 @@ struct BuildVehicleWindow : Window { break; case WID_BV_PANEL: - size->height = this->details_height; + size->height = FONT_HEIGHT_NORMAL * this->details_height + padding.height; break; case WID_BV_SORT_ASCENDING_DESCENDING: { @@ -1667,12 +1667,12 @@ struct BuildVehicleWindow : Window { NWidgetBase *nwi = this->GetWidget(WID_BV_PANEL); int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT, nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine, this->te); - needed_height = std::max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM); + needed_height = std::max(needed_height, (text_end - (int)nwi->pos_y - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL); } if (needed_height != this->details_height) { // Details window are not high enough, enlarge them. int resize = needed_height - this->details_height; this->details_height = needed_height; - this->ReInit(0, resize); + this->ReInit(0, resize * FONT_HEIGHT_NORMAL); return; } } diff --git a/src/cargotype.h b/src/cargotype.h index 65208c9616..4474e58d05 100644 --- a/src/cargotype.h +++ b/src/cargotype.h @@ -59,7 +59,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) - uint16 initial_payment; + uint32 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/company_cmd.cpp b/src/company_cmd.cpp index eeb0a1fcab..b1d7bfdff9 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -588,8 +588,7 @@ Company *DoStartupNewCompany(DoStartupNewCompanyFlag flags, CompanyID company) GeneratePresidentName(c); SetWindowDirty(WC_GRAPH_LEGEND, 0); - SetWindowClassesDirty(WC_CLIENT_LIST_POPUP); - SetWindowDirty(WC_CLIENT_LIST, 0); + InvalidateWindowData(WC_CLIENT_LIST, 0); InvalidateWindowData(WC_LINKGRAPH_LEGEND, 0); BuildOwnerLegend(); InvalidateWindowData(WC_SMALLMAP, 0, 1); @@ -935,6 +934,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (StoryPage::GetNumItems() == 0 || Goal::GetNumItems() == 0) InvalidateWindowData(WC_MAIN_TOOLBAR, 0); + InvalidateWindowData(WC_CLIENT_LIST, 0); InvalidateWindowClassesData(WC_DEPARTURES_BOARD, 0); extern void CheckCaches(bool force_check, std::function log); diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 52b8f9e4dd..8fa840247b 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1916,6 +1916,7 @@ STR_FACE_TIE :Das: STR_FACE_EARRING :Oorbel: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander das of oorbel + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multispeler STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Speler naam: @@ -1974,10 +1975,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Die spel STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Stel wagwoord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskerm jou spel met 'n wagwoord as jy wil dit nie publieke toepassing laat wees nie -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen 'n openbare (internet) of 'n plaaslike (LAN) spel -STR_NETWORK_START_SERVER_UNADVERTISED :Nee -STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Klient{P "" e} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimum aantal kliënte: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies die maksimum aantal kliënte. Alle posisies hoef nie vol te wees nie @@ -2039,19 +2036,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Loskoppe STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Verskaffer is beskerm. Voer wagwoord in STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Maatskappy is beskerm. Voer wagwoord in -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Kliëntelys # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient Lys -STR_NETWORK_COMPANY_LIST_SPECTATE :Toeskou -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nuwe maatskapy # Network client list -STR_NETWORK_CLIENTLIST_KICK :Skop -STR_NETWORK_CLIENTLIST_BAN :Verbod -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Praat met almal -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Praat met maatskappy -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privaate boodskap + + STR_NETWORK_SERVER :Verskaffer STR_NETWORK_CLIENT :Klient diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 34826411c5..11ce506392 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1612,6 +1612,7 @@ STR_FACE_TIE :الربطة: STR_FACE_EARRING :أقراط الأذان: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}غير الربطة أو أقراط الأذن + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}تعدد اللاعبين STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}أسم اللاعب @@ -1734,15 +1735,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}الشر # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :قائمة العملاء -STR_NETWORK_COMPANY_LIST_SPECTATE :شاهد -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :شركة جديدة # Network client list -STR_NETWORK_CLIENTLIST_KICK :اطرد -STR_NETWORK_CLIENTLIST_BAN :بان -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :تحدث مع الكل -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :تحدث لشركة -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :رسالة خاصة + + STR_NETWORK_SERVER :خادم STR_NETWORK_CLIENT :عميل diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 984c27721b..fe0439e806 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1791,6 +1791,7 @@ STR_FACE_TIE :Korbata: STR_FACE_EARRING :Belarritakoak: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Aldatu korbata eta belarritakoak + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijokalaria STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Jokalariaren izena: @@ -1849,8 +1850,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Jokoaren STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Pasahitza ezarri STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Babestu zure jokoa pasahitz batekin ez baduzu nahi publikoa izatea -STR_NETWORK_START_SERVER_UNADVERTISED :Ez -STR_NETWORK_START_SERVER_ADVERTISED :Bai STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Bezero STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Gehienezko bezeroak: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Gehienezko bezero kopurua aukeratu. Ez da beharrezkoa guztia betetzea @@ -1915,15 +1914,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Konpaini # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Bezero zerrenda -STR_NETWORK_COMPANY_LIST_SPECTATE :Ikusle -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Konpainia berria # Network client list -STR_NETWORK_CLIENTLIST_KICK :Kanporatu -STR_NETWORK_CLIENTLIST_BAN :Debekatu -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Guztiei hitz egin -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Konpainiari hitz egin -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mezu pribatua + + STR_NETWORK_SERVER :Zerbitzaria STR_NETWORK_CLIENT :Bezeroa diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index bd08af8fca..333c8a427c 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2226,6 +2226,7 @@ STR_FACE_TIE :Гальшту STR_FACE_EARRING :Завушніца: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Зьмяніць гальштук або завушніцу + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Сеткавая гульня STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Імя гульца: @@ -2284,10 +2285,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Усталяваць пароль STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Абараніце вашу гульню паролем, калі ня хочаце рабіць яе публічна даступнай -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Інтэрнэт -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберыце паміж гульнёй праз Інтэрнэт або ў лакальнай сетцы -STR_NETWORK_START_SERVER_UNADVERTISED :Не -STR_NETWORK_START_SERVER_ADVERTISED :Так STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клiент{P "" ы аў} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. колькасьць клiентаў: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Выбар максымальнай колькасьці кліентаў. Ня ўсе месцы павінны быць занятыя @@ -2349,19 +2346,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Адлу STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сэрвэр абаронены. Увядзіце пароль STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Кампанія абароненая. Увядзіце пароль -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Сьпіс кліентаў # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Сьпіс кліентаў -STR_NETWORK_COMPANY_LIST_SPECTATE :Назіраць -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Новая кампанія # Network client list -STR_NETWORK_CLIENTLIST_KICK :Выкінуць гульца -STR_NETWORK_CLIENTLIST_BAN :Бан -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Пагутарыць з усімі -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Пагутарыць з кампаніяй -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Прыватнае паведамленьне + + STR_NETWORK_SERVER :Сэрвэр STR_NETWORK_CLIENT :Кліент diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 8f46c04eb6..718c242b96 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1992,6 +1992,7 @@ STR_FACE_TIE :Gravata: STR_FACE_EARRING :Brinco: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Alterar gravata ou brinco + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multi-jogador STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome: @@ -2054,10 +2055,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir senha STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que seja publicamente acessível -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :[BLACK}Publicado -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Selecione entre um jogo publicado (internet) ou não publicado (Rede de Área Local, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Não -STR_NETWORK_START_SERVER_ADVERTISED :Sim STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Num máx de clientes: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Escolha o número máximo de clientes. Não é necessário estarem todos preenchidos @@ -2119,19 +2116,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconec STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor está protegido. Digite a senha STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa está protegida. Digite a senha -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de clientes # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :Assistir -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova Companhia # Network client list -STR_NETWORK_CLIENTLIST_KICK :Banir -STR_NETWORK_CLIENTLIST_BAN :Banir -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Falar com todos -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Falar com a empresa -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mensagem privada + + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index ee7cb55b43..80ed08cf20 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1837,6 +1837,7 @@ STR_FACE_TIE :Вратовр STR_FACE_EARRING :Oбица: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cмени вратовръзкатa или oбицатa + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Онлайн играчи STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Име на играч: @@ -1895,10 +1896,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Имет STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Поставяне на парола STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитаване на вашата игра с парола за да не е публично достъпна -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Рекламирана -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Избери игра измежду рекламирана през интернет или нерекламирана през Локален интернет хост или ЛАН -STR_NETWORK_START_SERVER_UNADVERTISED :Не -STR_NETWORK_START_SERVER_ADVERTISED :Да STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. брой играчи: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Избор на максималния брой клиенти. Не всички слотове трябва да се попълнят @@ -1963,15 +1960,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Комп # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с играчите -STR_NETWORK_COMPANY_LIST_SPECTATE :Наблюдавай -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Нова фирма # Network client list -STR_NETWORK_CLIENTLIST_KICK :Изгони -STR_NETWORK_CLIENTLIST_BAN :Бан -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Кажи на всички -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Кажи на компания -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Лично съобщение + + STR_NETWORK_SERVER :Сървър STR_NETWORK_CLIENT :Клиент diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index ccb52894b5..aecbc84f33 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1992,6 +1992,7 @@ STR_FACE_TIE :Corbata: STR_FACE_EARRING :Arracades: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Canvia la corbata o les arracades + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom del jugador: @@ -2054,10 +2055,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}El nom d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Posa una contrasenya STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegeix la teva partida amb una contrasenya si no vols que sigui accessible a desconeguts -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciat -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escull entre una partida anunciada (internet) i una partida no anunciada (xarxa d'àrea local, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :No -STR_NETWORK_START_SERVER_ADVERTISED :Sí STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Màxim nombre de clients: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Tria el nombre màxim de clients. No és necessari omplir tots els llocs. @@ -2119,19 +2116,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegit: escriviu-ne la contrasenya STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companyia protegida: escriviu-ne la contrasenya -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Llista de clients # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Llista de clients -STR_NETWORK_COMPANY_LIST_SPECTATE :Espectador -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova companyia # Network client list -STR_NETWORK_CLIENTLIST_KICK :Breu -STR_NETWORK_CLIENTLIST_BAN :Prohibit -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parla a tothom -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parla amb la companyia -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Missatge Privat + + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Client diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 80a15fe245..e6168d8416 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -727,6 +727,7 @@ STR_FACE_COLLAR :Ҫуха: STR_FACE_TIE :Галстук: STR_FACE_EARRING :Алка: + # Network server list STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Вӑйӑҫӑ ят: @@ -789,6 +790,8 @@ STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Вырн # Network client list + + # Network set password # Network company info join/password diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 132e7bee3b..b0dff6cecb 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2021,6 +2021,7 @@ STR_FACE_TIE :Kravata: STR_FACE_EARRING :Naušnica: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Promijeni kravatu ili naušnicu + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Više igrača STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igrača: @@ -2079,10 +2080,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Ime igre STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Postavi zaporku STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zaštiti svoju igru pomoću zaporke ukoliko ne želiš da bude javno dostupna -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sa oglasima -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberi između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Ne -STR_NETWORK_START_SERVER_ADVERTISED :Da STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klijen{P t ta ata} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Najveći broj klijenata: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Odaberi najveći broj klijenata. Ne moraju sva mjesta biti popunjena. @@ -2144,19 +2141,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odspoji STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Poslužitelj je zaštićen. Unesite zaporku STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tvrtka je zaštićena. Unesite zaporku -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Popis klijenata # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Popis klijenata -STR_NETWORK_COMPANY_LIST_SPECTATE :Promatraj -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova tvrtka # Network client list -STR_NETWORK_CLIENTLIST_KICK :Izbaci -STR_NETWORK_CLIENTLIST_BAN :Zabrana -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Razgovaraj sa svima -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Razgovaraj s tvrtkom -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privatna poruka + + STR_NETWORK_SERVER :Poslužitelj STR_NETWORK_CLIENT :Klijent diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 610d5687b4..4f77e8a609 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2331,6 +2331,7 @@ STR_FACE_TIE :Kravata: STR_FACE_EARRING :Náušnice: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Změnit kravatu nebo náušnice + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Jméno hráče: @@ -2393,10 +2394,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Jméno h STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nastavit heslo STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Svoji hru si můžeš ochránit heslem, když nechceš, aby se ti do ni hlásili jiní lidé -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Vypsané -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyber mezi propagovanou (internet) a nepropagovanou (Místní síť, LAN) hrou -STR_NETWORK_START_SERVER_UNADVERTISED :Ne -STR_NETWORK_START_SERVER_ADVERTISED :Ano STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i ů} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Nejvyšší počet hráčů: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Zvol nejvyšší počet hráčů. Může se jich připojit i méně @@ -2458,19 +2455,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odpojit STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server je chráněný. Napiš heslo STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Společnost je chráněná. Napiš heslo -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :Seznam klientů # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Seznam hráčů -STR_NETWORK_COMPANY_LIST_SPECTATE :Pozorovat -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nová společnost # Network client list -STR_NETWORK_CLIENTLIST_KICK :Vyhodit -STR_NETWORK_CLIENTLIST_BAN :Ban -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Napsat všem -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Napsat společnosti -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Soukromá zpráva + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 4a724369c4..bc73f9dbfd 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1931,6 +1931,7 @@ STR_FACE_TIE :Slips: STR_FACE_EARRING :Ørering: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ændre slips eller ørering + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netværksspil STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spiller navn: @@ -1989,10 +1990,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Navnet v STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Sæt kodeord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskyt dit spil med et kodeord hvis du ikke vil have fremmede med -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Offentlig -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vælg mellem et offentligt (internet) og et ikke offentligt (lokalnetværk, LAN) spil -STR_NETWORK_START_SERVER_UNADVERTISED :Nej -STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tilladte klienter: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vælg det maksimale antal klienter. Det er ikke nødvendigt at fylde dem alle @@ -2054,19 +2051,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Afbryd f STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Indtast kodeord STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Selskabet er beskyttet. Indtast kodeord -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientliste # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient liste -STR_NETWORK_COMPANY_LIST_SPECTATE :Tilslut som tilskuer -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nyt firma # Network client list -STR_NETWORK_CLIENTLIST_KICK :Smid ud -STR_NETWORK_CLIENTLIST_BAN :Ban (Forvis spiller) -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tal til alle -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Tal til selskab -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privat besked + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index d889c36e40..daf0ed96fc 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1991,6 +1991,7 @@ STR_FACE_TIE :Stropdas: STR_FACE_EARRING :Oorbel: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander das of oorbel + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netwerkspel STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelersnaam: @@ -2053,10 +2054,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De speln STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Wachtwoord instellen STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beveilig je spel met een wachtwoord als je niet wilt dat dit algemeen toegankelijk is -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Openbaar -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel -STR_NETWORK_START_SERVER_UNADVERTISED :Nee -STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} speler{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximumaantal spelers: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies het maximaal aantal toegestane spelers. Niet alle posities hoeven gebruikt te worden. @@ -2118,19 +2115,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Verbindi STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is beveiligd. Voer wachtwoord in STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Bedrijf is beveiligd. Voer wachtwoord in -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Spelerslijst # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spelerslijst -STR_NETWORK_COMPANY_LIST_SPECTATE :Toekijken -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nieuw bedrijf # Network client list -STR_NETWORK_CLIENTLIST_KICK :Uit het spel schoppen -STR_NETWORK_CLIENTLIST_BAN :Verbannen -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Met iedereen praten -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Met bedrijf praten -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privébericht + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Speler diff --git a/src/lang/english.txt b/src/lang/english.txt index 53e4b77c6d..2da2f9010c 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -966,7 +966,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :Malaysian Ringg STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Drive on left STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Drive on right -STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Town names +STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Town names: STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Select style of town names ############ start of townname region @@ -2370,6 +2370,9 @@ STR_FACE_TIE :Tie: STR_FACE_EARRING :Earring: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change tie or earring +STR_NETWORK_SERVER_VISIBILITY_PRIVATE :Private +STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Public + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: @@ -2432,10 +2435,8 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game -STR_NETWORK_START_SERVER_UNADVERTISED :No -STR_NETWORK_START_SERVER_ADVERTISED :Yes +STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibility +STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Whether other people can see your server in the public listing STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximum number of clients: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choose the maximum number of clients. Not all slots need to be filled @@ -2497,19 +2498,46 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Client list # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list -STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Online players # Network client list -STR_NETWORK_CLIENTLIST_KICK :Kick -STR_NETWORK_CLIENTLIST_BAN :Ban -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message +STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Multiplayer +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 +STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Edit the name of your server +STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Name of the server +STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Visibility +STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Whether other people can see your server in the public listing +STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Player +STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Name +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Your player name +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Edit your player name +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Your player name +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Administrative actions to perform for this client +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrative actions to perform for this company +STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Join this company +STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Send a message to this player +STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Send a message to all players of this company +STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Send a message to all spectators +STR_NETWORK_CLIENT_LIST_SPECTATORS :Spectators +STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(New company) +STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company and join it +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}This is you +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}This is the host of the game + +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Delete +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK :Password unlock + +STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Admin action +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Are you sure you want to kick player '{RAW_STRING}'? +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Are you sure you want to ban player '{RAW_STRING}'? +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 diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index fc7e981b3d..3c8a4075a0 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1871,6 +1871,7 @@ STR_FACE_TIE :Tie: STR_FACE_EARRING :Earring: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change tie or earring + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: @@ -1929,10 +1930,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game -STR_NETWORK_START_SERVER_UNADVERTISED :No -STR_NETWORK_START_SERVER_ADVERTISED :Yes STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximum number of clients: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choose the maximum number of clients. Not all slots need to be filled @@ -1997,15 +1994,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list -STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company # Network client list -STR_NETWORK_CLIENTLIST_KICK :Kick -STR_NETWORK_CLIENTLIST_BAN :Ban -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 9fd458d97c..7ca572618b 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2016,6 +2016,7 @@ STR_FACE_TIE :Tie: STR_FACE_EARRING :Earring: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Change tie or earring + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Player name: @@ -2078,10 +2079,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}The game STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protect your game with a password if you don't want it to be publicly accessible -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertised -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choose between an advertised (internet) and a not advertised (Local Area Network, LAN) game -STR_NETWORK_START_SERVER_UNADVERTISED :No -STR_NETWORK_START_SERVER_ADVERTISED :Yes STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximum number of clients: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choose the maximum number of clients. Not all slots need to be filled @@ -2143,19 +2140,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Client list # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list -STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company # Network client list -STR_NETWORK_CLIENTLIST_KICK :Kick -STR_NETWORK_CLIENTLIST_BAN :Ban -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Speak to all -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Speak to company -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private message + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client @@ -2200,6 +2191,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Could no STR_NETWORK_ERROR_CLIENT_START :{WHITE}Could not connect STR_NETWORK_ERROR_TIMEOUT :{WHITE}Connection #{NUM} timed out STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}A protocol error was detected and the connection was closed +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Your player name has not been set. The name can be set at the top of the Multiplayer window STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}The revision of this client does not match the server's revision STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Wrong password STR_NETWORK_ERROR_SERVER_FULL :{WHITE}The server is full @@ -2212,6 +2204,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}You took STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Your computer is too slow to keep up with the server STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Your computer took too long to download the map STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Your computer took too long to join the server +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Your player name is not valid ############ Leave those lines in this order!! STR_NETWORK_ERROR_CLIENT_GENERAL :general error @@ -2234,6 +2227,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :received no pas STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :general timeout STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :downloading map took too long STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :processing map took too long +STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :invalid client name ############ End of leave-in-this-order STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Possible connection loss diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 43d7494ed4..9b32e7bd00 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1531,6 +1531,7 @@ STR_FACE_TIE :Kravato: STR_FACE_EARRING :Orelringo: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ŝanĝi kravaton aŭ orelringon. + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Pluraj ludantoj STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ludantnomo: @@ -1653,15 +1654,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Kompanio # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientlisto -STR_NETWORK_COMPANY_LIST_SPECTATE :Spekti -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova kompanio # Network client list -STR_NETWORK_CLIENTLIST_KICK :Forbatu -STR_NETWORK_CLIENTLIST_BAN :Bari -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parolu al ĉiuj -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parolu al kompanio -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privata mesaĝo + + STR_NETWORK_SERVER :Servilo STR_NETWORK_CLIENT :Kliento diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 88b77d916f..8a4a25ec78 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2043,6 +2043,7 @@ STR_FACE_TIE :Lips: STR_FACE_EARRING :Kõrvarõngas: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaheta kraed või kõrvarõngast + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mitmikmäng STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Mängija nimi: @@ -2105,10 +2106,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Serveril STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Määra salasõna STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Et server ei oleks avalik, kaitse oma mäng salasõnaga -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklaami -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valib reklaamitava (internet) või mittereklaamitava (kohtvõrk, LAN) mängu -STR_NETWORK_START_SERVER_UNADVERTISED :Ei -STR_NETWORK_START_SERVER_ADVERTISED :Jah STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Kliente kuni: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS.in :sees @@ -2171,19 +2168,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Katkesta STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server on kaitstud. Sisesta salasõna STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Ettevõte on kaitstud. Sisesta salasõna -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientide nimekiri # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientide nimekiri -STR_NETWORK_COMPANY_LIST_SPECTATE :Jälgi -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Uus ettevõte # Network client list -STR_NETWORK_CLIENTLIST_KICK :Viska välja -STR_NETWORK_CLIENTLIST_BAN :Bänn -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Räägi kõigiga -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Räägi ettevõttega -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privaatne sõnum + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 3ac497e5c9..6191f8411e 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1697,6 +1697,7 @@ STR_FACE_TIE :Slips: STR_FACE_EARRING :Oyraringur: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Broyt slips ella oyraring + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hópspæl STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spælara navn: @@ -1755,8 +1756,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Aðrir s STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Áset loyniorð STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Verj títt spæl við einum loyniorðið um tú ikki vil at ta skal verða opi fyri almenninginum -STR_NETWORK_START_SERVER_UNADVERTISED :Nei -STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" ar} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Mest loyvdir klientar: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vel mest loyvda tali av klientum. Ta er ikki neyðugt at fylla øll plássini @@ -1821,15 +1820,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Fyritøk # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Listi yvir klientar -STR_NETWORK_COMPANY_LIST_SPECTATE :Eygleið -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nýggja fyritøku # Network client list -STR_NETWORK_CLIENTLIST_KICK :Sparka -STR_NETWORK_CLIENTLIST_BAN :Bannað -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tosa við øll -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Tosa við fyritøku -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Persónligt boð + + STR_NETWORK_SERVER :Servari STR_NETWORK_CLIENT :Klient diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 01d3121d35..834b5b3eb2 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1992,6 +1992,7 @@ STR_FACE_TIE :Solmio: STR_FACE_EARRING :Korvakoru: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaihda solmio tai korvakoru + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Moninpeli STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Pelaajan nimi @@ -2054,10 +2055,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nimi nä STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Aseta salasana STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Mainostettu -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Valitse mainostettu (internet) tai ei-mainostettu (paikallisverkko, LAN) peli -STR_NETWORK_START_SERVER_UNADVERTISED :Ei -STR_NETWORK_START_SERVER_ADVERTISED :Kyllä STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} asiakas{P "" ta} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Pelaajien enimmäismäärä: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pelaajien enimmäismäärä. Pelissä voi olla myös vähemmän pelaajia @@ -2119,19 +2116,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Pura yht STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Palvelin on suojattu. Anna salasana STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Yhtiö on suojattu. Anna salasana -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Asiakaslista # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Asiakaslista -STR_NETWORK_COMPANY_LIST_SPECTATE :Katsele -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Uusi yhtiö # Network client list -STR_NETWORK_CLIENTLIST_KICK :Potkaise -STR_NETWORK_CLIENTLIST_BAN :Kiellä -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Puhu kaikille -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Puhu yhtiölle -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Yksityinen viesti + + STR_NETWORK_SERVER :Palvelin STR_NETWORK_CLIENT :Pelaaja @@ -2176,6 +2167,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Palvelin STR_NETWORK_ERROR_CLIENT_START :{WHITE}Yhdistäminen ei onnistunut STR_NETWORK_ERROR_TIMEOUT :{WHITE}Yhteys nro {NUM} aikakatkaistiin STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Protokollavirhe tapahtui ja yhteys suljettiin +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Et ole asettanut pelaajanimeäsi. Nimen voi asettaa moninpeli-ikkunan ylälaidassa. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Tämän asiakkaan versio ei vastaa palvelimen versiota STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Väärä salasana STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Palvelin on täynnä @@ -2188,6 +2180,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Käytit STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Tietokoneesi on liian hidas pysyäkseen palvelimen tahdissa STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Kartan lataus kesti liian kauan STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Palvelimelle liittyminen kesti liian kauan +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Pelaajanimesi ei kelpaa ############ Leave those lines in this order!! STR_NETWORK_ERROR_CLIENT_GENERAL :yleinen virhe @@ -2210,6 +2203,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :salasanaa ei va STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :yleinen aikakatkaisu STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :kartan lataaminen kesti liian kauan STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :kartan käsittely kesti liian kauan +STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :Epäkelpo asiakasnimi ############ End of leave-in-this-order STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mahdollinen yhteyden menetys diff --git a/src/lang/french.txt b/src/lang/french.txt index bef72b2fe7..f3e12e38b3 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1992,6 +1992,7 @@ STR_FACE_TIE :Cravate{NBSP}: STR_FACE_EARRING :Boucle d'oreille{NBSP}: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Modifier la cravate ou la boucle d'oreille + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijoueurs STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom du joueur{NBSP}: @@ -2054,10 +2055,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Les autr STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Choisir le mot de passe STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protégez votre partie avec un mot de passe si vous ne souhaitez pas que d'autres l'utilisent -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publiée -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Choisir entre une partie publiée (internet) et une partie non publiée (Réseau local, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Non -STR_NETWORK_START_SERVER_ADVERTISED :Oui STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Nombre de clients maximum{NBSP}: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Choisir un nombre maximum de clients. Tous les emplacements n'auront pas besoin d'être remplis @@ -2119,19 +2116,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Déconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Le serveur est protégé. Entrez le mot de passe STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}La compagnie est protégée. Entrez le mot de passe -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Liste des clients # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste des clients -STR_NETWORK_COMPANY_LIST_SPECTATE :Spectateur -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nouvelle compagnie # Network client list -STR_NETWORK_CLIENTLIST_KICK :Exclure -STR_NETWORK_CLIENTLIST_BAN :Bannir -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parler à tous -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parler à la compagnie -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Message privé + + STR_NETWORK_SERVER :Serveur STR_NETWORK_CLIENT :Client diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index ec7b7a3e22..7d0300cee3 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1796,6 +1796,7 @@ STR_FACE_TIE :Strik: STR_FACE_EARRING :Earbel: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Feroarje strik of earbel + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Namme fan spieler: @@ -1842,10 +1843,6 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start in STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Spulnamme: STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Wachtwurd ynstelle -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Advertearre -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Kies tusken in advertearre (ynternet) of in net-advertearre (LAN) spul -STR_NETWORK_START_SERVER_UNADVERTISED :Nee -STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} kliïnt{P "" en} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimaal oantal kliïnten: STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} bedriuw{P "" en} @@ -1899,14 +1896,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Bedriuw # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Client lyst -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Taskôgje -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nei Bedriuw # Network client list -STR_NETWORK_CLIENTLIST_KICK :Skoppe -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tsjin elkenien prate -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Praat mei bedriuw -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Priveeberjocht + + STR_NETWORK_SERVER :Tsjinner STR_NETWORK_CLIENT :Kliïnt diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 42d5ae967d..4af2f92dfa 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2082,6 +2082,7 @@ STR_FACE_TIE :Tàidh: STR_FACE_EARRING :Fàinne-chluaise: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Atharraich an tàidh no an fhàinne-chluaise + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ioma-chluicheadair STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ainm cluicheadair: @@ -2140,10 +2141,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Thèid a STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Suidhich facal-faire STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Dìon an geama agad le facal-faire ach nach eil e ri fhaighinn gu poblach -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Sanasaichte -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dèan taghadh eadar geama sanasaichte (eadar-lìon) no gun sanasachadh (lìonra ionadail, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Chan eil -STR_NETWORK_START_SERVER_ADVERTISED :Tha STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P chliant chliant cliantan cliant} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Cliantan air a char as motha: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Tagh an àireamh as motha dhe chliantan. Cha leig thu leas a h-uile slot a lìonadh @@ -2208,15 +2205,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tha a' c # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liosta nan cliant -STR_NETWORK_COMPANY_LIST_SPECTATE :Coimhead air -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Companaidh ùr # Network client list -STR_NETWORK_CLIENTLIST_KICK :Thoir a bhròg dha -STR_NETWORK_CLIENTLIST_BAN :Toirmisg -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Bruidhinn ris a h-uile duine -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Bruidhinn ris a' chompanaidh -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Teachdaireachd phrìobhaideach + + STR_NETWORK_SERVER :Frithealaiche STR_NETWORK_CLIENT :Cliant diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 7f1586f71e..ee4251702b 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1918,6 +1918,7 @@ STR_FACE_TIE :Garavata: STR_FACE_EARRING :Pendentes: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambia-la garavata ou os pendentes + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multixogador STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome do xogador: @@ -1976,10 +1977,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Establecer contrasinal STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protexe a túa partida cun contrasinal se non queres ser accesible públicamente -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciado -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escolle entre unha partida con anuncios (internet) ou sen eles (LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Non -STR_NETWORK_START_SERVER_ADVERTISED :Si STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Escolle o máximo número de clientes. Non tódolos ocos teñen que estar cubertos @@ -2041,19 +2038,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconec STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}O servidor está protexido. Introduce o contrasinal STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}A compañía está protexida. Introduce o contrasinal -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de clientes # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :Observar -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova compañía # Network client list -STR_NETWORK_CLIENTLIST_KICK :Chimpar -STR_NETWORK_CLIENTLIST_BAN :Bloquear -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Falar a todos -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Falar con compañía -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mensaxe privada + + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente diff --git a/src/lang/german.txt b/src/lang/german.txt index e8d5a61306..d2de48a1b0 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2295,6 +2295,7 @@ STR_FACE_TIE :Krawatte: STR_FACE_EARRING :Ohrring: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Krawatte oder Ohrring ändern + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mehrspieler STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spielername: @@ -2357,10 +2358,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Der Name STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Passwort setzen STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Ein Passwort verhindert, dass unbefugte Leute beitreten -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Angekündigt -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Zwischen öffentlich angekündigtem (Internet) und nicht angekündigtem (Local Area Network, LAN) Spiel wählen -STR_NETWORK_START_SERVER_UNADVERTISED :Nein -STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Teilnehmer STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximale Teilnehmeranzahl: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Auswahl der maximal erlaubten Anzahl von Teilnehmern. Nicht alle Slots müssen belegt werden @@ -2422,19 +2419,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Trennen STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ist geschützt. Passwort eingeben: STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ist geschützt. Passwort eingeben: -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Teilnehmerliste # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Teilnehmerliste -STR_NETWORK_COMPANY_LIST_SPECTATE :Zuschauen -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Neue Firma # Network client list -STR_NETWORK_CLIENTLIST_KICK :Hinauswerfen -STR_NETWORK_CLIENTLIST_BAN :Sperren -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Mit allen sprechen -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Mit Firma sprechen -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Private Nachricht + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Teilnehmer diff --git a/src/lang/greek.txt b/src/lang/greek.txt index b0664a3b3e..aaebaae59f 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2038,6 +2038,7 @@ STR_FACE_TIE :Γραβάτα: STR_FACE_EARRING :Σκουλαρίκι: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Αλλαγή γραβάτας ή σκουλαρικιού + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Παιχνίδι πολλών παικτών STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Όνομα παίκτη: @@ -2097,10 +2098,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Το ό STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Θέση κωδικού STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Προστατέψτε το παιχνίδι με έναν κωδικό εάν δε θέλετε να είναι δημοσίως προσβάσιμο -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Διαφημιζόμενο -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Επιλογή ανάμεσα σε ένα διαφημιζόμενο (διαδίκτυο) ή μη διαφημιζόμενο (Τοπικό Δίκτυο/LAN) παιχνίδι -STR_NETWORK_START_SERVER_UNADVERTISED :Όχι -STR_NETWORK_START_SERVER_ADVERTISED :Ναι STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} συμπαίκτ{P ης ες} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Μέγιστος αριθμός συμμετεχόντων: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Επιλέξτε τον μέγιστο αριθμό συμμετεχόντων. Δεν είναι ανάγκη να γεμίσουν όλες οι θέσεις @@ -2162,19 +2159,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Αποσ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Η πρόσβαση στον διακομιστή προστατεύεται. Εισάγετε τον κωδικό STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Η εταιρεία προστατεύεται από κωδικό. Εισάγετε κωδικό -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Λίστα συμμετεχόντων # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Λίστα συμμετεχόντων -STR_NETWORK_COMPANY_LIST_SPECTATE :Παρακολούθηση -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Νέα εταιρεία # Network client list -STR_NETWORK_CLIENTLIST_KICK :Εκδίωξη -STR_NETWORK_CLIENTLIST_BAN :Απαγόρευση -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Μιλήστε σε όλους -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Μιλήστε στην εταιρεία -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Προσωπικό μήνυμα + + STR_NETWORK_SERVER :Διακομιστής STR_NETWORK_CLIENT :Πελάτης diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index d5460df017..b50bc7908a 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1896,6 +1896,7 @@ STR_FACE_TIE ::עניבה STR_FACE_EARRING ::עגילים STR_FACE_TIE_EARRING_TOOLTIP :{BLACK} שנה עניבה/עגילים + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}משחק רשת STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK} :שם השחקן @@ -1954,10 +1955,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}השם STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}קבע סיסמה STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}הגן על המשחק שלך עם סיסמה אם אתה לא רוצה שהוא יהיה זמין לכולם -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}מפורסם -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}בחר בין משחק מפורסם (אינטרנטי) ומשחק לא מפורסם (רשת מקומית, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :לא -STR_NETWORK_START_SERVER_ADVERTISED :כן STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} לקוח{P "" "ות"} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}מספר מקסימלי של לקוחות: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK} :מספר משתתפים מירבי @@ -2022,15 +2019,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}חברה # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :רשימת משתתפים -STR_NETWORK_COMPANY_LIST_SPECTATE :צפה -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :חברה חדשה # Network client list -STR_NETWORK_CLIENTLIST_KICK :בעט -STR_NETWORK_CLIENTLIST_BAN :חסימה -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :דבר לכולם -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :דבר לחברה -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :הודעה פרטית + + STR_NETWORK_SERVER :שרת STR_NETWORK_CLIENT :לקוח diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index d8e185057f..220e584b4c 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -336,6 +336,7 @@ STR_QUIT_YES :{BLACK}हा # Face selection window + # Network server list STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA} @@ -348,7 +349,6 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x # Start new multiplayer server -STR_NETWORK_START_SERVER_ADVERTISED :हाँ # Network game lobby @@ -371,6 +371,8 @@ STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}उद # Network client list + + # Network set password # Network company info join/password diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index fdcf3b0044..5682ba7548 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2055,6 +2055,7 @@ STR_FACE_TIE :Nyakkendő: STR_FACE_EARRING :Fülbevaló: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Nyakkendő vagy fülbevaló cseréje + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hálózati játék STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Játékos neve: @@ -2117,10 +2118,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}A játé STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Jelszó beállítása STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Védd le a játékodat jelszóval, ha nem akarod hogy illetéktelenek csatlakozzanak -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Hírdetett -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Válassz hírdetett (internet) és nem hírdetett (helyi hálózat, LAN) játék közül. -STR_NETWORK_START_SERVER_UNADVERTISED :Nem -STR_NETWORK_START_SERVER_ADVERTISED :Igen STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} kliens STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Játékosok max. száma: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}A maximálisan felcsatlakozható kliensek számának kiválasztása. Nem szükséges pont ennyi embernek éppen kapcsolódva lennie @@ -2182,19 +2179,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Megszak STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}A szerver jelszóval van védve. Írd be STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}A vállalat jelszóval van védve. Írd be -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Kliens lista # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Kliens lista -STR_NETWORK_COMPANY_LIST_SPECTATE :Megfigyelés -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Új vállalat # Network client list -STR_NETWORK_CLIENTLIST_KICK :Kirúgás -STR_NETWORK_CLIENTLIST_BAN :Kitiltás -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Üzenet mindenkinek -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Üzenet a vállalatnak -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privát üzenet + + STR_NETWORK_SERVER :Szerver STR_NETWORK_CLIENT :Kliens diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index b164c1d034..0bec239c41 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1735,6 +1735,7 @@ STR_FACE_TIE :Bindi: STR_FACE_EARRING :Eyrnalokkur: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Breyta bindi eða eyrnalokk + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Fjölspilun STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nafn leikmanns: @@ -1857,15 +1858,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Fyrirtæ # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Listi yfir leikmenn -STR_NETWORK_COMPANY_LIST_SPECTATE :Fylgjast með -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nýtt fyrirtæki # Network client list -STR_NETWORK_CLIENTLIST_KICK :Sparka -STR_NETWORK_CLIENTLIST_BAN :Banna -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Tala við alla -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Tala við fyrirtæki -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Einkaskilaboð + + STR_NETWORK_SERVER :Þjónn STR_NETWORK_CLIENT :Notandi diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 62eea1f25a..17c345de69 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -603,6 +603,7 @@ STR_QUIT_NO :{BLACK}Ne # Face selection window + # Network server list STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} @@ -637,6 +638,8 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x # Network client list + + # Network set password # Network company info join/password diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 695072e33d..2484e7cdaa 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1968,6 +1968,7 @@ STR_FACE_TIE :Dasi: STR_FACE_EARRING :Anting-anting: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ubah dasi atau anting-anting + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Bermain bersama STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nama pemain: @@ -2030,10 +2031,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nama per STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Atur kata sandi STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Lindungi permainan ini dengan kata kunci jika anda tidak ingin membiarkannya terbuka untuk umum -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Diiklankan -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Pilih antara permainan diiklankan (internet) dan tidak diiklankan (Jaringan wilayah lokal, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Tidak -STR_NETWORK_START_SERVER_ADVERTISED :Ya STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klien STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimum jumlah klien: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pilih jumlah klien maksimal. Tidak semua slot harus diisi @@ -2095,19 +2092,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Putuskan STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server terkunci, masukkan kata kunci STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Perusahaan terkunci, masukkan kata kunci -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Daftar klien # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Daftar klien -STR_NETWORK_COMPANY_LIST_SPECTATE :Menonton -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Buat Perusahaan # Network client list -STR_NETWORK_CLIENTLIST_KICK :Usir -STR_NETWORK_CLIENTLIST_BAN :Larangan -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Bicara ke semua -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Bicara ke perusahaan -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Pesan pribadi + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klien diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 06e52aac1f..a7e08bbdb2 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1870,6 +1870,7 @@ STR_FACE_TIE :Carbhat: STR_FACE_EARRING :Fáinne cluaise: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Athraigh carbhat nó fáinne cluaise + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ilimreoirí STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ainm imreora: @@ -1928,10 +1929,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Taispeá STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Socraigh pasfhocal STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Cosain do chluiche le pasfhocal más mian leat nach mbeidh rochtain phoiblí air -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Fógartha -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Roghnaigh idir cluiche fógartha (idirlín) agus cluiche neamhfhógartha (Líonra Achair Logánta, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Níl -STR_NETWORK_START_SERVER_ADVERTISED :Tá STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} {P ch ch ch gc c}lia{P "" "" "" "" i}nt STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Cliaint uasta: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Roghnaigh uaslíon na gcliant. Ní gá gach áit a líonadh @@ -1996,15 +1993,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tá an c # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liosta na gcliant -STR_NETWORK_COMPANY_LIST_SPECTATE :Féach air -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Cuideachta nua # Network client list -STR_NETWORK_CLIENTLIST_KICK :Ciceáil -STR_NETWORK_CLIENTLIST_BAN :Toirmisc -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Labhair le cách -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Labhair le cuideachta -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Teacht. phríobháideach + + STR_NETWORK_SERVER :Freastalaí STR_NETWORK_CLIENT :Cliant diff --git a/src/lang/italian.txt b/src/lang/italian.txt index ee02377cc0..4a2814f3f5 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2006,6 +2006,7 @@ STR_FACE_TIE :Cravatta: STR_FACE_EARRING :Orecchino: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambia la cravatta o l'orecchino + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multigiocatore STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome giocatore: @@ -2068,10 +2069,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Il nome STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Imposta password STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegge la partita con una password in modo che non sia accessibile pubblicamente -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Pubblico -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Sceglie fra partita pubblica (su Internet) o privata (su rete locale, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :No -STR_NETWORK_START_SERVER_ADVERTISED :Sì STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Limite client: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Imposta il numero massimo di client. Non tutti i posti dovranno essere occupati @@ -2133,19 +2130,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server protetto. Inserire la password STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Compagnia protetta. Inserire la password -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Elenco dei client # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Elenco dei client -STR_NETWORK_COMPANY_LIST_SPECTATE :Diventa spettatore -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nuova compagnia # Network client list -STR_NETWORK_CLIENTLIST_KICK :Espelli -STR_NETWORK_CLIENTLIST_BAN :Bandisci -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Parla a tutti -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Parla alla compagnia -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Messaggio privato + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 70e5fb800a..8e6a625e03 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -32,7 +32,7 @@ STR_CARGO_PLURAL_OIL :石油 STR_CARGO_PLURAL_LIVESTOCK :家畜 STR_CARGO_PLURAL_GOODS :商品 STR_CARGO_PLURAL_GRAIN :穀物 -STR_CARGO_PLURAL_WOOD :木材 +STR_CARGO_PLURAL_WOOD :原木 STR_CARGO_PLURAL_IRON_ORE :鉄鉱石 STR_CARGO_PLURAL_STEEL :鋼鉄 STR_CARGO_PLURAL_VALUABLES :貴重品 @@ -66,7 +66,7 @@ STR_CARGO_SINGULAR_OIL :石油 STR_CARGO_SINGULAR_LIVESTOCK :家畜 STR_CARGO_SINGULAR_GOODS :商品 STR_CARGO_SINGULAR_GRAIN :穀物 -STR_CARGO_SINGULAR_WOOD :木材 +STR_CARGO_SINGULAR_WOOD :原木 STR_CARGO_SINGULAR_IRON_ORE :鉄鉱石 STR_CARGO_SINGULAR_STEEL :鋼鉄 STR_CARGO_SINGULAR_VALUABLES :貴重品 @@ -100,7 +100,7 @@ STR_QUANTITY_OIL :石油{VOLUME_L STR_QUANTITY_LIVESTOCK :家畜{COMMA}頭 STR_QUANTITY_GOODS :商品{COMMA}箱 STR_QUANTITY_GRAIN :穀物{WEIGHT_LONG} -STR_QUANTITY_WOOD :木材{WEIGHT_LONG} +STR_QUANTITY_WOOD :原木{WEIGHT_LONG} STR_QUANTITY_IRON_ORE :鉄鉱石{WEIGHT_LONG} STR_QUANTITY_STEEL :鋼鉄{WEIGHT_LONG} STR_QUANTITY_VALUABLES :貴重品{COMMA}袋 @@ -187,6 +187,7 @@ STR_COLOUR_ORANGE :橙 STR_COLOUR_BROWN :茶 STR_COLOUR_GREY :灰 STR_COLOUR_WHITE :白 +STR_COLOUR_RANDOM :ランダム # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}mph @@ -313,6 +314,7 @@ STR_SORT_BY_RATING :レーティン STR_SORT_BY_NUM_VEHICLES :車両数 STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :昨年の総利益 STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :今年の総利益 +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :前年度の平均利益 # Group by options for vehicle list STR_GROUP_BY_SHARED_ORDERS :共有注文 @@ -361,6 +363,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}地形 STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}町を生成します STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}産業を生成します STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}道路を建設します +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}路面電車建設 STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}木を植えます。Shiftキーを押しながら決定すると費用を見積もります STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}標識を設置します STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}オブジェクトを設置します。Shiftを押しながら決定すると費用を見積もります @@ -650,6 +653,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}音楽がありません STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}トラック STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}タイトル @@ -675,7 +679,9 @@ STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTB STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}楽曲索引 STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}プレイリスト - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}消去 +STR_PLAYLIST_CHANGE_SET :{BLACK}セットの変更 STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}選択したプレイリストの内容を消去します。(カスタム1/2 のみ) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}音楽の選択を別のインストール済みセットに変更する STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}クリックすると、その曲を選択したプレイリストに追加します。(カスタム1/2 のみ) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}クリックすると、その曲を選択したプレイリストから削除します。(カスタム1/2 のみ) @@ -735,6 +741,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}荒地 STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}草地 STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}露地 +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT} {BLACK}熱帯雨林 STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}耕作地 STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}樹林 STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}岩石 @@ -766,6 +773,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}全貨 STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}最新のメッセージ/ニュースを表示します STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * ポーズ中 * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * 一時停止中 (リンクグラフの更新を待っています) * * STR_STATUSBAR_AUTOSAVE :{RED}オートセーブ STR_STATUSBAR_SAVING_GAME :{RED}* * ゲームセーブ中 * * @@ -925,8 +933,12 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :南アフリカ STR_GAME_OPTIONS_CURRENCY_CUSTOM :カスタム… STR_GAME_OPTIONS_CURRENCY_GEL :グルジア ラリー(GEL) STR_GAME_OPTIONS_CURRENCY_IRR :イラン リアル(IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :新ロシアルーブル(RUB) STR_GAME_OPTIONS_CURRENCY_MXN :メキシコペソ(MXN) STR_GAME_OPTIONS_CURRENCY_NTD :新台湾ドル(ntd) +STR_GAME_OPTIONS_CURRENCY_CNY :人民元(CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :香港ドル(HKD) +STR_GAME_OPTIONS_CURRENCY_INR :インドルピー(INR) STR_GAME_OPTIONS_CURRENCY_IDR :インドネシアルピア(IDR) ############ end of currency region @@ -984,6 +996,7 @@ STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}ハードウェアアクセラレーション +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK} 垂直同期 STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}インターフェイスのサイズ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}インターフェイス上の単位サイズを指定します @@ -994,15 +1007,19 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :2倍 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4倍 STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}フォントサイズ +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}使用するインターフェースのフォントサイズを選択します STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(自動検出) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :ノーマル +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :ダブルサイズ +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :4倍 STR_GAME_OPTIONS_GRAPHICS :{BLACK}グラフィクス STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}画面リフレッシュレート STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}使用する画面のリフレッシュレートを選択します STR_GAME_OPTIONS_REFRESH_RATE_OTHER :その他 +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}60Hzを超えるリフレッシュレートはパフォーマンスに影響を与える可能性があります。 STR_GAME_OPTIONS_BASE_GRF :{BLACK}基本グラフィックセット STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}使用するグラフィックセットを選択します @@ -1098,6 +1115,7 @@ STR_TERRAIN_TYPE_FLAT :平地 STR_TERRAIN_TYPE_HILLY :丘陵地 STR_TERRAIN_TYPE_MOUNTAINOUS :山岳地 STR_TERRAIN_TYPE_ALPINIST :山脈地帯 +STR_TERRAIN_TYPE_CUSTOM :カスタム高度 STR_CITY_APPROVAL_PERMISSIVE :寛大 STR_CITY_APPROVAL_TOLERANT :寛容 @@ -1118,6 +1136,7 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :ゲーム設定 STR_CONFIG_SETTING_TYPE_GAME_INGAME :ゲーム設定(現在のゲームにのみ影響) STR_CONFIG_SETTING_TYPE_COMPANY_MENU :会社設定(新規ゲームにのみ影響) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :会社設定(現在の会社のみに影響) +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}注意! STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}カテゴリ: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}種類: @@ -1179,11 +1198,13 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :設定を有効 STR_CONFIG_SETTING_CITY_APPROVAL :地域の再編に対する町の姿勢: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :会社が街域で引き起こした騒音(主に空港)や環境破壊がどの程度、街での評価や同じ地域での更なる建設行為に影響するかを設定します +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :マップ高さ限界: {STRING} STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}マップの最高高さをこの値には設定出来ません。少なくとも1箇所以上この値より高い山があります。 STR_CONFIG_SETTING_AUTOSLOPE :建物/路線の自動地形追従: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :撤去を行わないで建物や路線がある土地の地形を変更することを可能にします。建物/路線は変更された地形に自動で追従します。 STR_CONFIG_SETTING_CATCHMENT :現実的な受入範囲: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :駅や空港の種類の違いによって受入範囲が変動するようになります +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :有効にすると、駅が接続されている産業(石油掘削装置など)にも、近くに建設された会社が所有している駅がサービスを提供する場合があります。無効になっている場合、これらの産業は、接続されているステーションによってのみサービスを受けることができます。近くの会社のステーションはそれらにサービスを提供できず、接続されたステーションは業界以外のものにサービスを提供しません STR_CONFIG_SETTING_EXTRADYNAMITE :街有道路・橋・トンネルの撤去容認: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :街有の交通インフラや建物の撤去をより容易にします STR_CONFIG_SETTING_TRAIN_LENGTH :列車の最大長: {STRING} @@ -1321,6 +1342,7 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :石油精製所 STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :石油精製所はマップの外周付近にのみ建設されます。つまり、外周が海のマップでは海岸沿いに建設されるということです STR_CONFIG_SETTING_SNOWLINE_HEIGHT :雪線の位置: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :亜寒帯気候での雪線の高さを設定します。雪は産業と街の成長に影響があります +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :地形の起伏: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesisのみ) 地形の起伏度を設定します。なだらかな地形では丘陵の数は減り、裾野が長くなります。起伏が多い地形では丘陵が多くなりますが、似たり寄ったりな地形の繰り返しに見えることがあります STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :特になだらか @@ -1359,6 +1381,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :青紫 STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :スクロール時の動き STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :右クリックでビューポートを移動し、マウスの位置をロックします STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :右クリックで地図を移動し、マウスの位置をロックします +STR_CONFIG_SETTING_SCROLLMODE_RMB :マップを右マウスボタンで動かす STR_CONFIG_SETTING_SMOOTH_SCROLLING :画面のスムーズスクロール: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :ミニマップでの移動や「現在位置に移動」などのコマンドを使用した際にメイン画面がどのように移動するかを設定します。有効にした場合はスムーズにスクロールして移動します。無効の場合は目的地に直接ジャンプします STR_CONFIG_SETTING_MEASURE_TOOLTIP :測定ツールチップ表示: {STRING} @@ -1430,6 +1453,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :橋やトンネ STR_CONFIG_SETTING_EXPENSES_LAYOUT :財政ウィンドウのグループ分け: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :財政ウィンドウのレイアウトを収入部門・支出部門でグループ分けするかどうかを設定します STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}%通常のゲーム速度 +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :制限なし(コンピューターが許す限り高速) STR_CONFIG_SETTING_SOUND_TICKER :ニュース表示: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :ステータスバーにニュースが流れたとき効果音を鳴らすかどうかを設定します @@ -1478,6 +1502,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :マルチプレ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :マルチプレイヤーゲームでもAIのライバル企業が登場するかを設定します STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :命令コード処理上限: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :AIやゲームスクリプトが一つの「詰め込み指令」を処理する際に、一度に演算できる命令コード数を設定します。一般に値を小さくした場合、ゲームへの負荷が軽減されます +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :最大信頼度を点検要件化: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :次の点検が必要と判断される条件を設定します。無効の場合は、前の点検から指定の期間が経過した際に点検が必要と判断されます。有効にすると、輸送機器の最大信頼度が指定の値より落ち込んだ場合に次の点検が必要と判断されます @@ -1537,7 +1562,9 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :カラー新聞 STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :新聞がカラー版になる境目の年を設定します STR_CONFIG_SETTING_STARTING_YEAR :開始年: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :スコアリングの目的でゲームが終了する年。 今年の終わりには、会社のスコアが記録され、ハイスコア画面が表示されますが、プレーヤーはその後もプレイを続けることができます。{}これが開始年より前の場合、ハイスコア画面は表示されません。 +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ECONOMY_TYPE :エコノミータイプ:{STRING} +STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :オリジナル STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :なだらか STR_CONFIG_SETTING_ALLOW_SHARES :他社株の取引許容: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :有効にすると、ライバル会社の株式を取引できるようになります。この設定を有効にしても、目的の社が設立から丸5年経過していない場合は取引できません @@ -1588,6 +1615,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :町の総人口 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :樹木の自然成長: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :ゲーム中、ランダムに生えてくる樹種を設定します。設定によっては樹木の生育に依存する産業に悪影響が生じる可能性があります(「不可」にした場合、亜熱帯地域の伐採所を機能させ続けるためには手動で植林し続ける必要があります) STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :成長するが、熱帯雨林にのみ広がる +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :成長し、どこにでも広がる STR_CONFIG_SETTING_TOOLBAR_POS :メインツールバーの位置: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :画面上のメインツールバーの位置を決めます @@ -1752,6 +1780,7 @@ STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}メモ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}スプライトキャッシュ中、{BYTES}の割り当てに失敗しました。スプライトキャッシュは{BYTES}に減ったため、OpenTTDの処理速度が低下する恐れがあります。必要メモリ量を減らすには32bitグラフィックを無効にするか、最大ズームイン・ズームアウトのレベルを下げてください # Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}ビデオ設定にエラーがあります... # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1916,6 +1945,7 @@ STR_FACE_TIE :ネクタイ: STR_FACE_EARRING :イヤリング: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}ネクタイ/イヤリングを変更します + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}マルチプレイヤーゲーム STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}プレイヤー名: @@ -1959,6 +1989,7 @@ STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}サー STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}サーバー情報を更新します STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}インターネットを検索 +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}インターネットで公開されているサーバーを探す STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}LANで探す STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}ローカルエリアネットワークでサーバーを検索する STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}サーバーを追加 @@ -1977,10 +2008,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}ゲー STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}パスワードを設定 STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}ゲームをパスワードで保護することができます。一般から公然とアクセスされたくない場合等に設定します -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}ゲーム公示 -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}ゲームを公示(インターネット)するか、非公示(LAN)にするかを選びます -STR_NETWORK_START_SERVER_UNADVERTISED :非公示 -STR_NETWORK_START_SERVER_ADVERTISED :公示 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}接続者数: {NUM} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}最大接続数: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}接続できるクライアントの最大数を指定します。必ずしも全スロットを埋める必要はありません @@ -2045,15 +2072,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}この # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :クライアントリスト -STR_NETWORK_COMPANY_LIST_SPECTATE :観覧モード -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :新会社 # Network client list -STR_NETWORK_CLIENTLIST_KICK :追放 -STR_NETWORK_CLIENTLIST_BAN :参入禁止 -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :全員へ発言 -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :チームへ発言 -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :個人的なメッセージ + + STR_NETWORK_SERVER :サーバー STR_NETWORK_CLIENT :クライアント @@ -2109,6 +2131,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}パス STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}サーバーとの接続を維持できる十分な処理能力がありません STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}マップのダウンロード時間が規定を超過しました STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}タイムアウトによりサーバーへの接続を確立できません +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}プレイヤー名が無効です ############ Leave those lines in this order!! STR_NETWORK_ERROR_CLIENT_GENERAL :一般エラー @@ -2144,6 +2167,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :ゲームはま STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :ゲームはまだポーズされています。({STRING}、{STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :ゲームはまだポーズされています。 ({STRING}、{STRING}、{STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :ゲームはまだポーズされています。 ({STRING}、{STRING}、{STRING}、{STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :ゲームはまだポーズされています。 ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :ゲームのポーズが解除されました。({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :プレーヤー数不足 STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :クライアントに接続中 @@ -2161,6 +2185,7 @@ STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} は名前を {STRING} に変更しました STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}サーバがセッションを終了しました STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}このサーバーは再起動中です…{}しばらくお待ちください… +STR_NETWORK_MESSAGE_KICKED :*** {STRING}がキックされました。理由: ({STRING}) # Content downloading window STR_CONTENT_TITLE :{WHITE}コンテンツをダウンロード中 @@ -2236,6 +2261,7 @@ STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}はい STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}いいえ、OpenTTDを終了します STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}ダウンロードに失敗しました +STR_MISSING_GRAPHICS_ERROR :{BLACK}グラフィックのダウンロードに失敗しました。{}手動でダウンロードしてください。 # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}透過表示設定 @@ -2255,6 +2281,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}貨物 STR_LINKGRAPH_LEGEND_ALL :{BLACK}全て STR_LINKGRAPH_LEGEND_NONE :{BLACK}なし STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}表示する会社を選択 +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}未使用(運送過多) @@ -2381,6 +2408,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}道路 STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}軌道用トンネルを建設します。Shiftを押しながら決定すると費用の見積が出ます STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}道路の建設/撤去を切り替えます STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}軌道の建設/撤去を切り替えます +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}道路の種類を変更/アップグレードします.Shiftは、コスト見積もりの作成/表示を切り替えます STR_ROAD_NAME_TRAM :トラムウェイ @@ -2471,6 +2499,7 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}ラン STR_TREES_RANDOM_TREES_BUTTON :{BLACK}ランダムに広域植林 STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}地表全体にランダムに植林します STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}グローブ +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}風景をドラッグして小さな森を植えます STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}風景の上をドラッグして、大きな森を植えます。 # Land generation window (SE) @@ -2530,6 +2559,7 @@ STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}費用: STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}調査/探鉱 STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}建設 STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}出資 +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}すべての産業を削除してもよろしいですか? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}産業:{STRING}に関わる産業チェーン @@ -2676,22 +2706,36 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}フレームレート STR_FRAMERATE_RATE_BLITTER :{BLACK}グラフィックフレームレート:{STRING} +STR_FRAMERATE_SPEED_FACTOR :{BLACK}現在のゲーム速度:{DECIMAL} x +STR_FRAMERATE_CURRENT :{WHITE}現在 +STR_FRAMERATE_AVERAGE :{WHITE}平均 +STR_FRAMERATE_MEMORYUSE :{WHITE}メモリ STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW} {DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} フレーム/秒 STR_FRAMERATE_FPS_WARN :{YELLOW} {DECIMAL}フレーム/秒 +STR_FRAMERATE_FPS_BAD :{RED} {DECIMAL}FPS STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} ############ Leave those lines in this order!! STR_FRAMERATE_GAMELOOP :{BLACK}ゲームループの合計: STR_FRAMERATE_GL_ECONOMY :{BLACK}貨物の取り扱い: +STR_FRAMERATE_GL_TRAINS :{BLACK} 鉄道車両のティック: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} 自動車ティック: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK}航空機ティック: +STR_FRAMERATE_DRAWING :{BLACK}グラフィックレンダリング: STR_FRAMERATE_VIDEO :{BLACK}ビデオ出力: +STR_FRAMERATE_SOUND :{BLACK}サウンドミキサー: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :ゲームループ STR_FRAMETIME_CAPTION_GL_ECONOMY :貨物の取り扱い STR_FRAMETIME_CAPTION_GL_TRAINS :切符 +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :ワールドティック STR_FRAMETIME_CAPTION_GL_LINKGRAPH :リンクグラフの遅延 +STR_FRAMETIME_CAPTION_DRAWING :グラフィックレンダリング STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :ワールドビューポートレンダリング +STR_FRAMETIME_CAPTION_VIDEO :ビデオ出力 +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2717,8 +2761,10 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}ゲー STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}― 情報なし ― STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}フィルター: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}ファイルを上書きする STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}既存のファイルを上書きしてもよろしいですか? +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Parent directory) STR_SAVELOAD_OSKTITLE :{BLACK}保存名を入力 @@ -2730,6 +2776,14 @@ STR_MAPGEN_BY :{BLACK}× STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}街数: STR_MAPGEN_DATE :{BLACK}日付: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}産業数: +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}最高峰: +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}マップの最高峰の最大の高さを1減らします。 +STR_MAPGEN_SNOW_COVERAGE :{BLACK}降雪量: +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}積雪量を10%減らします +STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK} {NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}砂漠の範囲: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}砂漠の割合を10%増やします +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}砂漠の範囲を10%減らします STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}雪線の位置: STR_MAPGEN_SNOW_LINE_UP :{BLACK}雪線を上げる @@ -2759,6 +2813,8 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}ハイ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}サイズ: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} × {NUM} +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}積雪量(%) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}砂漠領域(%) STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}雪線の位置を変更 STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}開始年の変更 @@ -3014,6 +3070,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :街名を変更 # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} 地方自治体 STR_LOCAL_AUTHORITY_ZONE :ゾーン +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}地方自治体の境界を見る STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}社の評判: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}可能な活動: @@ -3042,6 +3099,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}買収 # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} 目標 STR_GOALS_SPECTATOR_CAPTION :{WHITE}大目標 +STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}グローバルな目標を表示する STR_GOALS_COMPANY_BUTTON :{BLACK}会社 STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}会社の目標を見る STR_GOALS_TEXT :{ORANGE}{STRING} @@ -3323,6 +3381,7 @@ STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}本社 STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}詳細 STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}インフラ設備の詳細な個数・タイル数を表示します STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}送金 +STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}この会社にお金を渡す STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}顔の変更 STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}社長の顔を変更します @@ -3340,7 +3399,7 @@ STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}この STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :会社名 STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :社長名 -STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :送りたい金額を入力 +STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :寄付したい金額を入力してください STR_BUY_COMPANY_MESSAGE :{WHITE}現在、当{COMPANY}は業績悪化に伴い、債務の肩代わりを条件に社の全資産をお譲り致そうと考えております。{}{}債務{CURRENCY_LONG}を一括代済し、この会社を吸収合併しますか? @@ -3349,6 +3408,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}線路長: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}信号 STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}道路長(含軌道): +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}路面電車軌道: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}水運長: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}運河 STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}停留施設数: @@ -3359,8 +3419,10 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}産業 STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- なし - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% 輸送済み){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}産業の名前です - 名前をクリックするとこの産業拠点の場所にメイン画面を移動します。Ctrl+クリックでこの産業拠点の場所を新たなビューポートに表示します +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}受け取った貨物: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :すべての貨物タイプ STR_INDUSTRY_DIRECTORY_FILTER_NONE :なし @@ -3373,6 +3435,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生産 STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}この産業拠点は間もなく閉鎖されます! STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}必要条件:{YELLOW} {STRING} {STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :、{STRING} {STRING} STR_INDUSTRY_VIEW_REQUIRES : {BLACK}必要物資: STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW} {STRING} {BLACK}:{CARGO_SHORT}待機中{STRING} @@ -3443,6 +3506,7 @@ STR_GROUP_RENAME_CAPTION :{BLACK}グル STR_GROUP_PROFIT_THIS_YEAR :今年の利益: STR_GROUP_PROFIT_LAST_YEAR :昨年の利益: +STR_GROUP_OCCUPANCY :選択中: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :新規機関車(非電化) @@ -3451,6 +3515,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :新規モノレ STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :新規リニア車両 STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :新規車両 +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :新しい路面電車車両 ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :新規列車 @@ -3459,6 +3524,7 @@ STR_BUY_VEHICLE_AIRCRAFT_CAPTION :新規航空機 ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}価格: {GOLD}{CURRENCY_LONG}{BLACK} 重量: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}コスト:{GOLD} {CURRENCY_LONG} {BLACK}(修理コスト:{GOLD} {CURRENCY_LONG} {BLACK})重量:{GOLD} {WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}最高速度: {GOLD}{VELOCITY}{BLACK} 出力: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}最高速度: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}外洋/湖での航行速度: {GOLD}{VELOCITY} @@ -3482,6 +3548,7 @@ STR_PURCHASE_INFO_ENGINES_ONLY :エンジンの STR_PURCHASE_INFO_ALL_BUT :{CARGO_LIST}を除いてすべて STR_PURCHASE_INFO_MAX_TE :{BLACK}最大牽引力: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}航続距離: {GOLD}{COMMA} タイル +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}航空機の機種: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}列車リスト - 個々の情報を見るには列車をクリックします。Ctrl+クリックでその列車種の表示/非表示を切り替えます STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}車両リスト - 個々の情報を見るには車両をクリックします。Ctrl+クリックでその車両種の表示/非表示を切り替えます @@ -3493,12 +3560,15 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}車両 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}船舶を購入 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}航空機を購入 +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}購入し改造する +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}船の購入と修理 STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}選択した列車を購入します。Shift+クリックで購入費を見積もります STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}選択した車両を購入します。Shift+クリックで購入費を見積もります STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}選択した船舶を購入します。Shift+クリックで購入費を見積もります STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}選択した航空機を購入します。Shift+クリックで購入費を見積もります +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}ハイライトされた船を購入して修理します。Shift +クリックすると、購入なしの推定コストが表示されます STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}名称を変更 STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}名称を変更 @@ -3614,6 +3684,7 @@ STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :モノレール STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :リニア列車 STR_ENGINE_PREVIEW_ROAD_VEHICLE :車両 +STR_ENGINE_PREVIEW_TRAM_VEHICLE :路面電車車両 STR_ENGINE_PREVIEW_AIRCRAFT :航空機 STR_ENGINE_PREVIEW_SHIP :船舶 @@ -3661,6 +3732,7 @@ STR_REPLACE_ELRAIL_VEHICLES :機関車(電 STR_REPLACE_MONORAIL_VEHICLES :モノレール車両 STR_REPLACE_MAGLEV_VEHICLES :リニア車両 +STR_REPLACE_ROAD_VEHICLES :道路車両 STR_REPLACE_TRAM_VEHICLES :路面電車の車両 STR_REPLACE_REMOVE_WAGON :{BLACK}列車の短縮: {ORANGE}{STRING} @@ -3701,6 +3773,8 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}車両 STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}船舶の情報を表示 STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}航空機の情報を表示します +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}現在の列車の動作-クリックして列車を停止/開始します +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}現在の車両の動作-クリックして車両を停止/開始します STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}現在の船のアクション-クリックして船を停止/開始します STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}現在の航空機のアクション-クリックして航空機を停止/開始します @@ -3743,6 +3817,8 @@ STR_VEHICLE_INFO_AGE :{COMMA}年({COM STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA}年({COMMA}年) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}最高速度: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}最高速度: {LTBLUE}{VELOCITY} {BLACK}航空機のタイプ: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}最高速度: {LTBLUE}{VELOCITY} {BLACK}航空機のタイプ: {LTBLUE}{STRING} {BLACK}範囲: {LTBLUE}{COMMA}タイル STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}重量: {LTBLUE}{WEIGHT_SHORT} {BLACK}出力: {LTBLUE}{POWER}{BLACK} 最高速度: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}重量: {LTBLUE}{WEIGHT_SHORT} {BLACK}出力: {LTBLUE}{POWER}{BLACK} 最高速度: {LTBLUE}{VELOCITY} {BLACK}最大牽引力: {LTBLUE}{FORCE} @@ -3928,6 +4004,7 @@ STR_ORDER_REFIT_STOP_ORDER :({STRING}に改 STR_ORDER_STOP_ORDER :(運用停止) STR_ORDER_GO_TO_STATION :{1:STATION}へ{0:STRING} {2:STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(駅を使用できません){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(自動) @@ -4106,7 +4183,9 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}選択 STR_AI_LIST_CANCEL :{BLACK}キャンセル STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}スクリプトを変更しません +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}スクリーンショットを完全に拡大 STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}地図全体のスクリーンショット +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}ハイトマップスクリーンショット # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} パラメータ @@ -4187,6 +4266,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :このファイ STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :ファイルを読み込むことができません STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :ファイルに書き込むことができません STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :データ保全性チェック失敗 +STR_GAME_SAVELOAD_ERROR_PATCHPACK :安定版のセーブデータです。 STR_GAME_SAVELOAD_NOT_AVAILABLE :<使用不能> STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}このゲームは路面電車に対応していないバージョンで保存されましたので、すべての路面電車が削除されました。 @@ -4394,6 +4474,7 @@ STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}この輸送機器の自動置換/更新は行われませんでした STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(最低資金が確保できていません) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}新しい車両は{STRING}を運ぶことができません +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}新しい車両は順番に修理できません{NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}不可能な線路の組み合わせです @@ -4402,6 +4483,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}適当 STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}先に線路を撤去しなければなりません STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}道路は一方通行または進入禁止です STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}このレール種別との平面交差はできません +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}この道路では踏切は作れません STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}ここには信号を設置できません STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}ここには線路を建設できません STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}ここから線路を撤去できません @@ -4422,6 +4504,9 @@ STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}ここ STR_ERROR_THERE_IS_NO_ROAD :{WHITE}道路がありません STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}軌道がありません STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}この道路のタイプは変更できません +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}ここで路面電車の種類を変更できません... +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}有効な路面電車がありません +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}軌道に互換性がありません # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}ここには運河を建設できません @@ -4978,6 +5063,7 @@ STR_FORMAT_BUOY_NAME :{TOWN} ブイ STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} 第{COMMA}ブイ STR_FORMAT_COMPANY_NUM :(会社{COMMA}) STR_FORMAT_GROUP_NAME :グループ {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{TOWN}{STRING} STR_FORMAT_WAYPOINT_NAME :{TOWN}中継駅 STR_FORMAT_WAYPOINT_NAME_SERIAL :第{1:COMMA} {0:TOWN}中継駅 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index ee227e03df..4a6e858b44 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2370,6 +2370,7 @@ STR_FACE_TIE :넥타이: STR_FACE_EARRING :귀걸이: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}넥타이/귀걸이 변경 + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}멀티 플레이 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}플레이어 이름: @@ -2432,10 +2433,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}멀티 STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}비밀번호 설정 STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}서버에 공개적으로 접근하는 것을 막고 싶을 때 비밀번호를 걸어 보호합니다. -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}공개 여부 -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}공개된 게임(인터넷)과 비공개된 게임(LAN) 중에서 선택하세요 -STR_NETWORK_START_SERVER_UNADVERTISED :아니요 -STR_NETWORK_START_SERVER_ADVERTISED :예 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM}명 STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}최대 접속자 수: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}최대 접속자 수를 선택합니다. 모든 자리가 다 차 있을 필요는 없습니다 @@ -2497,19 +2494,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}접속 STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}서버 암호가 걸려있습니다. 암호를 입력하세요 STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}회사 암호가 걸려있습니다. 암호를 입력하세요 -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}접속자 목록 # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :접속자 목록 -STR_NETWORK_COMPANY_LIST_SPECTATE :관전 -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :새 회사 # Network client list -STR_NETWORK_CLIENTLIST_KICK :추방 -STR_NETWORK_CLIENTLIST_BAN :차단 -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :모두에게 말하기 -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :이 회사에게 말하기 -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :귓속말하기 + + STR_NETWORK_SERVER :서버 STR_NETWORK_CLIENT :접속자 @@ -2554,6 +2545,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}서버 STR_NETWORK_ERROR_CLIENT_START :{WHITE}접속할 수 없습니다 STR_NETWORK_ERROR_TIMEOUT :{WHITE}접속자 #{NUM}의 입력 시간이 초과되었습니다 STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}프로토콜 오류가 발생되어 연결이 끊어졌습니다 +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}플레이에 사용할 이름을 설정하지 않았습니다. 이름은 멀티플레이 창의 상단에서 설정할 수 있습니다. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}이 접속자의 게임 버전이 서버의 버전과 일치하지 않습니다 STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}잘못된 비밀번호입니다 STR_NETWORK_ERROR_SERVER_FULL :{WHITE}서버에 인원이 가득 찼습니다 @@ -2566,6 +2558,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}비밀 STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}사용자의 컴퓨터가 서버와 연결을 유지할 수 있을 만큼 빠르지 않습니다 STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}지도 다운로드 시간을 초과하였습니다 STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}서버 접속 시간을 초과하였습니다 +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}사용할 수 없는 이름입니다 ############ Leave those lines in this order!! STR_NETWORK_ERROR_CLIENT_GENERAL :일반 오류 @@ -2588,6 +2581,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :제 시간에 STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :반응 시간 초과 STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :지도 다운로드 시간 초과 STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :지도 생성 / 입장 시간 초과 +STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :유효하지 않은 클라이언트 이름 ############ End of leave-in-this-order STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}가능한 연결 손실 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index d31a919d04..082fe46173 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2089,6 +2089,7 @@ STR_FACE_TIE :Focale: STR_FACE_EARRING :Inauris: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mutare focale vel inaurem + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Modus Plurium Lusorum STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nomen lusoris: @@ -2147,10 +2148,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Hoc ludi STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Elige tesseram STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Custodire tessera ludum tuum, si non vis publicos iungere -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Ostensum -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Eligere servatrum ostensum (interretis) aut non ostensum (LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Non -STR_NETWORK_START_SERVER_ADVERTISED :Ita STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} clien{P s tes} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Clientes maximi: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Eligere numerum maximum clientorum. Necesse non est omnes loci pleni esse @@ -2212,19 +2209,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disiunge STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servatrum tutum est. Tesseram inscribe STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Societas tuta est. Tesseram inscribe -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Index clientum # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Index clientum -STR_NETWORK_COMPANY_LIST_SPECTATE :Spectare -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Societas Nova # Network client list -STR_NETWORK_CLIENTLIST_KICK :Dimittere -STR_NETWORK_CLIENTLIST_BAN :Expellere -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Ad omnes loqui -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Ad societatem loqui -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Ad clientem loqui + + STR_NETWORK_SERVER :Servatrum STR_NETWORK_CLIENT :Cliens diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index a568e2f1b7..99f7bf7e34 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1961,6 +1961,7 @@ STR_FACE_TIE :Kaklasaite: STR_FACE_EARRING :Auskars: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mainīt kaklasaiti vai auskarus + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Vairākspēlētāju spēle STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spēlētāja vārds: @@ -2023,10 +2024,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Spēles STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Uzstādīt paroli STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Aizsargā jūsu spēli ar paroli, ja nevēlaties lai tā būtu publiski pieejama -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Izsludināt -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Izvēlieties starp reklamēto (interneta) un nereklamēto (lokālā tīkla, LAN) spēli -STR_NETWORK_START_SERVER_UNADVERTISED :Nē -STR_NETWORK_START_SERVER_ADVERTISED :Jā STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} spēlētāj{P s i u} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimālais spēlētāju skaits: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Izvēlēties maksimālo spēlētāju skaitu. Ne visiem slotiem ir jābūt aizpildītiem @@ -2088,19 +2085,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Atvienot STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveris ir aizsargāts. Ievadiet paroli STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Uzņēmums ir aizsargāts. Ievadiet paroli -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientu saraksts # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spēlētāju saraksts -STR_NETWORK_COMPANY_LIST_SPECTATE :Skatīt -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Jauns uzņēmums # Network client list -STR_NETWORK_CLIENTLIST_KICK :Izmest -STR_NETWORK_CLIENTLIST_BAN :Aizliegt -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Runāt ar visiem -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Runāt ar uzņēmumu -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privāts ziņojums + + STR_NETWORK_SERVER :Serveris STR_NETWORK_CLIENT :Spēlētājs diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index e258138d3a..76ca613e42 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2205,6 +2205,7 @@ STR_FACE_TIE :Kaklaraištis: STR_FACE_EARRING :Auskaras: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Pakeisti kaklaraištį arba auskarą + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Žaidimas tinkle STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Žaidėjo vardas: @@ -2267,10 +2268,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Žaidimo STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nustatyti slaptažodi STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Apsaugokite savo žaidimą slaptažodžiu, jei nenorite, kad jis būtų viešai prieinamas -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Reklamuoti -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Pasirinkite tarp reklamuojamo (internetas) ir nereklamuojamo (Vietinis Tinklas, LAN) žaidimo -STR_NETWORK_START_SERVER_UNADVERTISED :Ne -STR_NETWORK_START_SERVER_ADVERTISED :Taip STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P as ai ų} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Didžiausias klientų skaičius: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pasirinkite didžiausią klientų skaičių. Nebūtinai visos jungtys turi būti užpildytos @@ -2332,19 +2329,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Atsijung STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveris apsaugotas. Įvesk slaptažodį STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Kompanija apsaugota. Įvesk slaptažodį -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Žaidėjų sąrašas # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Žaidėjų sąrašas -STR_NETWORK_COMPANY_LIST_SPECTATE :Stebėti -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nauja įmonė # Network client list -STR_NETWORK_CLIENTLIST_KICK :Išmesti (Kick) -STR_NETWORK_CLIENTLIST_BAN :Užblokuoti -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Sakyti visiems -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Sakyti kompanijai -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privati žinutė + + STR_NETWORK_SERVER :Serveris STR_NETWORK_CLIENT :Žaidėjas diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index c015050bb1..ad05ede8e1 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1986,6 +1986,7 @@ STR_FACE_TIE :Krawatt: STR_FACE_EARRING :Ouerréng: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Krawatt oder Ouerréng änneren + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spillernumm: @@ -2048,10 +2049,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Den Numm STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Passwuert setzen STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}En Passwuert fir d'Spill setzen, dass et net Public accessibel ass -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Ugekënnegt -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Wiel tëschent engem ugekënnegten (Internet) an net ugekënnegten (LAN) Spill -STR_NETWORK_START_SERVER_UNADVERTISED :Nee -STR_NETWORK_START_SERVER_ADVERTISED :Jo STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} Spiller STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximal Spiller: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Maximal Unzuel vun de Clients. Et muss net all Slot gefëllt sinn. @@ -2113,19 +2110,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Verbindu STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ass geschützt. Passwuert aginn STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ass geschützt. Passwuert aginn -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Spillerlëscht # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spillerlëscht -STR_NETWORK_COMPANY_LIST_SPECTATE :Nokucken -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nei Firma # Network client list -STR_NETWORK_CLIENTLIST_KICK :Kicken -STR_NETWORK_CLIENTLIST_BAN :Bannen -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Mat alle schwetzen -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Mat der Firma schwetzen -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privatmessage + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Spiller diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 5d9d74f851..cc0a16c13e 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -961,6 +961,7 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Дал # Face selection window + # Network server list STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} @@ -995,6 +996,8 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x # Network client list + + # Network set password # Network company info join/password diff --git a/src/lang/malay.txt b/src/lang/malay.txt index d0c996e42b..a90c8ad5d5 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1632,6 +1632,7 @@ STR_FACE_TIE :Tali leher: STR_FACE_EARRING :Anting-anting: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Tukar tali leher atau anting-anting + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Pemain berbilang STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nama pemain: @@ -1690,7 +1691,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nama per STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Tetapkan kata laluan STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Lindungi permainan anda dengan kata laluan jika anda tidak mahu ianya diakses awam -STR_NETWORK_START_SERVER_UNADVERTISED :Tidak STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} pelanggan STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Amaun maksimum pemain: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Tentukan bilangan klien maks. Tidak perlu semua slot diisi @@ -1755,15 +1755,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Syarikat # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Senarai klien -STR_NETWORK_COMPANY_LIST_SPECTATE :Saksi -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Syarikat baru # Network client list -STR_NETWORK_CLIENTLIST_KICK :Tendang -STR_NETWORK_CLIENTLIST_BAN :Larang -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Cakap kepada semua -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Cakap kepada syarikat -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Pesanan peribadi + + STR_NETWORK_SERVER :Pelayan STR_NETWORK_CLIENT :Klien diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 864ea04ea9..3db52e0855 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -529,6 +529,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ibdel is # Face selection window + # Network server list STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} @@ -565,6 +566,8 @@ STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} # Network client list + + # Network set password # Network company info join/password diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 4172bf97de..ad242f806c 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -893,6 +893,7 @@ STR_FACE_LIPS_MOUSTACHE_TOOLTIP :{BLACK}ओठ STR_FACE_CHIN :हनुवटी: STR_FACE_CHIN_TOOLTIP :{BLACK}हनुवटी बदला + # Network server list STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}नाव @@ -935,6 +936,8 @@ STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} # Network client list + + # Network set password # Network company info join/password diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 42518d7301..6c8aaaf8e4 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -996,6 +996,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Hver 12. måned STR_GAME_OPTIONS_LANGUAGE :{BLACK}Språk STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Velg språk som skal brukes +STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% fullført) STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Fullskjerm STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Kryss av denne knappen for å spille OpenTTD i fullskjermmodus @@ -1994,6 +1995,7 @@ STR_FACE_TIE :Slips: STR_FACE_EARRING :Ørering: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Endre slips eller ørering + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Flerspiller STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spillernavn: @@ -2056,10 +2058,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Spillnav STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Sett passord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskytt ditt spill med et passord hvis du ikke vil at hvem som helst skal bli med på det -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Annonsert -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Velg mellom et utlyst (internett) og et ikke utlyst (Lokalnettverk, LAN) spill -STR_NETWORK_START_SERVER_UNADVERTISED :Nei -STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maks antall klienter: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS.small :dra og slipp @@ -2122,19 +2120,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Koble fr STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Tjeneren er beskyttet. Skriv inn passord STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firmaet er beskyttet. Skriv inn passord -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientliste # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste over klienter -STR_NETWORK_COMPANY_LIST_SPECTATE :Vær tilskuer -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nytt firma # Network client list -STR_NETWORK_CLIENTLIST_KICK :Kast ut -STR_NETWORK_CLIENTLIST_BAN :Bannlys -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Snakk til alle -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Snakk til firma -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privat melding + + STR_NETWORK_SERVER :Tjener STR_NETWORK_CLIENT :Klient @@ -2179,6 +2171,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Kunne ik STR_NETWORK_ERROR_CLIENT_START :{WHITE}Kunne ikke opprette forbindelse STR_NETWORK_ERROR_TIMEOUT :{WHITE}Tilkobling #{NUM} ble tidsavbrutt STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Forbindelsen ble brutt pga. en protokollfeil +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Spillernavnet ditt er ikke angitt. Navnet kan angis øverst i flerspillervinduet STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Klientversjonen er ikke den samme som tjenerversjonen STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Feil passord STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Tjeneren er full @@ -2191,6 +2184,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Du brukt STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Din datamaskin er ikke rask nok til å holde følge med tjeneren STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Din datamaskin brukte for lang tid på å laste ned kartet STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Din datamaskin brukte for lang tid på å koble til tjeneren +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Spillernavnet ditt er ugyldig ############ Leave those lines in this order!! STR_NETWORK_ERROR_CLIENT_GENERAL :generell feil @@ -2213,6 +2207,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :mottok ikke pas STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :generelt tidsavbrudd STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :nedlasting av kart tok for lang tid STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :behandling av kartet tok for lang tid +STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :ugyldig klientnavn ############ End of leave-in-this-order STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mulig tap av tilkobling diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 4d08054a5b..50b894f2fc 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1794,6 +1794,7 @@ STR_FACE_TIE :Slips: STR_FACE_EARRING :Øyrering: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Byt slips eller øyrering + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Fleirspelar STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelarnamn: @@ -1852,10 +1853,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Spelnamn STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Set passord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beskytt spelet ditt med passord så ikkje kven som helst kan verte med på det -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Kunngjort -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vel mellom spel på internett (kunngjort) og spel på lokalt nett (ikkje kunngjort) -STR_NETWORK_START_SERVER_UNADVERTISED :Nei -STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maks. antal tilletne klientar: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vel maks. antal klientar. Alle plassane treng ikkje å verte tekne @@ -1920,15 +1917,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firmaet # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste over klientar -STR_NETWORK_COMPANY_LIST_SPECTATE :Vær tilskodar -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nytt firma # Network client list -STR_NETWORK_CLIENTLIST_KICK :Kast ut -STR_NETWORK_CLIENTLIST_BAN :Svartelist -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Snakk til alle -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Snakk til firma -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privat melding + + STR_NETWORK_SERVER :Tenar STR_NETWORK_CLIENT :Klient diff --git a/src/lang/persian.txt b/src/lang/persian.txt index cd0abc19f5..f68c121575 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1592,6 +1592,7 @@ STR_FACE_TIE :کراوات: STR_FACE_EARRING :گوشواره: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}تغییر کراوات یا گوشواره + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}چندنفره STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}نام بازیگر: @@ -1650,9 +1651,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}بازی STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}ثبت رمز STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}اگر بازی برای استفاده همگان نیست، بازی خود را با رمز محافظت کنید -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}تبلیغ دار -STR_NETWORK_START_SERVER_UNADVERTISED :خیر -STR_NETWORK_START_SERVER_ADVERTISED :بله STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} سرویس گیرنده STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}بیشترین تعداد سرویس گیرنده: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}بیشترین تعداد سرویس گیرنده را مشخص کنید.لازم نیست دقیقا به تعداد نفرات باشد @@ -1717,15 +1715,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}شرکت # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}لیست سرویس گیرنده ها -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}تماشا -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}شرکت جدید # Network client list -STR_NETWORK_CLIENTLIST_KICK :اخراج -STR_NETWORK_CLIENTLIST_BAN :قدغن کردن -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :گفتگو با همه -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :گفتگو با شرکت -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :پیام خصوصی + + STR_NETWORK_SERVER :سرویس دهنده STR_NETWORK_CLIENT :سرویس گیرنده diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 86abe00467..544692a8e8 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2372,6 +2372,7 @@ STR_FACE_TIE :Krawat: STR_FACE_EARRING :Kolczyk: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Zmień krawat lub kolczyk + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Gra wieloosobowa STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nazwa gracza: @@ -2434,10 +2435,6 @@ 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_ADVERTISED_LABEL :{BLACK}Publiczny -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Wybierz między rozgrywkami reklamowanymi (internetowymi) a niereklamowanymi (w sieci lokalnej LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Nie -STR_NETWORK_START_SERVER_ADVERTISED :Tak 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. @@ -2499,19 +2496,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Rozłąc STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serwer jest chroniony. Wprowadź hasło STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma jest chroniona. Wprowadź hasło -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista klientów # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista klientów -STR_NETWORK_COMPANY_LIST_SPECTATE :Obserwuj -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nowa firma # Network client list -STR_NETWORK_CLIENTLIST_KICK :Wyrzuć -STR_NETWORK_CLIENTLIST_BAN :Banuj -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Mów do wszystkich -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Mów do firmy -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Prywatna wiadomość + + STR_NETWORK_SERVER :Serwer STR_NETWORK_CLIENT :Klient diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index d838222f24..f86404c56c 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1992,6 +1992,7 @@ STR_FACE_TIE :Gravata: STR_FACE_EARRING :Brinco: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mudar gravata ou brinco + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multi-jogador STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nome do jogador: @@ -2054,10 +2055,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}O nome d STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Definir palavra-chave STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteja o jogo com uma senha se não desejar que pessoas indesejadas se juntem -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Anunciado -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Escolher entre jogo público (internet) e privado (Área de Rede Local, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Não -STR_NETWORK_START_SERVER_ADVERTISED :Sim STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Máximo de clientes: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Escolha o número máximo de clientes. Não necessitam estar todos presentes. @@ -2119,19 +2116,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desligar STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduza palavra-chave STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduza palavra-chave -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de clientes # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :Assistir -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova empresa # Network client list -STR_NETWORK_CLIENTLIST_KICK :Expulsar -STR_NETWORK_CLIENTLIST_BAN :Banir -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Falar com todos -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Falar com a empresa -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mensagem privada + + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 558f843884..c0d55cb64a 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1911,6 +1911,7 @@ STR_FACE_TIE :Cravată: STR_FACE_EARRING :Cercei: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Schimbă cravata sau cerceii + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Numele jucătorului: @@ -1973,10 +1974,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Numele j STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Pune parolă STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protejează-ţi jocul cu o parolă dacă nu vrei să intre jucători neautorizaţi -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publicat -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Alege între un joc publicat (prin Internet) și unul privat (reț) game -STR_NETWORK_START_SERVER_UNADVERTISED :Nu -STR_NETWORK_START_SERVER_ADVERTISED :Da 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_NUMBER_OF_COMPANIES :{BLACK}Companii maxim: @@ -2037,15 +2034,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companie # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clienţi -STR_NETWORK_COMPANY_LIST_SPECTATE :Observă -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Companie nouă # Network client list -STR_NETWORK_CLIENTLIST_KICK :Dă afară -STR_NETWORK_CLIENTLIST_BAN :Interzice acces -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Vorbeşte către toţi -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Vorbeşte către companie -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mesaj privat + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Client diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 6740bca0af..daa462a4ae 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2146,6 +2146,7 @@ STR_FACE_TIE :Галстук: STR_FACE_EARRING :Серьга: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Изменить галстук или серьгу + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Сетевая игра STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Имя игрока: @@ -2208,10 +2209,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Установить пароль STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитите вашу игру паролем, если не хотите, чтобы к ней могли подключиться посторонние. -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Интернет -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Выберите между игрой через Интернет, либо в локальной сети -STR_NETWORK_START_SERVER_UNADVERTISED :Нет -STR_NETWORK_START_SERVER_ADVERTISED :Да STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" а ов} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. количество клиентов: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Выбор максимального числа клиентов. Не все места должны быть заняты @@ -2273,19 +2270,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Откл STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сервер защищён. Введите пароль. STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компания защищена. Введите пароль. -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Список клиентов # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Список клиентов -STR_NETWORK_COMPANY_LIST_SPECTATE :Наблюдать -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Новая компания # Network client list -STR_NETWORK_CLIENTLIST_KICK :Отключить -STR_NETWORK_CLIENTLIST_BAN :Бан -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Сказать всем -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Говорить с компанией -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Личное сообщение + + STR_NETWORK_SERVER :Сервер STR_NETWORK_CLIENT :Клиент @@ -2330,6 +2321,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}Не у STR_NETWORK_ERROR_CLIENT_START :{WHITE}Не удалось соединиться STR_NETWORK_ERROR_TIMEOUT :{WHITE}Истекло время ожидания соединения #{NUM} STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Произошла ошибка протокола, и соединение было закрыто +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Не указано имя игрока. Его можно ввести в верхней части окна «Сетевая игра». STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Версия этого клиента не совместима с версией сервера STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Неверный пароль STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Сервер переполнен @@ -2342,6 +2334,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Вы н STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Ваш компьютер работает слишком медленно и не поспевает за сервером STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Ваш компьютер тратит много времени на загрузку карты STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Ваш компьютер тратит много времени на подключение к серверу +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Неверно указано имя игрока ############ Leave those lines in this order!! STR_NETWORK_ERROR_CLIENT_GENERAL :общая ошибка @@ -2364,6 +2357,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :пароль н STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :время вышло STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :загрузка карты заняла слишком много времени STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :обработка карты заняла слишком много времени +STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :имя клиента некорректно ############ End of leave-in-this-order STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Подключение утеряно @@ -3280,7 +3274,7 @@ STR_NEWGRF_BROKEN :{WHITE}Файл STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Меняется состояние локомотива «{1:ENGINE}», находящегося вне депо STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Меняется длина транспорта «{1:ENGINE}», находящегося вне депо STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Он изменил ёмкость ТС «{1:ENGINE}» за пределами депо или без задания на переоборудование -STR_BROKEN_VEHICLE_LENGTH :{WHITE}Поезд «{VEHICLE}», принадлежащий «{COMPANY}», имеет неправильную длину. Вероятно, это вызвано проблемами в файле новой графики (NewGRF). Игра может рассинхронизироваться или вылететь. +STR_BROKEN_VEHICLE_LENGTH :{WHITE}Поезд «{VEHICLE}», принадлежащий «{COMPANY}», имеет неправильную длину. Вероятно, это вызвано ошибками в одном из модулей NewGRF. Игра может рассинхронизироваться или вылететь. STR_NEWGRF_BUGGY :{WHITE}NewGRF «{0:STRING}» предоставляет неверную информацию. STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Информация о вместимости/переоборудовании для локомотива «{1:ENGINE}» после постройки отличается от сведений в списке покупки, что может помешать функции автообновления/автозамены корректно произвести переоборудование. diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 388d195366..1a48da03a0 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2181,6 +2181,7 @@ STR_FACE_TIE :Kravata: STR_FACE_EARRING :Minđuše: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Promena kravate ili minđuša + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mrežna partija STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igrača: @@ -2243,10 +2244,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Naziv pa STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Postavi lozinku STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Ukoliko ne želite da bude javno dostupna zaštitite Vašu partiju lozinkom -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK} Sa reklamama -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Odaberite između igre s oglasima (internet) i bez oglasa (Local Area Network, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Ne -STR_NETWORK_START_SERVER_ADVERTISED :Da STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} igrač{P "" a a} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Najviše igrača: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Odaberite koliko najviše može da ima igrača. Nemoraju sva mesta da budu popunjena @@ -2308,19 +2305,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Isključ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server je zaštićen. Unesite lozinku STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Preduzeće je zaštićeno. Unesite lozinku -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Spisak klijenata # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spisak klijenata -STR_NETWORK_COMPANY_LIST_SPECTATE :Praćenje -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Novo preduzeće # Network client list -STR_NETWORK_CLIENTLIST_KICK :Izbaci -STR_NETWORK_CLIENTLIST_BAN :Zabrani pristup -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Razgovaraj sa svima -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Razgovaraj sa ekipom -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privatna poruka + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Igrač diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 953ae68faa..93933ff0e6 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1991,6 +1991,7 @@ STR_FACE_TIE :领带 STR_FACE_EARRING :耳环 STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}选择领带或是耳环 + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}联机游戏 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}玩家名称: @@ -2053,10 +2054,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}游戏 STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}设置密码: STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}如果不希望你的游戏被外人加入,请设置一个密码 -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}发布到互联网 -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}选择是否将游戏发布到官方服务器列表。发布的话,可以让互联网上的玩家找到你的服务器并加入游戏,否则进行局域网内的游戏。 -STR_NETWORK_START_SERVER_UNADVERTISED :否 -STR_NETWORK_START_SERVER_ADVERTISED :是 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} 客户端 STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}玩家数目: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}选择可以参加的玩家上限(达不到此数量仍然可以开始游戏) @@ -2118,19 +2115,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}断开 STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}服务器需要密码: STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}公司需要密码: -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}客户端列表 # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :客户端列表 -STR_NETWORK_COMPANY_LIST_SPECTATE :旁观 -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :新公司 # Network client list -STR_NETWORK_CLIENTLIST_KICK :踢出 -STR_NETWORK_CLIENTLIST_BAN :禁止 -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :向全体人广播 -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :向本公司广播 -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :私聊 + + STR_NETWORK_SERVER :服务器 STR_NETWORK_CLIENT :客户端 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 02901c912c..93564d078a 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2054,6 +2054,7 @@ STR_FACE_TIE :Kravata: STR_FACE_EARRING :Náušnica: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Zmeniť kravatu alebo náušnicu + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Hra pre viac hráčov STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Meno hráča: @@ -2116,10 +2117,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Názov h STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nastaviť heslo STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zabezpeč hru heslom, ak nechceš povoliť verejný prístup -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Zverejnené -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Vyberte medzi zverejnenou (internet) alebo nezverejnenou (lokálna sieť, LAN) hrou -STR_NETWORK_START_SERVER_UNADVERTISED :Nie -STR_NETWORK_START_SERVER_ADVERTISED :Áno STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" i ov} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximálny počet klientov: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Zvoľ maximálny počet klientov. Môže sa ich pripojiť aj menej. @@ -2181,19 +2178,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odpojiť STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server je chránený. Zadaj heslo STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Spoločnosť je chránená. Zadaj heslo -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Zoznam klientov # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Zoznam klientov -STR_NETWORK_COMPANY_LIST_SPECTATE :Pozorovať -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nová spoločnosť # Network client list -STR_NETWORK_CLIENTLIST_KICK :Vyhodit -STR_NETWORK_CLIENTLIST_BAN :Ban -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Napísať správu všetkým -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Napísať spoločnosti správu -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Súkromná správa + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient @@ -4441,14 +4432,14 @@ STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Názov s STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Meno prezidenta sa nedá zmeniť... STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... úverovy limit je {CURRENCY_LONG} -STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nemôžeš si požičať viac peňazí... +STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Nemôžete si požičať viac peňazí... STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... úver už bol splatený STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} potrebuješ STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Úver sa nedá splatiť... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Nie je možné presunúť peniaze, ktoré sú požičané z banky... STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Nie je možné presunúť peniaze tejto spoločnosti... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Spoločnosť nie je možné kúpiť ... -STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nemôžeš postaviť sídlo spoločnosti... +STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Nemôžete tu postaviť sídlo spoločnosti... STR_ERROR_CAN_T_BUY_25_SHARE_IN_THIS :{WHITE}Nemôžeš kúpiť 25% podiel v tejto spoločnosti... STR_ERROR_CAN_T_SELL_25_SHARE_IN :{WHITE}25% podiel v tejto spoločnosti sa nedá predať ... STR_ERROR_PROTECTED :{WHITE}S akciami tejto spoločnosti nie je zatiaľ možné obchodovať... @@ -4471,10 +4462,10 @@ STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... v ce STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... príliš veľa priemyslu STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Nemožno vygenerovať priemysel... STR_ERROR_CAN_T_BUILD_HERE :{WHITE}{STRING} sa tu nedá postaviť... -STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Nemôžeš tu postaviť tento typ priemyslu... +STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Nemôžete tu postaviť tento typ priemyslu... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... príliš blízko iného priemyslu STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... najskôr je potrebné založiť mesto -STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... povolené len jedno pre 1mesto +STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... povolené len jedno pre každé mesto STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... môže byť postavené v mestách z populáciou väčšou ako 1200 STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... môže byť postavené len v dažďovom pralese STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... môže byť postavené len v púšti @@ -4490,13 +4481,13 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Nenašli STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Pre získanie lepšej mapy zmeňte parametre jej generovania # Station construction related errors -STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Nemôžeš tu postaviť železničnú stanicu... -STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Nemôžeš tu postaviť autobusovú zastávku... +STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Nemôžete tu postaviť železničnú stanicu... +STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Nemôžete tu postaviť autobusovú zastávku... STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Nemôžeš tu postaviť vykládku... -STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nemôžeš postaviť električkovú osobnú stanicu... -STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nemôžeš postaviť električkovú nákladnú stanicu... -STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Nemôžeš tu postaviť prístav... -STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nemôžeš tu postaviť letisko... +STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Nemôžete tu postaviť električkovú zastávku... +STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Nemôžete tu postaviť električkovú vykládku... +STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Nemôžete tu postaviť prístav... +STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nemôžete tu postaviť letisko... STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Susedí z viacerými stanicami/výkladkami STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stanica je príliš veľká @@ -4544,8 +4535,8 @@ STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... bój STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bóju používa iná spoločnosť! # Depot related errors -STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Nemôžeš tu postaviť vlakové depo... -STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Nemôžeš tu postaviť garáž... +STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Nemôžete tu postaviť vlakové depo... +STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Nemôžete tu postaviť garáž... STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Nemôžeš tu postaviť električkové depo... STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Nemôžeš tu postaviť lodenicu... @@ -4585,7 +4576,7 @@ STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Cesta je STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Nie sú povolené priecestia pre tento typ železnice STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Nie sú povolené priecestia pre tento typ cesty STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nemôžeš tu umiestniť návestidlá... -STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nemôžeš tu stavať železničné koľaje... +STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nemôžete tu postaviť železničnú trať... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Nemôžeš tu odstrániť železničné koľaje... STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Nemôžeš tu odstrániť návestidlá... STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Tu nie je možné zameniť návestidlá... @@ -4597,7 +4588,7 @@ STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Nemôže # Road construction errors STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Najprv treba odstrániť cestu STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... na jednosmerných cestách nie sú dovolené križovatky -STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Nemôžeš tu postaviť cestu... +STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Nemôžete tu postaviť cestu... STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Nemôžeš tu stavať električkovú trať... STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Nemôžeš tu odstrániť cestu... STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Nemôžeš tu odstrániť električkovú trať... @@ -4611,15 +4602,15 @@ STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... neko # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Tu sa nedá postaviť vodný kanál... -STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Tu sa nedá postaviť stavidlo... +STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Nemôžete tu postaviť stavidlá... STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Tu nie je možné umiestniť rieku... STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... musíš postaviť na vode -STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... nemôžeš postaviť na vode -STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... nemôžeš postaviť na otvorenom mori +STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... nemôže byť postavené na vode +STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... nemôže byť postavené na otvorenom mori STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... nemôže byť postavené na vodnom kanále STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... nemôže byť postavené na rieke STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Najprv sa musí zbúrať vodný kanál -STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Tu nie je možné postaviť akvadukt... +STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Nemôžete tu postaviť akvadukt... # Tree related errors STR_ERROR_TREE_ALREADY_HERE :{WHITE}... strom tu už je @@ -4627,7 +4618,7 @@ STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE}... zlý STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Nemôžeš tu zasadiť strom... # Bridge related errors -STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Nemôžeš tu postaviť most... +STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Nemôžete tu postaviť most... STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Most musíš najskôr zbúrať STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Nemožno začať a skončiť na tom istom mieste STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Konce mosta nie sú v rovnakej výške @@ -4745,7 +4736,7 @@ STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... vozi STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Nemožno zdieľať zoznam príkazov ... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Nie je možné prestať zdieľať zoznam príkazov... -STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Nemozno kopirovat zoznam prikazov ... +STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Nemožno kopírovať zoznam príkazov ... STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... príliš ďaleko z predchádzajúceho cieľa STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... lietadlo nemá dostatočný dosah diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 5f6b9862b2..6c30097b4b 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2026,6 +2026,7 @@ STR_FACE_TIE :Kravata: STR_FACE_EARRING :Uhani: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Spremeni kravato ali uhane + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Več igralcev STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ime igralca: @@ -2084,10 +2085,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Ime bo p STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Nastavi geslo STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Zaščiti igro z geslom, če želiš preprečiti dostop nepovabljenim -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Oglaševano -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Izberi med oglaševano (internet) in neoglaševano (Local Area Network, LAN) igro -STR_NETWORK_START_SERVER_UNADVERTISED :Ne -STR_NETWORK_START_SERVER_ADVERTISED :Da STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} gost{P "" a i ov} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Dovoljeno število gostov: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Izberite največje število gostov. Ni potrebno, da so vsi prisotni @@ -2152,15 +2149,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Podjetje # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Seznam gostov -STR_NETWORK_COMPANY_LIST_SPECTATE :Opazuj -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Novo podjetje # Network client list -STR_NETWORK_CLIENTLIST_KICK :Brcni -STR_NETWORK_CLIENTLIST_BAN :Blokiraj -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Pogovor vsem -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Pogovor podjetju -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Zasebno sporočilo + + STR_NETWORK_SERVER :Strežnik STR_NETWORK_CLIENT :Gost diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index e5bccc0194..83fc657f4f 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1993,6 +1993,7 @@ STR_FACE_TIE :Corbata: STR_FACE_EARRING :Pendientes: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambiar corbata o pendientes + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nombre del jugador: @@ -2055,10 +2056,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}La parti STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Establecer contraseña STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protege tu partida con una contraseña si no quieres que sea universalmente accesible -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Público -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Permite escoger entre una partida pública (internet) y una partida privada (LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :No -STR_NETWORK_START_SERVER_ADVERTISED :Sí STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Número máximo de clientes: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Selecciona el número máximo de clientes. No es necesario ocupar todos los espacios @@ -2120,19 +2117,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconec STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduce la contraseña STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduce la contraseña -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de Clientes # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :Observar -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nueva empresa # Network client list -STR_NETWORK_CLIENTLIST_KICK :Expulsar (Kick) -STR_NETWORK_CLIENTLIST_BAN :Prohibir (Ban) -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Hablar a todos -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Hablar a empresa -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mensaje privado + + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 33c6cdd560..eadc408e24 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1993,6 +1993,7 @@ STR_FACE_TIE :Corbata: STR_FACE_EARRING :Aretes: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cambiar corbata o aretes + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijugador STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nombre del jugador: @@ -2055,10 +2056,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}La parti STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Establecer contraseña STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Proteger la partida con una contraseña para prevenir el acceso a otras personas -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Público -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Permitir escoger entre una partida pública (Internet) y una partida privada (LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :No -STR_NETWORK_START_SERVER_ADVERTISED :Sí STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} cliente{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Número máximo de clientes: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Elegir el número máximo de clientes. No es necesario que se conecten todos @@ -2120,19 +2117,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconec STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introducir contraseña STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introducir contraseña -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de clientes # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :Observar -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nueva empresa # Network client list -STR_NETWORK_CLIENTLIST_KICK :Expulsar -STR_NETWORK_CLIENTLIST_BAN :Prohibir acceso -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Hablar a todos -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Hablar a una empresa -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Mensaje privado + + STR_NETWORK_SERVER :Servidor STR_NETWORK_CLIENT :Cliente @@ -2177,6 +2168,7 @@ STR_NETWORK_ERROR_SERVER_START :{WHITE}No se pu STR_NETWORK_ERROR_CLIENT_START :{WHITE}No se pudo conectar STR_NETWORK_ERROR_TIMEOUT :{WHITE}Tiempo de espera agotado en conexión #{NUM} STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Se produjo un error de protocolo y la conexión fue cerrada +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Aún no tienes nombre de jugador, pero lo puedes poner en la parte superior de la ventana de Multijugador. STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}La versión de este cliente no corresponde con la versión del servidor STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Contraseña incorrecta STR_NETWORK_ERROR_SERVER_FULL :{WHITE}El servidor está completo @@ -2189,6 +2181,7 @@ STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Tardaste STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Tu computadora es demasiado lenta para seguir la velocidad del servidor STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Tu computadora tardó demasiado en descargar el mapa STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Tu computadora tardó demasiado en conectarse al servidor +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Tu nombre de jugador no es válido ############ Leave those lines in this order!! STR_NETWORK_ERROR_CLIENT_GENERAL :error general @@ -2211,6 +2204,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :no se recibió STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :tiempo agotado en general STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :la descarga del mapa tardó demasiado STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :el procesado del mapa tardó demasiado +STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :nombre de cliente no válido ############ End of leave-in-this-order STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Posible pérdida de conexión diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 07b38852de..06e9d2c34e 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1991,6 +1991,7 @@ STR_FACE_TIE :Slips: STR_FACE_EARRING :Örhänge: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Ändra slips eller örhänge + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Flera spelare STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelarnamn: @@ -2053,10 +2054,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Namnet p STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Bestäm lösenord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Skydda spelet med ett lösenord så att inte andra än dem som har lösenordet kan gå med i spelet -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publikt -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Välj mellan ett publikt (internet) eller icke publikt (Local Area Network. LAN) spel -STR_NETWORK_START_SERVER_UNADVERTISED :Nej -STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Max antal tillåtna klienter: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Välj max antal tillåtna klienter. Alla platser måste inte fyllas. @@ -2118,19 +2115,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Koppla i STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servern är skyddad. Ange lösenord STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Företaget är skyddat. Ange lösenord -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientlista # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientlista -STR_NETWORK_COMPANY_LIST_SPECTATE :Åskåda -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nytt företag # Network client list -STR_NETWORK_CLIENTLIST_KICK :Kasta ut -STR_NETWORK_CLIENTLIST_BAN :Bannlys -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Prata med alla -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Prata med alla i företaget -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privat meddelande + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Klient diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 1f42d388fb..aae33a4a0e 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1734,6 +1734,7 @@ STR_FACE_TIE :Tie: STR_FACE_EARRING :கம்மல்: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Tie அல்லது காதணியை மாற்றவும் + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}பல்வீரர் STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}விளையாடுபவரின் பெயர்: @@ -1789,9 +1790,6 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}பு STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}விளையாட்டு பெயர்: STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}கடவுச்சொல்லினை அமைக்கவும் -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}விளம்பரப்படுத்தப்பட்ட -STR_NETWORK_START_SERVER_UNADVERTISED :இல்லை -STR_NETWORK_START_SERVER_ADVERTISED :ஆம் STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} விளையாடுபவர்{P "" கள்} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}அதிகபட்ச வீரர்கள்: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}வாடிக்கையாளர்களின் அதிகபட்ச எண்ணிக்கையைத் தேர்வுசெய்க. எல்லா இடங்களும் நிரப்பப்பட வேண்டியதில்லை @@ -1850,19 +1848,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}இண STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}சர்வர் காக்கப்பட்டுள்ளது. கடவுச்சொல்லினை இடவும் STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}நிற்வனம் காக்கப்பட்டுள்ளது. கடவுச்சொல்லினை இடவும் -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}விளையாடுவோர் பட்டியல் # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :விளையாடுவோர் பட்டியல் -STR_NETWORK_COMPANY_LIST_SPECTATE :கவனி -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :புதிய நிறுவனம் # Network client list -STR_NETWORK_CLIENTLIST_KICK :உதை -STR_NETWORK_CLIENTLIST_BAN :அனுமதிக்காதே -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :அனைவருடனும் பேசு -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :நிறுவனத்திடம் பேசு -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :இரகசிய தகவல் + + STR_NETWORK_SERVER :சர்வர் STR_NETWORK_CLIENT :Client diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 0df0e1889f..7be5ac879d 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1821,6 +1821,7 @@ STR_FACE_TIE :เนคไท STR_FACE_EARRING :ต่างหู: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}เปลี่ยนเนคไทหรือต่างหู + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}เล่นหลายคน STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}ชื่อผู้เล่น: @@ -1879,10 +1880,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}ชื STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}กำหนดรหัสผ่าน STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}ป้องกันเกมด้วยรหัสผ่านหากไม่ต้องการให้มีการเข้าร่วมจากบุคคลทั่วไป -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}การประกาศ -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}เลือกระหว่างการโฆษณา (internet) หรือไม่โฆษณา (Local Area Network, LAN) เกม -STR_NETWORK_START_SERVER_UNADVERTISED :ไม่ใช่ -STR_NETWORK_START_SERVER_ADVERTISED :ใช่ STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} ลูกข่าย STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}ลูกข่ายสูงสุด: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}เลือกจำนวนมากสุดของลูกข่าย (ไม่จำเป็นต้องครบตามจำนวนนี้) @@ -1947,15 +1944,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}บร # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :รายการลูกข่าย -STR_NETWORK_COMPANY_LIST_SPECTATE :ผู้ชม -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :บริษัทใหม่ # Network client list -STR_NETWORK_CLIENTLIST_KICK :เตะ -STR_NETWORK_CLIENTLIST_BAN :แบน -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :พูดกับผู้เล่นทั้งหมด -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :พูดกับผู้เล่นในบริษัทเดียวกัน -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :ข้อความส่วนตัว + + STR_NETWORK_SERVER :เซิฟเวอร์ STR_NETWORK_CLIENT :ลูกข่าย diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 6ad1115312..548f68be48 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1880,6 +1880,7 @@ STR_FACE_TIE :領帶: STR_FACE_EARRING :耳飾: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}改變領帶或耳飾 + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}多人遊戲 STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}玩家名稱: @@ -1940,10 +1941,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}遊戲 STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}設定密碼 STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}如果您不想讓大眾連線的話,可以用密碼保護遊戲 -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}已啟用宣傳 -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}選擇是否在互聯網上宣傳此遊戲 -STR_NETWORK_START_SERVER_UNADVERTISED :否 -STR_NETWORK_START_SERVER_ADVERTISED :是 STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} 玩家 STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}用戶端上限: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}選擇連線人數上限,但不是每個名額都要有人連線 @@ -2008,15 +2005,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}公司 # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :用戶端清單 -STR_NETWORK_COMPANY_LIST_SPECTATE :旁觀者 -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :新公司 # Network client list -STR_NETWORK_CLIENTLIST_KICK :踢除 -STR_NETWORK_CLIENTLIST_BAN :封鎖 -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :對全員說話 -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :對公司說話 -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :私人訊息 + + STR_NETWORK_SERVER :伺服器 STR_NETWORK_CLIENT :用戶端 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 20234ae4d6..52f7f31d76 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1929,6 +1929,7 @@ STR_FACE_TIE :Kravat: STR_FACE_EARRING :Küpe: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Kravatı veya küpeyi değiştir + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Çok Oyunculu STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Oyuncu adı: @@ -1987,10 +1988,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Bu oyun STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Parola koy STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Erişimi kısıtlamak için oyuna parola koy -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Duyurulan -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Duyurulan (internet) ve duyurulmayan (yerel ağ, LAN) oyun türlerinden birini seçin -STR_NETWORK_START_SERVER_UNADVERTISED :Hayır -STR_NETWORK_START_SERVER_ADVERTISED :Evet STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} istemci STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Azami istemci sayısı: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}İzin verilen en fazla oyuncu sayısını seç. Her yerin dolması gerekmez @@ -2052,19 +2049,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Bağlant STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Sunucu korumalı. Parola girin STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Şirket korumalı. Parola girin -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}İstemci listesi # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Oyuncu listesi -STR_NETWORK_COMPANY_LIST_SPECTATE :Gözlemle -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Yeni şirket # Network client list -STR_NETWORK_CLIENTLIST_KICK :At -STR_NETWORK_CLIENTLIST_BAN :Yasakla -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Herkesle konuş -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Şirketle konuş -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Özel mesaj + + STR_NETWORK_SERVER :Sunucu STR_NETWORK_CLIENT :İstemci diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 24e1ab766a..5c57a834d1 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2114,6 +2114,7 @@ STR_FACE_TIE :Краватк STR_FACE_EARRING :Сережки: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Змінити комір або сережки + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Мережева гра STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Ім'я гравця: @@ -2176,10 +2177,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Назв STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Встановити пароль STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Захистіть вашу гру паролем, якщо не бажаєте загального доступу -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Інтернет -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Вибір між рекламованою (інтернет) і не рекламованою (локальна мережа, LAN) грою -STR_NETWORK_START_SERVER_UNADVERTISED :Ні -STR_NETWORK_START_SERVER_ADVERTISED :Так STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клієнт{P "" а ів} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. клієнтів: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Виберіть максимальну кількість клієнтів. Не всі слоти мають бути зайняті @@ -2241,19 +2238,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Роз' STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сервер захищено паролем. Введіть пароль STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компанія захищена паролем. Введіть пароль -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Список клієнтів # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Список клієнтів -STR_NETWORK_COMPANY_LIST_SPECTATE :Спостерігати -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Нова компанія # Network client list -STR_NETWORK_CLIENTLIST_KICK :Відключити гравця -STR_NETWORK_CLIENTLIST_BAN :Бан -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Повідомлення всім -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Повідомлення компанії -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Приватне повідомлення + + STR_NETWORK_SERVER :Сервер STR_NETWORK_CLIENT :Клієнт diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 83c4b48030..253cb16251 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1483,6 +1483,7 @@ STR_FACE_TIE :ٹائی: STR_FACE_EARRING :بالیاں: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}ٹائی یا بالیاں بدلیں + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}زیادہ کھلاڑی STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}کھلاڑی کا نام: @@ -1605,15 +1606,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}کمپن # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}کلائینٹس کی فہرست -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}نظارہ کریں -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}نئی کمپنی # Network client list -STR_NETWORK_CLIENTLIST_KICK :ٹھڈا -STR_NETWORK_CLIENTLIST_BAN :پابندی -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :سب سے بات کریں -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :کمپنی سے بات کریں -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :پرائیویٹ پیغام + + STR_NETWORK_SERVER :سرور STR_NETWORK_CLIENT :کلائینٹ diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 0c2481af1a..b8aa00a5f1 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1989,6 +1989,7 @@ STR_FACE_TIE :Cà vạt: STR_FACE_EARRING :Bông tai: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Thay đổi cà vạt hoặc bông tai + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Ván Chơi Mạng STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Tên người chơi: @@ -2051,10 +2052,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Tên c STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Đặt mật khẩu STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Bảo vệ game của bạn bằng mật khẩu nếu bạn không muốn người khác vào tùy tiện -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Đã quảng bá -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Lựa chọn ván chơi quảng bá (ra ngoài internet) và không quảng bá (Local Area Network, LAN) -STR_NETWORK_START_SERVER_UNADVERTISED :Không -STR_NETWORK_START_SERVER_ADVERTISED :Có STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} máy trạm STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Số máy trạm tối đa: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Chọn số lượng máy trạm tối đa. Không nhất thiết phải chọn đầy các dòng @@ -2116,19 +2113,13 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Ngắt k STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server yêu cầu xác thực. Nhập mật khẩu STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Công ty yêu cầu xác thực. Nhập mật khẩu -STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Danh sách máy trạm # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Danh sách máy trạm -STR_NETWORK_COMPANY_LIST_SPECTATE :Xem -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Công ty mới # Network client list -STR_NETWORK_CLIENTLIST_KICK :Đá -STR_NETWORK_CLIENTLIST_BAN :Cấm -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Nói với tất cả -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Nói cho công ty -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Thông điệp riêng + + STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Máy trạm diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 521e019bdb..f3765b0d77 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1878,6 +1878,7 @@ STR_FACE_TIE :Tei: STR_FACE_EARRING :Clustlws: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Newid tei neu glustlws + # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Amlchwaraewr STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Enw chwaraewr: @@ -1936,10 +1937,6 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Bydd y g STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Gosod cyfrinair STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Diogelwch eich gêm â chyfrinair os nad ydych am i fynediad ato fod yn gyhoeddus -STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Hysbys -STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Dewis rhwyd gêm a hysbysebir (rhyngrwyd) neu un anhysbys (rhwydwaith leol) -STR_NETWORK_START_SERVER_UNADVERTISED :Na -STR_NETWORK_START_SERVER_ADVERTISED :Ia STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} gwestai STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Uchafswm nifer gwesteion: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Dewiswch uchafswm y gwesteion. Does dim rhaid llanw pob slot @@ -2004,15 +2001,10 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Mae'r cw # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Rhestr Cleientiaid -STR_NETWORK_COMPANY_LIST_SPECTATE :Gwylio -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Cwmni newydd # Network client list -STR_NETWORK_CLIENTLIST_KICK :Cicio -STR_NETWORK_CLIENTLIST_BAN :Gwahardd -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Siarad â phawb -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Siarad a'r cwmni -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Neges breifat + + STR_NETWORK_SERVER :Gweinydd STR_NETWORK_CLIENT :Gwestai diff --git a/src/network/core/config.h b/src/network/core/config.h index 6bbac13207..3ec2656acc 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -30,8 +30,24 @@ static const uint16 NETWORK_DEFAULT_PORT = 3979; ///< The defau static const uint16 NETWORK_ADMIN_PORT = 3977; ///< The default port for admin network static const uint16 NETWORK_DEFAULT_DEBUGLOG_PORT = 3982; ///< The default port debug-log is sent to (TCP) -static const uint16 SEND_MTU = 1460; ///< Number of bytes we can pack in a single packet -static const uint16 SEND_MTU_SHORT = 1400; ///< Number of bytes we can pack in a single packet (conservative) +static const uint16 UDP_MTU = 1460; ///< Number of bytes we can pack in a single UDP packet +static const uint16 UDP_MTU_SHORT = 1400; ///< Number of bytes we can pack in a single UDP packet (conservative) +/* + * Technically a TCP packet could become 64kiB, however the high bit is kept so it becomes possible in the future + * to go to (significantly) larger packets if needed. This would entail a strategy such as employed for UTF-8. + * + * Packets up to 32 KiB have the high bit not set: + * 00000000 00000000 0bbbbbbb aaaaaaaa -> aaaaaaaa 0bbbbbbb + * Send_uint16(GB(size, 0, 15) + * + * Packets up to 1 GiB, first uint16 has high bit set so it knows to read a + * next uint16 for the remaining bits of the size. + * 00dddddd cccccccc bbbbbbbb aaaaaaaa -> cccccccc 10dddddd aaaaaaaa bbbbbbbb + * Send_uint16(GB(size, 16, 14) | 0b10 << 14) + * Send_uint16(GB(size, 0, 16)) + */ +static const uint16 TCP_MTU = 32767; ///< Number of bytes we can pack in a single TCP packet +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 = 4; ///< What version of game-info do we use? @@ -48,14 +64,14 @@ static const uint NETWORK_PASSWORD_LENGTH = 33; ///< The maxim static const uint NETWORK_CLIENTS_LENGTH = 200; ///< The maximum length for the list of clients that controls a company, in bytes including '\0' static const uint NETWORK_CLIENT_NAME_LENGTH = 25; ///< The maximum length of a client's name, in bytes including '\0' static const uint NETWORK_RCONCOMMAND_LENGTH = 500; ///< The maximum length of a rconsole command, in bytes including '\0' -static const uint NETWORK_GAMESCRIPT_JSON_LENGTH = SEND_MTU - 3; ///< The maximum length of a gamescript json string, in bytes including '\0'. Must not be longer than SEND_MTU including header (3 bytes) +static const uint NETWORK_GAMESCRIPT_JSON_LENGTH = COMPAT_MTU-3; ///< The maximum length of a gamescript json string, in bytes including '\0'. Must not be longer than COMPAT_MTU including header (3 bytes) static const uint NETWORK_CHAT_LENGTH = 900; ///< The maximum length of a chat message, in bytes including '\0' static const uint NETWORK_GRF_NAME_LENGTH = 80; ///< Maximum length of the name of a GRF /** * Maximum number of GRFs that can be sent. - * This limit is reached when PACKET_UDP_SERVER_RESPONSE reaches the maximum size of SEND_MTU bytes. + * This limit is reached when PACKET_UDP_SERVER_RESPONSE reaches the maximum size of UDP_MTU bytes. */ static const uint NETWORK_MAX_GRF_COUNT = 62; static const uint NETWORK_MAX_GRF_COUNT_SHORT = 59; diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index 76039fa79e..c5d149fe2f 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -21,6 +21,7 @@ /** * Create a packet that is used to read from a network socket. * @param cs The socket handler associated with the socket we are reading from. + * @param limit The maximum size of packets to accept. * @param initial_read_size The initial amount of data to transfer from the socket into the * packet. This defaults to just the required bytes to determine the * packet's size. That default is the wanted for streams such as TCP @@ -29,7 +30,7 @@ * loose some the data of the packet, so there you pass the maximum * size for the packet you expect from the network. */ -Packet::Packet(NetworkSocketHandler *cs, size_t initial_read_size) : pos(0) +Packet::Packet(NetworkSocketHandler *cs, size_t limit, size_t initial_read_size) : pos(0), limit(limit) { assert(cs != nullptr); @@ -39,9 +40,13 @@ Packet::Packet(NetworkSocketHandler *cs, size_t initial_read_size) : pos(0) /** * Creates a packet to send - * @param type of the packet to send + * @param type The type of the packet to send + * @param limit The maximum number of bytes the packet may have. Default is COMPAT_MTU. + * Be careful of compatibility with older clients/servers when changing + * the limit as it might break things if the other side is not expecting + * much larger packets than what they support. */ -Packet::Packet(PacketType type) : pos(0), cs(nullptr) +Packet::Packet(PacketType type, size_t limit) : pos(0), limit(limit), cs(nullptr) { this->ResetState(type); } @@ -77,7 +82,7 @@ void Packet::PrepareToSend() */ bool Packet::CanWriteToPacket(size_t bytes_to_write) { - return this->Size() + bytes_to_write < SHRT_MAX; + return this->Size() + bytes_to_write < this->limit; } /* @@ -181,7 +186,7 @@ void Packet::Send_string(const char *data) */ size_t Packet::Send_bytes(const byte *begin, const byte *end) { - size_t amount = std::min(end - begin, SHRT_MAX - this->Size()); + size_t amount = std::min(end - begin, this->limit - this->Size()); this->buffer.insert(this->buffer.end(), begin, begin + amount); return amount; } @@ -267,7 +272,7 @@ bool Packet::ParsePacketSize() /* If the size of the packet is less than the bytes required for the size and type of * the packet, or more than the allowed limit, then something is wrong with the packet. * In those cases the packet can generally be regarded as containing garbage data. */ - if (size < sizeof(PacketSize) + sizeof(PacketType)) return false; + if (size < sizeof(PacketSize) + sizeof(PacketType) || size > this->limit) return false; this->buffer.resize(size); this->pos = sizeof(PacketSize); diff --git a/src/network/core/packet.h b/src/network/core/packet.h index 58637fc043..feec04b0c5 100644 --- a/src/network/core/packet.h +++ b/src/network/core/packet.h @@ -26,10 +26,11 @@ typedef uint8 PacketType; ///< Identifier for the packet * Internal entity of a packet. As everything is sent as a packet, * all network communication will need to call the functions that * populate the packet. - * Every packet can be at most SEND_MTU bytes. Overflowing this - * limit will give an assertion when sending (i.e. writing) the - * packet. Reading past the size of the packet when receiving - * will return all 0 values and "" in case of the string. + * Every packet can be at most a limited number bytes set in the + * constructor. Overflowing this limit will give an assertion when + * sending (i.e. writing) the packet. Reading past the size of the + * packet when receiving will return all 0 values and "" in case of + * the string. * * --- Points of attention --- * - all > 1 byte integral values are written in little endian, @@ -46,13 +47,15 @@ private: PacketSize pos; /** The buffer of this packet. */ std::vector buffer; + /** The limit for the packet size. */ + size_t limit; /** Socket we're associated with. */ NetworkSocketHandler *cs; public: - Packet(NetworkSocketHandler *cs, size_t initial_read_size = sizeof(PacketSize)); - Packet(PacketType type); + Packet(NetworkSocketHandler *cs, size_t limit, size_t initial_read_size = sizeof(PacketSize)); + Packet(PacketType type, size_t limit = COMPAT_MTU); void ResetState(PacketType type); diff --git a/src/network/core/tcp.cpp b/src/network/core/tcp.cpp index 379900c287..0d6a5fa020 100644 --- a/src/network/core/tcp.cpp +++ b/src/network/core/tcp.cpp @@ -61,6 +61,21 @@ void NetworkTCPSocketHandler::SendPacket(std::unique_ptr packet) this->packet_queue.push_back(std::move(packet)); } +/** + * This function puts the packet in the send-queue and it is send as + * soon as possible. This is the next tick, or maybe one tick later + * if the OS-network-buffer is full) + * @param packet the packet to send + */ +void NetworkTCPSocketHandler::SendPrependPacket(std::unique_ptr packet) +{ + assert(packet != nullptr); + + packet->PrepareToSend(); + + this->packet_queue.push_front(std::move(packet)); +} + /** * Sends all the buffered packets out for this client. It stops when: * 1) all packets are send (queue is empty) @@ -123,7 +138,7 @@ std::unique_ptr NetworkTCPSocketHandler::ReceivePacket() if (!this->IsConnected()) return nullptr; if (this->packet_recv == nullptr) { - this->packet_recv.reset(new Packet(this)); + this->packet_recv.reset(new Packet(this, SHRT_MAX)); } Packet *p = this->packet_recv.get(); diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h index 12332ff082..681e6a9d1d 100644 --- a/src/network/core/tcp.h +++ b/src/network/core/tcp.h @@ -43,7 +43,8 @@ public: bool IsConnected() const { return this->sock != INVALID_SOCKET; } NetworkRecvStatus CloseConnection(bool error = true) override; - virtual void SendPacket(std::unique_ptr packet); + void SendPacket(std::unique_ptr packet); + void SendPrependPacket(std::unique_ptr packet); void SendPacket(Packet *packet) { diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 875de1ee3c..1cd7ff273d 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -86,7 +86,7 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a { if (this->sockets.size() == 0) this->Listen(); - const uint MTU = short_mtu ? SEND_MTU_SHORT : SEND_MTU; + const uint MTU = short_mtu ? UDP_MTU_SHORT : UDP_MTU; if (p->Size() > MTU) { p->PrepareToSend(); @@ -155,7 +155,8 @@ void NetworkUDPSocketHandler::ReceivePackets() struct sockaddr_storage client_addr; memset(&client_addr, 0, sizeof(client_addr)); - Packet p(this, SEND_MTU); + /* The limit is UDP_MTU, but also allocate that much as we need to read the whole packet in one go. */ + Packet p(this, UDP_MTU, UDP_MTU); socklen_t client_len = sizeof(client_addr); /* Try to receive anything */ @@ -506,7 +507,7 @@ void NetworkUDPSocketHandler::Receive_EX_MULTI(Packet *p, NetworkAddress *client DEBUG(net, 6, "[udp] merged multi-part packet from %s: " OTTD_PRINTFHEX64 ", %u bytes", NetworkAddressDumper().GetAddressAsString(client_addr), token, total_payload); - Packet merged(this, 0); + Packet merged(this, SHRT_MAX, 0); merged.ReserveBuffer(total_payload); for (auto &frag : fs.fragments) { merged.Send_binary(frag.data(), frag.size()); diff --git a/src/network/network.cpp b/src/network/network.cpp index 1e71e39c49..7890058835 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -548,9 +548,10 @@ void ParseGameConnectionString(const char **company, const char **port, char *co /* Register the login */ _network_clients_connected++; - SetWindowDirty(WC_CLIENT_LIST, 0); ServerNetworkGameSocketHandler *cs = new ServerNetworkGameSocketHandler(s); cs->client_address = address; // Save the IP of the client + + InvalidateWindowData(WC_CLIENT_LIST, 0); } /** @@ -743,7 +744,7 @@ void NetworkClientConnectGame(NetworkAddress address, CompanyID join_as, const c static void NetworkInitGameInfo() { if (StrEmpty(_settings_client.network.server_name)) { - seprintf(_settings_client.network.server_name, lastof(_settings_client.network.server_name), "Unnamed Server"); + strecpy(_settings_client.network.server_name, "Unnamed Server", lastof(_settings_client.network.server_name)); } /* The server is a client too */ diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index 1646adb2ea..3d015b81c2 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -560,8 +560,8 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendConsole(const char *origi /* If the length of both strings, plus the 2 '\0' terminations and 3 bytes of the packet * are bigger than the MTU, just ignore the message. Better safe than sorry. It should * never occur though as the longest strings are chat messages, which are still 30% - * smaller than SEND_MTU. */ - if (strlen(origin) + strlen(string) + 2 + 3 >= SEND_MTU) return NETWORK_RECV_STATUS_OKAY; + * smaller than COMPAT_MTU. */ + if (strlen(origin) + strlen(string) + 2 + 3 >= COMPAT_MTU) return NETWORK_RECV_STATUS_OKAY; Packet *p = new Packet(ADMIN_PACKET_SERVER_CONSOLE); @@ -610,7 +610,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCmdNames() for (uint i = 0; i < CMD_END; i++) { const char *cmdname = GetCommandName(i); - /* Should SEND_MTU be exceeded, start a new packet + /* Should COMPAT_MTU be exceeded, start a new packet * (magic 5: 1 bool "more data" and one uint16 "command id", one * byte for string '\0' termination and 1 bool "no more data" */ if (p->CanWriteToPacket(strlen(cmdname) + 5)) { diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 1f6cee6eda..fe237e0f77 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -411,7 +411,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyInformationQuery() _network_join_status = NETWORK_JOIN_STATUS_GETTING_COMPANY_INFO; SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); - Packet *p = new Packet(PACKET_CLIENT_COMPANY_INFO); + Packet *p = new Packet(PACKET_CLIENT_COMPANY_INFO, SHRT_MAX); my_client->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; } @@ -423,7 +423,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin() _network_join_status = NETWORK_JOIN_STATUS_AUTHORIZING; SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); - Packet *p = new Packet(PACKET_CLIENT_JOIN); + Packet *p = new Packet(PACKET_CLIENT_JOIN, SHRT_MAX); p->Send_string(_openttd_revision); p->Send_uint32(_openttd_newgrf_version); p->Send_string(_settings_client.network.client_name); // Client name @@ -436,7 +436,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin() /** Tell the server we got all the NewGRFs. */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendNewGRFsOk() { - Packet *p = new Packet(PACKET_CLIENT_NEWGRFS_CHECKED); + Packet *p = new Packet(PACKET_CLIENT_NEWGRFS_CHECKED, SHRT_MAX); my_client->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; } @@ -447,7 +447,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendNewGRFsOk() */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGamePassword(const char *password) { - Packet *p = new Packet(PACKET_CLIENT_GAME_PASSWORD); + Packet *p = new Packet(PACKET_CLIENT_GAME_PASSWORD, SHRT_MAX); p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _server_password_game_seed)); my_client->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; @@ -459,7 +459,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGamePassword(const char *p */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const char *password) { - Packet *p = new Packet(PACKET_CLIENT_COMPANY_PASSWORD); + Packet *p = new Packet(PACKET_CLIENT_COMPANY_PASSWORD, SHRT_MAX); p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _company_password_game_seed)); my_client->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; @@ -471,7 +471,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const char */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSettingsPassword(const char *password) { - Packet *p = new Packet(PACKET_CLIENT_SETTINGS_PASSWORD); + Packet *p = new Packet(PACKET_CLIENT_SETTINGS_PASSWORD, SHRT_MAX); if (StrEmpty(password)) { p->Send_string(""); } else { @@ -486,7 +486,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGetMap() { my_client->status = STATUS_MAP_WAIT; - Packet *p = new Packet(PACKET_CLIENT_GETMAP); + Packet *p = new Packet(PACKET_CLIENT_GETMAP, SHRT_MAX); #if defined(WITH_ZSTD) p->Send_bool(true); #else @@ -501,7 +501,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendMapOk() { my_client->status = STATUS_ACTIVE; - Packet *p = new Packet(PACKET_CLIENT_MAP_OK); + Packet *p = new Packet(PACKET_CLIENT_MAP_OK, SHRT_MAX); my_client->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; } @@ -509,7 +509,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendMapOk() /** Send an acknowledgement from the server's ticks. */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendAck() { - Packet *p = new Packet(PACKET_CLIENT_ACK); + Packet *p = new Packet(PACKET_CLIENT_ACK, SHRT_MAX); p->Send_uint32(_frame_counter); p->Send_uint8 (my_client->token); @@ -523,7 +523,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendAck() */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCommand(const CommandPacket *cp) { - Packet *p = new Packet(PACKET_CLIENT_COMMAND); + Packet *p = new Packet(PACKET_CLIENT_COMMAND, SHRT_MAX); my_client->NetworkGameSocketHandler::SendCommand(p, cp); my_client->SendPacket(p); @@ -534,7 +534,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCommand(const CommandPacke NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action, DestType type, int dest, const char *msg, NetworkTextMessageData data) { if (!my_client) return NETWORK_RECV_STATUS_CONN_LOST; - Packet *p = new Packet(PACKET_CLIENT_CHAT); + Packet *p = new Packet(PACKET_CLIENT_CHAT, SHRT_MAX); p->Send_uint8 (action); p->Send_uint8 (type); @@ -549,7 +549,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action, /** Send an error-packet over the network */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendError(NetworkErrorCode errorno) { - Packet *p = new Packet(PACKET_CLIENT_ERROR); + Packet *p = new Packet(PACKET_CLIENT_ERROR, SHRT_MAX); p->Send_uint8(errorno); my_client->SendPacket(p); @@ -560,7 +560,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendError(NetworkErrorCode err NetworkRecvStatus ClientNetworkGameSocketHandler::SendDesyncLog(const std::string &log) { for (size_t offset = 0; offset < log.size();) { - Packet *p = new Packet(PACKET_CLIENT_DESYNC_LOG); + Packet *p = new Packet(PACKET_CLIENT_DESYNC_LOG, SHRT_MAX); size_t size = std::min(log.size() - offset, SHRT_MAX - 2 - p->Size()); p->Send_uint16(size); p->Send_binary(log.data() + offset, size); @@ -574,7 +574,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendDesyncLog(const std::strin /** Send an error-packet over the network */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendDesyncMessage(const char *msg) { - Packet *p = new Packet(PACKET_CLIENT_DESYNC_MSG); + Packet *p = new Packet(PACKET_CLIENT_DESYNC_MSG, SHRT_MAX); p->Send_uint32(_date); p->Send_uint16(_date_fract); p->Send_uint8(_tick_skip_counter); @@ -589,7 +589,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendDesyncMessage(const char * */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetPassword(const char *password) { - Packet *p = new Packet(PACKET_CLIENT_SET_PASSWORD); + Packet *p = new Packet(PACKET_CLIENT_SET_PASSWORD, SHRT_MAX); p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _company_password_game_seed)); my_client->SendPacket(p); @@ -602,7 +602,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetPassword(const char *pa */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetName(const char *name) { - Packet *p = new Packet(PACKET_CLIENT_SET_NAME); + Packet *p = new Packet(PACKET_CLIENT_SET_NAME, SHRT_MAX); p->Send_string(name); my_client->SendPacket(p); @@ -614,7 +614,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetName(const char *name) */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendQuit() { - Packet *p = new Packet(PACKET_CLIENT_QUIT); + Packet *p = new Packet(PACKET_CLIENT_QUIT, SHRT_MAX); my_client->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; @@ -627,7 +627,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendQuit() */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendRCon(const char *pass, const char *command) { - Packet *p = new Packet(PACKET_CLIENT_RCON); + Packet *p = new Packet(PACKET_CLIENT_RCON, SHRT_MAX); p->Send_string(GenerateCompanyPasswordHash(pass, _password_server_id, _rcon_password_game_seed)); p->Send_string(command); my_client->SendPacket(p); @@ -641,7 +641,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendRCon(const char *pass, con */ NetworkRecvStatus ClientNetworkGameSocketHandler::SendMove(CompanyID company, const char *password) { - Packet *p = new Packet(PACKET_CLIENT_MOVE); + Packet *p = new Packet(PACKET_CLIENT_MOVE, SHRT_MAX); p->Send_uint8(company); p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _company_password_game_seed)); my_client->SendPacket(p); @@ -760,7 +760,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac ci->client_playas = playas; strecpy(ci->client_name, name, lastof(ci->client_name)); - SetWindowDirty(WC_CLIENT_LIST, 0); + InvalidateWindowData(WC_CLIENT_LIST, 0); return NETWORK_RECV_STATUS_OKAY; } @@ -779,7 +779,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac strecpy(ci->client_name, name, lastof(ci->client_name)); - SetWindowDirty(WC_CLIENT_LIST, 0); + InvalidateWindowData(WC_CLIENT_LIST, 0); return NETWORK_RECV_STATUS_OKAY; } @@ -1176,7 +1176,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR_QUIT(Pack delete ci; } - SetWindowDirty(WC_CLIENT_LIST, 0); + InvalidateWindowData(WC_CLIENT_LIST, 0); return NETWORK_RECV_STATUS_OKAY; } @@ -1204,7 +1204,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_QUIT(Packet *p) DEBUG(net, 0, "Unknown client (%d) is leaving the game", client_id); } - SetWindowDirty(WC_CLIENT_LIST, 0); + InvalidateWindowData(WC_CLIENT_LIST, 0); /* If we come here it means we could not locate the client.. strange :s */ return NETWORK_RECV_STATUS_OKAY; @@ -1221,7 +1221,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_JOIN(Packet *p) NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, ci->client_name); } - SetWindowDirty(WC_CLIENT_LIST, 0); + InvalidateWindowData(WC_CLIENT_LIST, 0); return NETWORK_RECV_STATUS_OKAY; } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index fc52caad28..9e921c5d05 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -221,9 +221,9 @@ void ClientNetworkContentSocketHandler::RequestContentList(uint count, const Con * A packet begins with the packet size and a byte for the type. * Then this packet adds a uint16 for the count in this packet. * The rest of the packet can be used for the IDs. */ - uint p_count = std::min(count, (SEND_MTU_SHORT - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16)) / sizeof(uint32)); + uint p_count = std::min(count, (TCP_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16)) / sizeof(uint32)); - Packet *p = new Packet(PACKET_CONTENT_CLIENT_INFO_ID); + Packet *p = new Packet(PACKET_CONTENT_CLIENT_INFO_ID, TCP_MTU); p->Send_uint16(p_count); for (uint i = 0; i < p_count; i++) { @@ -247,13 +247,13 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo this->Connect(); - const uint max_per_packet = std::min(255, (SEND_MTU_SHORT - sizeof(PacketSize) - sizeof(byte) - sizeof(uint8)) / + const uint max_per_packet = std::min(255, (TCP_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint8)) / (sizeof(uint8) + sizeof(uint32) + (send_md5sum ? /*sizeof(ContentInfo::md5sum)*/16 : 0))) - 1; uint offset = 0; while (cv->size() > offset) { - Packet *p = new Packet(send_md5sum ? PACKET_CONTENT_CLIENT_INFO_EXTID_MD5 : PACKET_CONTENT_CLIENT_INFO_EXTID); + Packet *p = new Packet(send_md5sum ? PACKET_CONTENT_CLIENT_INFO_EXTID_MD5 : PACKET_CONTENT_CLIENT_INFO_EXTID, TCP_MTU); const uint to_send = std::min(cv->size() - offset, max_per_packet); p->Send_uint8(to_send); @@ -370,9 +370,9 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback(const Co * A packet begins with the packet size and a byte for the type. * Then this packet adds a uint16 for the count in this packet. * The rest of the packet can be used for the IDs. */ - uint p_count = std::min(count, (SEND_MTU_SHORT - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16)) / sizeof(uint32)); + uint p_count = std::min(count, (TCP_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint16)) / sizeof(uint32)); - Packet *p = new Packet(PACKET_CONTENT_CLIENT_CONTENT); + Packet *p = new Packet(PACKET_CONTENT_CLIENT_CONTENT, TCP_MTU); p->Send_uint16(p_count); for (uint i = 0; i < p_count; i++) { diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 6afe58b3f5..e71cec0f81 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -17,14 +17,17 @@ #include "network.h" #include "network_base.h" #include "network_content.h" +#include "network_server.h" #include "../gui.h" #include "network_udp.h" #include "../window_func.h" #include "../gfx_func.h" +#include "../widgets/dropdown_type.h" #include "../widgets/dropdown_func.h" #include "../querystring_gui.h" #include "../sortlist_type.h" #include "../company_func.h" +#include "../command_func.h" #include "../core/geometry_func.hpp" #include "../genworld.h" #include "../map_type.h" @@ -32,6 +35,8 @@ #include "../error.h" #include "../guitimer_func.h" #include "../zoom_func.h" +#include "../sprite.h" +#include "../settings_internal.h" #include "../widgets/network_widget.h" @@ -40,21 +45,27 @@ #include "../stringfilter_type.h" -#include "../safeguards.h" - #ifdef __EMSCRIPTEN__ # include #endif +#include + +#include "../safeguards.h" + static void ShowNetworkStartServerWindow(); static void ShowNetworkLobbyWindow(NetworkGameList *ngl); +static ClientID _admin_client_id = INVALID_CLIENT_ID; ///< For what client a confirmation window is open. +static CompanyID _admin_company_id = INVALID_COMPANY; ///< For what company a confirmation window is open. + /** - * Advertisement options in the start server window + * Visibility of the server. Public servers advertise, where private servers + * do not. */ -static const StringID _connection_types_dropdown[] = { - STR_NETWORK_START_SERVER_UNADVERTISED, - STR_NETWORK_START_SERVER_ADVERTISED, +static const StringID _server_visibility_dropdown[] = { + STR_NETWORK_SERVER_VISIBILITY_PRIVATE, + STR_NETWORK_SERVER_VISIBILITY_PUBLIC, INVALID_STRING_ID }; @@ -1000,7 +1011,7 @@ struct NetworkStartServerWindow : public Window { { switch (widget) { case WID_NSS_CONNTYPE_BTN: - SetDParam(0, _connection_types_dropdown[_settings_client.network.server_advertise]); + SetDParam(0, _server_visibility_dropdown[_settings_client.network.server_advertise]); break; case WID_NSS_CLIENTS_TXT: @@ -1021,7 +1032,7 @@ struct NetworkStartServerWindow : public Window { { switch (widget) { case WID_NSS_CONNTYPE_BTN: - *size = maxdim(GetStringBoundingBox(_connection_types_dropdown[0]), GetStringBoundingBox(_connection_types_dropdown[1])); + *size = maxdim(GetStringBoundingBox(_server_visibility_dropdown[0]), GetStringBoundingBox(_server_visibility_dropdown[1])); size->width += padding.width; size->height += padding.height; break; @@ -1051,7 +1062,7 @@ struct NetworkStartServerWindow : public Window { break; case WID_NSS_CONNTYPE_BTN: // Connection type - ShowDropDownMenu(this, _connection_types_dropdown, _settings_client.network.server_advertise, WID_NSS_CONNTYPE_BTN, 0, 0); // do it for widget WID_NSS_CONNTYPE_BTN + ShowDropDownMenu(this, _server_visibility_dropdown, _settings_client.network.server_advertise, WID_NSS_CONNTYPE_BTN, 0, 0); // do it for widget WID_NSS_CONNTYPE_BTN break; case WID_NSS_CLIENTS_BTND: case WID_NSS_CLIENTS_BTNU: // Click on up/down button for number of clients @@ -1190,8 +1201,8 @@ static const NWidgetPart _nested_network_start_server_window_widgets[] = { NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(10, 6, 10), NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), - NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_ADVERTISED_LABEL, STR_NULL), - NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP), + NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_LABEL), SetFill(1, 0), SetDataTip(STR_NETWORK_START_SERVER_VISIBILITY_LABEL, STR_NULL), + NWidget(WWT_DROPDOWN, COLOUR_LIGHT_BLUE, WID_NSS_CONNTYPE_BTN), SetFill(1, 0), SetDataTip(STR_BLACK_STRING, STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP), EndContainer(), NWidget(NWID_VERTICAL), SetPIP(0, 1, 0), NWidget(NWID_SPACER), SetFill(1, 1), @@ -1579,333 +1590,807 @@ NetworkCompanyInfo *GetLobbyCompanyInfo(CompanyID company) extern void DrawCompanyIcon(CompanyID cid, int x, int y); -/** - * Prototype for ClientList actions. - * @param ci The information about the current client. - */ -typedef void ClientList_Action_Proc(const NetworkClientInfo *ci); - -static const NWidgetPart _nested_client_list_popup_widgets[] = { - NWidget(WWT_PANEL, COLOUR_GREY, WID_CLP_PANEL), EndContainer(), -}; - -static WindowDesc _client_list_popup_desc( - WDP_AUTO, nullptr, 0, 0, - WC_CLIENT_LIST_POPUP, WC_CLIENT_LIST, - 0, - _nested_client_list_popup_widgets, lengthof(_nested_client_list_popup_widgets) -); - -/* Here we start to define the options out of the menu */ -static void ClientList_Kick(const NetworkClientInfo *ci) -{ - NetworkServerKickClient(ci->client_id, nullptr); -} - -static void ClientList_Ban(const NetworkClientInfo *ci) -{ - NetworkServerKickOrBanIP(ci->client_id, true, nullptr); -} - -static void ClientList_SpeakToClient(const NetworkClientInfo *ci) -{ - ShowNetworkChatQueryWindow(DESTTYPE_CLIENT, ci->client_id); -} - -static void ClientList_SpeakToCompany(const NetworkClientInfo *ci) -{ - ShowNetworkChatQueryWindow(DESTTYPE_TEAM, ci->client_playas); -} - -static void ClientList_SpeakToAll(const NetworkClientInfo *ci) -{ - ShowNetworkChatQueryWindow(DESTTYPE_BROADCAST, 0); -} - -/** Popup selection window to chose an action to perform */ -struct NetworkClientListPopupWindow : Window { - /** Container for actions that can be executed. */ - struct ClientListAction { - StringID name; ///< Name of the action to execute - ClientList_Action_Proc *proc; ///< Action to execute - }; - - uint sel_index; - ClientID client_id; - Point desired_location; - std::vector actions; ///< Actions to execute - - /** - * Add an action to the list of actions to execute. - * @param name the name of the action - * @param proc the procedure to execute for the action - */ - inline void AddAction(StringID name, ClientList_Action_Proc *proc) - { - this->actions.push_back({name, proc}); - } - - NetworkClientListPopupWindow(WindowDesc *desc, int x, int y, ClientID client_id) : - Window(desc), - sel_index(0), client_id(client_id) - { - this->desired_location.x = x; - this->desired_location.y = y; - - const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); - - if (_network_own_client_id != ci->client_id) { - this->AddAction(STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT, &ClientList_SpeakToClient); - } - - if (Company::IsValidID(ci->client_playas) || ci->client_playas == COMPANY_SPECTATOR) { - this->AddAction(STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY, &ClientList_SpeakToCompany); - } - this->AddAction(STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL, &ClientList_SpeakToAll); - - /* A server can kick clients (but not himself). */ - if (_network_server && _network_own_client_id != ci->client_id) { - this->AddAction(STR_NETWORK_CLIENTLIST_KICK, &ClientList_Kick); - this->AddAction(STR_NETWORK_CLIENTLIST_BAN, &ClientList_Ban); - } - - this->InitNested(client_id); - CLRBITS(this->flags, WF_WHITE_BORDER); - } - - Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override - { - return this->desired_location; - } - - void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override - { - Dimension d = *size; - for (const ClientListAction &action : this->actions) { - d = maxdim(GetStringBoundingBox(action.name), d); - } - - d.height *= (uint)this->actions.size(); - d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; - d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; - *size = d; - } - - void DrawWidget(const Rect &r, int widget) const override - { - /* Draw the actions */ - int sel = this->sel_index; - int y = r.top + WD_FRAMERECT_TOP; - for (const ClientListAction &action : this->actions) { - TextColour colour; - if (sel-- == 0) { // Selected item, highlight it - GfxFillRect(r.left + 1, y, r.right - 1, y + FONT_HEIGHT_NORMAL - 1, PC_BLACK); - colour = TC_WHITE; - } else { - colour = TC_BLACK; - } - - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, action.name, colour); - y += FONT_HEIGHT_NORMAL; - } - } - - void OnMouseLoop() override - { - /* We selected an action */ - uint index = (_cursor.pos.y - this->top - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL; - - if (_left_button_down) { - if (index == this->sel_index || index >= this->actions.size()) return; - - this->sel_index = index; - this->SetDirty(); - } else { - if (index < this->actions.size() && _cursor.pos.y >= this->top) { - const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(this->client_id); - if (ci != nullptr) this->actions[index].proc(ci); - } - - DeleteWindowByClass(WC_CLIENT_LIST_POPUP); - } - } -}; - -/** - * Show the popup (action list) - */ -static void PopupClientList(ClientID client_id, int x, int y) -{ - DeleteWindowByClass(WC_CLIENT_LIST_POPUP); - - if (NetworkClientInfo::GetByClientID(client_id) == nullptr) return; - - new NetworkClientListPopupWindow(&_client_list_popup_desc, x, y, client_id); -} - static const NWidgetPart _nested_client_list_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_CL_PANEL), SetMinimalSize(250, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM), SetResize(1, 1), 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(20, 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_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(20, 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(), + EndContainer(), + EndContainer(), + NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_NETWORK_CLIENT_LIST_PLAYER, STR_NULL), SetPadding(4, 4, 4, 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_PLAYER_NAME, STR_NULL), + NWidget(NWID_SPACER), SetMinimalSize(20, 0), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_NAME), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetDataTip(STR_BLACK_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP), SetAlignment(SA_VERT_CENTER | SA_RIGHT), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_CL_CLIENT_NAME_EDIT), SetMinimalSize(12, 14), SetDataTip(SPR_RENAME, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP), + EndContainer(), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_MATRIX, COLOUR_GREY, WID_CL_MATRIX), SetMinimalSize(180, 0), SetResize(1, 1), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_CL_SCROLLBAR), + NWidget(NWID_VERTICAL), + NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_CL_SCROLLBAR), + NWidget(WWT_RESIZEBOX, COLOUR_GREY), + EndContainer(), + EndContainer(), + EndContainer(), }; static WindowDesc _client_list_desc( - WDP_AUTO, "list_clients", 0, 0, + WDP_AUTO, "list_clients", 220, 300, WC_CLIENT_LIST, WC_NONE, 0, _nested_client_list_widgets, lengthof(_nested_client_list_widgets) ); +/** + * The possibly entries in a DropDown for an admin. + * Client and companies are mixed; they just have to be unique. + */ +enum DropDownAdmin { + DD_CLIENT_ADMIN_KICK, + DD_CLIENT_ADMIN_BAN, + DD_COMPANY_ADMIN_RESET, + DD_COMPANY_ADMIN_UNLOCK, +}; + +/** + * Callback function for admin command to kick client. + * @param w The window which initiated the confirmation dialog. + * @param confirmed Iff the user pressed Yes. + */ +static void AdminClientKickCallback(Window *w, bool confirmed) +{ + if (confirmed) NetworkServerKickClient(_admin_client_id, nullptr); +} + +/** + * Callback function for admin command to ban client. + * @param w The window which initiated the confirmation dialog. + * @param confirmed Iff the user pressed Yes. + */ +static void AdminClientBanCallback(Window *w, bool confirmed) +{ + if (confirmed) NetworkServerKickOrBanIP(_admin_client_id, true, nullptr); +} + +/** + * Callback function for admin command to reset company. + * @param w The window which initiated the confirmation dialog. + * @param confirmed Iff the user pressed Yes. + */ +static void AdminCompanyResetCallback(Window *w, bool confirmed) +{ + if (confirmed) { + if (NetworkCompanyHasClients(_admin_company_id)) return; + DoCommandP(0, CCA_DELETE | _admin_company_id << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL); + } +} + +/** + * Callback function for admin command to unlock company. + * @param w The window which initiated the confirmation dialog. + * @param confirmed Iff the user pressed Yes. + */ +static void AdminCompanyUnlockCallback(Window *w, bool confirmed) +{ + if (confirmed) NetworkServerSetCompanyPassword(_admin_company_id, "", false); +} + +/** + * Button shown for either a company or client in the client-list. + * + * These buttons are dynamic and strongly depends on which company/client + * what buttons are available. This class allows dynamically creating them + * as the current Widget system does not. + */ +class ButtonCommon { +public: + SpriteID sprite; ///< The sprite to use on the button. + StringID tooltip; ///< The tooltip of the button. + Colours colour; ///< The colour of the button. + bool disabled; ///< Is the button disabled? + uint height; ///< Calculated height of the button. + uint width; ///< Calculated width of the button. + + ButtonCommon(SpriteID sprite, StringID tooltip, Colours colour, bool disabled = false) : + sprite(sprite), + tooltip(tooltip), + colour(colour), + disabled(disabled) + { + Dimension d = GetSpriteSize(sprite); + this->height = d.height + ScaleGUITrad(WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM); + this->width = d.width + ScaleGUITrad(WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT); + } + virtual ~ButtonCommon() {} + + /** + * OnClick handler for when the button is pressed. + */ + virtual void OnClick(struct NetworkClientListWindow *w, Point pt) = 0; +}; + +/** + * Template version of Button, with callback support. + */ +template +class Button : public ButtonCommon { +private: + typedef void (*ButtonCallback)(struct NetworkClientListWindow *w, Point pt, T id); ///< Callback function to call on click. + T id; ///< ID this button belongs to. + ButtonCallback proc; ///< Callback proc to call when button is pressed. + +public: + Button(SpriteID sprite, StringID tooltip, Colours colour, T id, ButtonCallback proc, bool disabled = false) : + ButtonCommon(sprite, tooltip, colour, disabled), + id(id), + proc(proc) + { + assert(proc != nullptr); + } + + void OnClick(struct NetworkClientListWindow *w, Point pt) override + { + if (this->disabled) return; + + this->proc(w, pt, this->id); + } +}; + +using CompanyButton = Button; +using ClientButton = Button; + /** * Main handle for clientlist */ struct NetworkClientListWindow : Window { - int selected_item; +private: + ClientListWidgets query_widget; ///< During a query this tracks what widget caused the query. + CompanyID join_company; ///< During query for company password, this stores what company we wanted to join. - uint server_client_width; - uint line_height; + ClientID dd_client_id; ///< During admin dropdown, track which client this was for. + CompanyID dd_company_id; ///< During admin dropdown, track which company this was for. - Dimension icon_size; + Scrollbar *vscroll; ///< Vertical scrollbar of this window. + uint line_height; ///< Current lineheight of each entry in the matrix. + uint line_count; ///< Amount of lines in the matrix. + int hover_index; ///< Index of the current line we are hovering over, or -1 if none. + int player_self_index; ///< The line the current player is on. + int player_host_index; ///< The line the host is on. - NetworkClientListWindow(WindowDesc *desc, WindowNumber window_number) : - Window(desc), - selected_item(-1) + std::map>> buttons; ///< Per line which buttons are available. + + static const int CLIENT_OFFSET_LEFT = 12; ///< Offset of client entries compared to company entries. + + /** + * Chat button on a Company is clicked. + * @param w The instance of this window. + * @param pt The point where this button was clicked. + * @param company_id The company this button was assigned to. + */ + static void OnClickCompanyChat(NetworkClientListWindow *w, Point pt, CompanyID company_id) { - this->InitNested(window_number); + ShowNetworkChatQueryWindow(DESTTYPE_TEAM, company_id); } /** - * Finds the amount of clients and set the height correct + * Join button on a Company is clicked. + * @param w The instance of this window. + * @param pt The point where this button was clicked. + * @param company_id The company this button was assigned to. */ - bool CheckClientListHeight() + static void OnClickCompanyJoin(NetworkClientListWindow *w, Point pt, CompanyID company_id) { - int num = 0; + if (_network_server) { + NetworkServerDoMove(CLIENT_ID_SERVER, company_id); + MarkWholeScreenDirty(); + } else if (NetworkCompanyIsPassworded(company_id)) { + w->query_widget = WID_CL_COMPANY_JOIN; + w->join_company = company_id; + ShowQueryString(STR_EMPTY, STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION, NETWORK_PASSWORD_LENGTH, w, CS_ALPHANUMERAL, QSF_PASSWORD); + } else { + NetworkClientRequestMove(company_id); + } + } - /* Should be replaced with a loop through all clients */ + /** + * Crete new company button is clicked. + * @param w The instance of this window. + * @param pt The point where this button was clicked. + * @param company_id The company this button was assigned to. + */ + static void OnClickCompanyNew(NetworkClientListWindow *w, Point pt, CompanyID company_id) + { + if (_network_server) { + DoCommandP(0, CCA_NEW, _network_own_client_id, CMD_COMPANY_CTRL); + } else { + NetworkSendCommand(0, CCA_NEW, 0, 0, CMD_COMPANY_CTRL, nullptr, nullptr, _local_company, 0); + } + } + + /** + * Admin button on a Client is clicked. + * @param w The instance of this window. + * @param pt The point where this button was clicked. + * @param client_id The client this button was assigned to. + */ + static void OnClickClientAdmin(NetworkClientListWindow *w, Point pt, ClientID client_id) + { + DropDownList list; + list.emplace_back(new DropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK, DD_CLIENT_ADMIN_KICK, false)); + list.emplace_back(new DropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN, DD_CLIENT_ADMIN_BAN, false)); + + Rect wi_rect; + wi_rect.left = pt.x; + wi_rect.right = pt.x; + wi_rect.top = pt.y; + wi_rect.bottom = pt.y; + + w->dd_client_id = client_id; + ShowDropDownListAt(w, std::move(list), -1, WID_CL_MATRIX, wi_rect, COLOUR_GREY, true, true); + } + + /** + * Admin button on a Company is clicked. + * @param w The instance of this window. + * @param pt The point where this button was clicked. + * @param company_id The company this button was assigned to. + */ + static void OnClickCompanyAdmin(NetworkClientListWindow *w, Point pt, CompanyID company_id) + { + DropDownList list; + list.emplace_back(new DropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET, DD_COMPANY_ADMIN_RESET, NetworkCompanyHasClients(company_id))); + list.emplace_back(new DropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK, DD_COMPANY_ADMIN_UNLOCK, !NetworkCompanyIsPassworded(company_id))); + + Rect wi_rect; + wi_rect.left = pt.x; + wi_rect.right = pt.x; + wi_rect.top = pt.y; + wi_rect.bottom = pt.y; + + w->dd_company_id = company_id; + ShowDropDownListAt(w, std::move(list), -1, WID_CL_MATRIX, wi_rect, COLOUR_GREY, true, true); + } + /** + * Chat button on a Client is clicked. + * @param w The instance of this window. + * @param pt The point where this button was clicked. + * @param client_id The client this button was assigned to. + */ + static void OnClickClientChat(NetworkClientListWindow *w, Point pt, ClientID client_id) + { + ShowNetworkChatQueryWindow(DESTTYPE_CLIENT, client_id); + } + + /** + * 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. + */ + void RebuildListCompany(CompanyID company_id, const NetworkClientInfo *own_ci) + { + 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)); + + this->line_count += 1; + + bool has_players = false; for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { - if (ci->client_playas != COMPANY_INACTIVE_CLIENT) num++; + if (ci->client_playas != company_id) continue; + has_players = true; + + if (_network_server) this->buttons[line_count].emplace_back(new ClientButton(SPR_ADMIN, STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP, COLOUR_RED, ci->client_id, &NetworkClientListWindow::OnClickClientAdmin, _network_own_client_id == ci->client_id)); + if (_network_own_client_id != ci->client_id) this->buttons[line_count].emplace_back(new ClientButton(SPR_CHAT, STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP, COLOUR_ORANGE, ci->client_id, &NetworkClientListWindow::OnClickClientChat)); + + if (ci->client_id == _network_own_client_id) { + this->player_self_index = this->line_count; + } else if (ci->client_id == CLIENT_ID_SERVER) { + this->player_host_index = this->line_count; + } + + this->line_count += 1; } - num *= this->line_height; + /* Disable the chat button when there are players in this company. */ + chat_button->disabled = !has_players; + } - int diff = (num + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM) - (this->GetWidget(WID_CL_PANEL)->current_y); - /* If height is changed */ - if (diff != 0) { - ResizeWindow(this, 0, diff, false); - return false; + /** + * Rebuild the list, meaning: calculate the lines needed and what buttons go on which line. + */ + void RebuildList() + { + const NetworkClientInfo *own_ci = NetworkClientInfo::GetByClientID(_network_own_client_id); + + this->buttons.clear(); + this->line_count = 0; + this->player_host_index = -1; + this->player_self_index = -1; + + /* As spectator, show a line to create a new company. */ + if (own_ci->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; } - return true; + + if (own_ci->client_playas != COMPANY_SPECTATOR) { + this->RebuildListCompany(own_ci->client_playas, own_ci); + } + + /* Companies */ + for (const Company *c : Company::Iterate()) { + if (c->index == own_ci->client_playas) continue; + + this->RebuildListCompany(c->index, own_ci); + } + + /* Spectators */ + this->RebuildListCompany(COMPANY_SPECTATOR, own_ci); + + this->vscroll->SetCount(this->line_count); + } + + /** + * Get the button at a specific point on the WID_CL_MATRIX. + * @param pt The point to look for a button. + * @return The button or a nullptr if there was none. + */ + ButtonCommon *GetButtonAtPoint(Point pt) + { + uint index = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_CL_MATRIX); + NWidgetBase *widget_matrix = this->GetWidget(WID_CL_MATRIX); + + bool rtl = _current_text_dir == TD_RTL; + uint x = rtl ? (uint)widget_matrix->pos_x + WD_FRAMERECT_LEFT : widget_matrix->current_x - WD_FRAMERECT_RIGHT; + + /* Find the buttons for this row. */ + auto button_find = this->buttons.find(index); + if (button_find == this->buttons.end()) return nullptr; + + /* Check if we want to display a tooltip for any of the buttons. */ + for (auto &button : button_find->second) { + uint left = rtl ? x : x - button->width; + uint right = rtl ? x + button->width : x; + + if (IsInsideMM(pt.x, left, right)) { + return button.get(); + } + + int width = button->width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; + x += rtl ? width : -width; + } + + return nullptr; + } + +public: + NetworkClientListWindow(WindowDesc *desc, WindowNumber window_number) : + Window(desc), + hover_index(-1), + player_self_index(-1), + player_host_index(-1) + { + this->CreateNestedTree(); + this->vscroll = this->GetScrollbar(WID_CL_SCROLLBAR); + this->OnInvalidateData(); + this->FinishInitNested(window_number); + } + + void OnInvalidateData(int data = 0, bool gui_scope = true) override + { + this->RebuildList(); + + /* 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); } void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { - if (widget != WID_CL_PANEL) return; + switch (widget) { + case WID_CL_SERVER_VISIBILITY: + *size = maxdim(GetStringBoundingBox(_server_visibility_dropdown[0]), GetStringBoundingBox(_server_visibility_dropdown[1])); + size->width += padding.width; + size->height += padding.height; + break; - this->server_client_width = std::max(GetStringBoundingBox(STR_NETWORK_SERVER).width, GetStringBoundingBox(STR_NETWORK_CLIENT).width) + WD_FRAMERECT_RIGHT; - this->icon_size = GetSpriteSize(SPR_COMPANY_ICON); - this->line_height = std::max(this->icon_size.height + 2U, (uint)FONT_HEIGHT_NORMAL); + case WID_CL_MATRIX: { + uint height = std::max({GetSpriteSize(SPR_COMPANY_ICON).height, GetSpriteSize(SPR_JOIN).height, GetSpriteSize(SPR_ADMIN).height, GetSpriteSize(SPR_CHAT).height}); + height += ScaleGUITrad(WD_FRAMERECT_TOP) + ScaleGUITrad(WD_FRAMERECT_BOTTOM); + this->line_height = std::max(height, (uint)FONT_HEIGHT_NORMAL) + ScaleGUITrad(WD_MATRIX_TOP + WD_MATRIX_BOTTOM); - uint width = 100; // Default width - for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { - width = std::max(width, GetStringBoundingBox(ci->client_name).width); + resize->width = 1; + resize->height = this->line_height; + fill->height = this->line_height; + size->height = std::max(size->height, 5 * this->line_height); + break; + } } - - size->width = WD_FRAMERECT_LEFT + this->server_client_width + this->icon_size.width + WD_FRAMERECT_LEFT + width + WD_FRAMERECT_RIGHT; } - void OnPaint() override + void OnResize() override { - /* Check if we need to reset the height */ - if (!this->CheckClientListHeight()) return; - - this->DrawWidgets(); + this->vscroll->SetCapacityFromWidget(this, WID_CL_MATRIX); } - void DrawWidget(const Rect &r, int widget) const override + void SetStringParameters(int widget) const override { - if (widget != WID_CL_PANEL) return; + switch (widget) { + case WID_CL_SERVER_NAME: + SetDParamStr(0, _settings_client.network.server_name); + break; - bool rtl = _current_text_dir == TD_RTL; - int icon_offset = (this->line_height - icon_size.height) / 2; - int text_offset = (this->line_height - FONT_HEIGHT_NORMAL) / 2; + case WID_CL_SERVER_VISIBILITY: + SetDParam(0, _server_visibility_dropdown[_settings_client.network.server_advertise]); + break; - uint y = r.top + WD_FRAMERECT_TOP; - uint left = r.left + WD_FRAMERECT_LEFT; - uint right = r.right - WD_FRAMERECT_RIGHT; - uint type_icon_width = this->server_client_width + this->icon_size.width + WD_FRAMERECT_LEFT; - - - uint type_left = rtl ? right - this->server_client_width : left; - uint type_right = rtl ? right : left + this->server_client_width - 1; - uint icon_left = rtl ? right - type_icon_width + WD_FRAMERECT_LEFT : left + this->server_client_width; - uint name_left = rtl ? left : left + type_icon_width; - uint name_right = rtl ? right - type_icon_width : right; - - int i = 0; - for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { - TextColour colour; - if (this->selected_item == i++) { // Selected item, highlight it - GfxFillRect(r.left + 1, y, r.right - 1, y + this->line_height - 1, PC_BLACK); - colour = TC_WHITE; - } else { - colour = TC_BLACK; - } - - if (ci->client_id == CLIENT_ID_SERVER) { - DrawString(type_left, type_right, y + text_offset, STR_NETWORK_SERVER, colour); - } else { - DrawString(type_left, type_right, y + text_offset, STR_NETWORK_CLIENT, colour); - } - - /* Filter out spectators */ - if (Company::IsValidID(ci->client_playas)) DrawCompanyIcon(ci->client_playas, icon_left, y + icon_offset); - - DrawString(name_left, name_right, y + text_offset, ci->client_name, colour); - - y += line_height; + case WID_CL_CLIENT_NAME: + SetDParamStr(0, _settings_client.network.client_name); + break; } } void OnClick(Point pt, int widget, int click_count) override { - /* Show the popup with option */ - if (this->selected_item != -1) { - int client_no = this->selected_item; - for (NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { - if (client_no == 0) { - PopupClientList(ci->client_id, pt.x + this->left, pt.y + this->top); - break; - } - client_no--; + switch (widget) { + case WID_CL_SERVER_NAME_EDIT: + if (!_network_server) break; + + this->query_widget = WID_CL_SERVER_NAME_EDIT; + SetDParamStr(0, _settings_client.network.server_name); + ShowQueryString(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION, NETWORK_NAME_LENGTH, this, CS_ALPHANUMERAL, QSF_LEN_IN_CHARS); + break; + + case WID_CL_CLIENT_NAME_EDIT: + this->query_widget = WID_CL_CLIENT_NAME_EDIT; + SetDParamStr(0, _settings_client.network.client_name); + ShowQueryString(STR_JUST_RAW_STRING, STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION, NETWORK_CLIENT_NAME_LENGTH, this, CS_ALPHANUMERAL, QSF_LEN_IN_CHARS); + break; + + case WID_CL_SERVER_VISIBILITY: + if (!_network_server) break; + + ShowDropDownMenu(this, _server_visibility_dropdown, _settings_client.network.server_advertise, WID_CL_SERVER_VISIBILITY, 0, 0); + break; + + case WID_CL_MATRIX: { + ButtonCommon *button = this->GetButtonAtPoint(pt); + if (button == nullptr) break; + + button->OnClick(this, pt); + break; } } } - void OnMouseOver(Point pt, int widget) override + bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override { - /* -1 means we left the current window */ - if (pt.y == -1) { - this->selected_item = -1; + switch (widget) { + case WID_CL_MATRIX: { + int index = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_CL_MATRIX); + + bool rtl = _current_text_dir == TD_RTL; + NWidgetBase *widget_matrix = this->GetWidget(WID_CL_MATRIX); + + Dimension d = GetSpriteSize(SPR_COMPANY_ICON); + uint text_left = widget_matrix->pos_x + (rtl ? (uint)WD_FRAMERECT_LEFT : d.width + 8); + uint text_right = widget_matrix->pos_x + widget_matrix->current_x - (rtl ? d.width + 8 : (uint)WD_FRAMERECT_RIGHT); + + Dimension d2 = GetSpriteSize(SPR_PLAYER_SELF); + uint offset_x = CLIENT_OFFSET_LEFT - d2.width - 3; + + uint player_icon_x = rtl ? text_right - offset_x - d2.width : text_left + offset_x; + + if (IsInsideMM(pt.x, player_icon_x, player_icon_x + d2.width)) { + if (index == this->player_self_index) { + GuiShowTooltips(this, STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP, 0, nullptr, close_cond); + return true; + } else if (index == this->player_host_index) { + GuiShowTooltips(this, STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP, 0, nullptr, close_cond); + return true; + } + } + + ButtonCommon *button = this->GetButtonAtPoint(pt); + if (button == nullptr) return false; + + GuiShowTooltips(this, button->tooltip, 0, nullptr, close_cond); + return true; + }; + } + + return false; + } + + void OnDropdownClose(Point pt, int widget, int index, bool instant_close) override + { + /* If you close the dropdown outside the list, don't take any action. */ + if (widget == WID_CL_MATRIX) return; + + Window::OnDropdownClose(pt, widget, index, instant_close); + } + + void OnDropdownSelect(int widget, int index) override + { + switch (widget) { + case WID_CL_SERVER_VISIBILITY: + if (!_network_server) break; + + _settings_client.network.server_advertise = (index != 0); + break; + + case WID_CL_MATRIX: { + StringID text = STR_NULL; + QueryCallbackProc *callback = nullptr; + + switch (index) { + case DD_CLIENT_ADMIN_KICK: + _admin_client_id = this->dd_client_id; + text = STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK; + callback = AdminClientKickCallback; + SetDParamStr(0, NetworkClientInfo::GetByClientID(_admin_client_id)->client_name); + break; + + case DD_CLIENT_ADMIN_BAN: + _admin_client_id = this->dd_client_id; + text = STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN; + callback = AdminClientBanCallback; + SetDParamStr(0, NetworkClientInfo::GetByClientID(_admin_client_id)->client_name); + break; + + case DD_COMPANY_ADMIN_RESET: + _admin_company_id = this->dd_company_id; + text = STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET; + callback = AdminCompanyResetCallback; + SetDParam(0, _admin_company_id); + break; + + case DD_COMPANY_ADMIN_UNLOCK: + _admin_company_id = this->dd_company_id; + text = STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK; + callback = AdminCompanyUnlockCallback; + SetDParam(0, _admin_company_id); + break; + + default: + NOT_REACHED(); + } + + assert(text != STR_NULL); + assert(callback != nullptr); + + /* Always ask confirmation for all admin actions. */ + ShowQuery(STR_NETWORK_CLIENT_LIST_ASK_CAPTION, text, this, callback); + + break; + } + + default: + NOT_REACHED(); + } + + this->SetDirty(); + } + + void OnQueryTextFinished(char *str) override + { + if (str == nullptr) return; + + switch (this->query_widget) { + default: NOT_REACHED(); + + case WID_CL_SERVER_NAME_EDIT: { + if (!_network_server) break; + + uint index; + GetSettingFromName("network.server_name", &index); + SetSettingValue(index, StrEmpty(str) ? "Unnamed Server" : str); + this->InvalidateData(); + break; + } + + case WID_CL_CLIENT_NAME_EDIT: { + if (!NetworkValidateClientName(str)) break; + + uint index; + GetSettingFromName("network.client_name", &index); + SetSettingValue(index, str); + this->InvalidateData(); + break; + } + + case WID_CL_COMPANY_JOIN: + NetworkClientRequestMove(this->join_company, str); + break; + } + } + + /** + * Draw the buttons for a single line in the matrix. + * + * The x-position in RTL is the most left or otherwise the most right pixel + * we can draw the buttons from. + * + * @param x The x-position to start with the buttons. Updated during this function. + * @param y The y-position to start with the buttons. + * @param buttons The buttons to draw. + */ + void DrawButtons(uint &x, uint y, const std::vector> &buttons) const + { + for (auto &button : buttons) { + bool rtl = _current_text_dir == TD_RTL; + + uint left = rtl ? x : x - button->width; + uint right = rtl ? x + button->width : x; + + int offset = std::max(0, ((int)(this->line_height + 1) - (int)button->height) / 2); + + DrawFrameRect(left, y + offset, right, y + offset + button->height, button->colour, FR_NONE); + DrawSprite(button->sprite, PAL_NONE, left + ScaleGUITrad(WD_FRAMERECT_LEFT), y + offset + ScaleGUITrad(WD_FRAMERECT_TOP)); + if (button->disabled) { + GfxFillRect(left + 1, y + offset + 1, right - 1, y + offset + button->height - 1, _colour_gradient[button->colour & 0xF][2], FILLRECT_CHECKER); + } + + int width = button->width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; + x += rtl ? width : -width; + } + } + + /** + * Draw a company and its clients on the matrix. + * @param company_id The company to draw. + * @param left The most left pixel of the line. + * @param right The most right pixel of the line. + * @param top The top of the first line. + * @param line The Nth line we are drawing. Updated during this function. + */ + void DrawCompany(CompanyID company_id, uint left, uint right, uint top, uint &line) const + { + bool rtl = _current_text_dir == TD_RTL; + int text_y_offset = std::max(0, ((int)(this->line_height + 1) - (int)FONT_HEIGHT_NORMAL) / 2) + WD_MATRIX_BOTTOM; + + Dimension d = GetSpriteSize(SPR_COMPANY_ICON); + int offset = std::max(0, ((int)(this->line_height + 1) - (int)d.height) / 2); + + uint text_left = left + (rtl ? (uint)WD_FRAMERECT_LEFT : d.width + 8); + uint text_right = right - (rtl ? d.width + 8 : (uint)WD_FRAMERECT_RIGHT); + + uint line_start = this->vscroll->GetPosition(); + uint line_end = line_start + this->vscroll->GetCapacity(); + + uint y = top + (this->line_height * (line - line_start)); + + /* Draw the company line (if in range of scrollbar). */ + if (IsInsideMM(line, line_start, line_end)) { + uint x = rtl ? text_left : text_right; + + /* If there are buttons for this company, draw them. */ + auto button_find = this->buttons.find(line); + if (button_find != this->buttons.end()) { + this->DrawButtons(x, y, button_find->second); + } + + if (company_id == COMPANY_SPECTATOR) { + DrawSprite(SPR_COMPANY_ICON, PALETTE_TO_GREY, rtl ? right - d.width - 4 : left + 4, y + offset); + DrawString(rtl ? x : text_left, rtl ? text_right : x, y + text_y_offset, STR_NETWORK_CLIENT_LIST_SPECTATORS, TC_SILVER); + } else if (company_id == COMPANY_NEW_COMPANY) { + DrawSprite(SPR_COMPANY_ICON, PALETTE_TO_GREY, rtl ? right - d.width - 4 : left + 4, y + offset); + DrawString(rtl ? x : text_left, rtl ? text_right : x, y + text_y_offset, STR_NETWORK_CLIENT_LIST_NEW_COMPANY, TC_WHITE); + } else { + DrawCompanyIcon(company_id, rtl ? right - d.width - 4 : left + 4, y + offset); + + SetDParam(0, company_id); + SetDParam(1, company_id); + DrawString(rtl ? x : text_left, rtl ? text_right : x, y + text_y_offset, STR_COMPANY_NAME, TC_SILVER); + } + } + + y += this->line_height; + line++; + + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { + if (ci->client_playas != company_id) continue; + + /* Draw the player line (if in range of scrollbar). */ + if (IsInsideMM(line, line_start, line_end)) { + uint x = rtl ? text_left : text_right; + + /* If there are buttons for this client, draw them. */ + auto button_find = this->buttons.find(line); + if (button_find != this->buttons.end()) { + this->DrawButtons(x, y, button_find->second); + } + + SpriteID player_icon = 0; + if (ci->client_id == _network_own_client_id) { + player_icon = SPR_PLAYER_SELF; + } else if (ci->client_id == CLIENT_ID_SERVER) { + player_icon = SPR_PLAYER_HOST; + } + + if (player_icon != 0) { + Dimension d2 = GetSpriteSize(player_icon); + uint offset_x = CLIENT_OFFSET_LEFT - 3; + int offset_y = std::max(0, ((int)(this->line_height + 1) - (int)d2.height) / 2); + DrawSprite(player_icon, PALETTE_TO_GREY, rtl ? text_right - offset_x : text_left + offset_x - d2.width, y + offset_y); + } + + SetDParamStr(0, ci->client_name); + DrawString(rtl ? x : text_left + CLIENT_OFFSET_LEFT, rtl ? text_right - CLIENT_OFFSET_LEFT : x, y + text_y_offset, STR_JUST_RAW_STRING, TC_BLACK); + } + + y += this->line_height; + line++; + } + } + + void DrawWidget(const Rect &r, int widget) const override + { + switch (widget) { + case WID_CL_MATRIX: { + uint line = 0; + + if (this->hover_index >= 0) { + uint offset = this->hover_index * this->line_height; + GfxFillRect(r.left + 2, r.top + offset, r.right - 1, r.top + offset + this->line_height - 1, GREY_SCALE(9)); + } + + NetworkClientInfo *own_ci = NetworkClientInfo::GetByClientID(_network_own_client_id); + if (own_ci->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); + } + + for (const Company *c : Company::Iterate()) { + if (own_ci->client_playas == c->index) continue; + this->DrawCompany(c->index, r.left, r.right, r.top, line); + } + + /* Specators */ + this->DrawCompany(COMPANY_SPECTATOR, r.left, r.right, r.top, line); + + break; + } + } + } + + virtual void OnMouseLoop() override + { + if (GetWidgetFromPos(this, _cursor.pos.x - this->left, _cursor.pos.y - this->top) != WID_CL_MATRIX) { + this->hover_index = -1; this->SetDirty(); return; } - /* Find the new selected item (if any) */ - pt.y -= this->GetWidget(WID_CL_PANEL)->pos_y; - int item = -1; - if (IsInsideMM(pt.y, WD_FRAMERECT_TOP, this->GetWidget(WID_CL_PANEL)->current_y - WD_FRAMERECT_BOTTOM)) { - item = (pt.y - WD_FRAMERECT_TOP) / this->line_height; + NWidgetBase *nwi = this->GetWidget(WID_CL_MATRIX); + int y = _cursor.pos.y - this->top - nwi->pos_y - 2; + int index = y / this->line_height; + + if (index != this->hover_index) { + this->hover_index = index; + this->SetDirty(); } - - /* It did not change.. no update! */ - if (item == this->selected_item) return; - this->selected_item = item; - - /* Repaint */ - this->SetDirty(); } }; diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index c180f49025..5fc35667ea 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -62,7 +62,8 @@ struct PacketWriter : SaveFilter { ServerNetworkGameSocketHandler *cs; ///< Socket we are associated with. std::unique_ptr current; ///< The packet we're currently writing to. size_t total_size; ///< Total size of the compressed savegame. - std::deque> packets; ///< Packet queue of the savegame; send these "slowly" to the client. + std::vector> packets; ///< Packet queue of the savegame; send these "slowly" to the client. + std::vector> prepend_packets; ///< Packet queue of the savegame; send these "slowly" to the client. std::mutex mutex; ///< Mutex for making threaded saving safe. std::condition_variable exit_sig; ///< Signal for threaded destruction of this packet writer. @@ -84,6 +85,7 @@ struct PacketWriter : SaveFilter { /* This must all wait until the Destroy function is called. */ this->packets.clear(); + this->prepend_packets.clear(); this->current.reset(); } @@ -114,30 +116,28 @@ struct PacketWriter : SaveFilter { } /** - * Checks whether there are packets. - * It's not 100% threading safe, but this is only asked for when checking - * whether there still is something to send. Then another call will be made - * to actually get the Packet, which will be the only one popping packets - * and thus eventually setting this on false. + * Transfer all packets from here to the network's queue while holding + * the lock on our mutex. + * @param socket The network socket to write to. + * @return True iff the last packet of the map has been sent. */ - bool HasPackets() + bool TransferToNetworkQueue(ServerNetworkGameSocketHandler *socket) { std::lock_guard lock(this->mutex); - return !this->packets.empty(); - } + for (auto &p : this->prepend_packets) { + socket->SendPrependPacket(std::move(p)); + } + bool last_packet = false; + for (auto &p : this->packets) { + if (p->GetPacketType() == PACKET_SERVER_MAP_DONE) last_packet = true; + socket->SendPacket(std::move(p)); + + } + this->prepend_packets.clear(); + this->packets.clear(); - /** - * Pop a single created packet from the queue with packets. - */ - std::unique_ptr PopPacket() - { - std::lock_guard lock(this->mutex); - - if (this->packets.empty()) return nullptr; - std::unique_ptr p = std::move(this->packets.front()); - this->packets.pop_front(); - return p; + return last_packet; } /** Append the current packet to the queue. */ @@ -153,7 +153,7 @@ struct PacketWriter : SaveFilter { { if (this->current == nullptr) return; - this->packets.push_front(std::move(this->current)); + this->prepend_packets.push_back(std::move(this->current)); } void Write(byte *buf, size_t size) override @@ -161,7 +161,7 @@ struct PacketWriter : SaveFilter { /* We want to abort the saving when the socket is closed. */ if (this->cs == nullptr) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); - if (this->current == nullptr) this->current.reset(new Packet(PACKET_SERVER_MAP_DATA)); + if (this->current == nullptr) this->current.reset(new Packet(PACKET_SERVER_MAP_DATA, SHRT_MAX)); std::lock_guard lock(this->mutex); @@ -172,7 +172,7 @@ struct PacketWriter : SaveFilter { if (!this->current->CanWriteToPacket(1)) { this->AppendQueue(); - if (buf != bufe) this->current.reset(new Packet(PACKET_SERVER_MAP_DATA)); + if (buf != bufe) this->current.reset(new Packet(PACKET_SERVER_MAP_DATA, SHRT_MAX)); } } @@ -190,11 +190,11 @@ struct PacketWriter : SaveFilter { this->AppendQueue(); /* Add a packet stating that this is the end to the queue. */ - this->current.reset(new Packet(PACKET_SERVER_MAP_DONE)); + this->current.reset(new Packet(PACKET_SERVER_MAP_DONE, SHRT_MAX)); this->AppendQueue(); /* Fast-track the size to the client. */ - this->current.reset(new Packet(PACKET_SERVER_MAP_SIZE)); + this->current.reset(new Packet(PACKET_SERVER_MAP_SIZE, SHRT_MAX)); this->current->Send_uint32((uint32)this->total_size); this->PrependQueue(); } @@ -296,14 +296,13 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta extern byte _network_clients_connected; _network_clients_connected--; - DeleteWindowById(WC_CLIENT_LIST_POPUP, this->client_id); - SetWindowDirty(WC_CLIENT_LIST, 0); - this->SendPackets(true); delete this->GetInfo(); delete this; + InvalidateWindowData(WC_CLIENT_LIST, 0); + return status; } @@ -357,7 +356,7 @@ static void NetworkHandleCommandQueue(NetworkClientSocket *cs); NetworkRecvStatus ServerNetworkGameSocketHandler::SendClientInfo(NetworkClientInfo *ci) { if (ci->client_id != INVALID_CLIENT_ID) { - Packet *p = new Packet(PACKET_SERVER_CLIENT_INFO); + Packet *p = new Packet(PACKET_SERVER_CLIENT_INFO, SHRT_MAX); p->Send_uint32(ci->client_id); p->Send_uint8 (ci->client_playas); p->Send_string(ci->client_name); @@ -404,7 +403,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyInfo() Packet *p; for (const Company *company : Company::Iterate()) { - p = new Packet(PACKET_SERVER_COMPANY_INFO); + p = new Packet(PACKET_SERVER_COMPANY_INFO, SHRT_MAX); p->Send_uint8 (NETWORK_COMPANY_INFO_VERSION); p->Send_bool (true); @@ -419,7 +418,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyInfo() this->SendPacket(p); } - p = new Packet(PACKET_SERVER_COMPANY_INFO); + p = new Packet(PACKET_SERVER_COMPANY_INFO, SHRT_MAX); p->Send_uint8 (NETWORK_COMPANY_INFO_VERSION); p->Send_bool (false); @@ -436,7 +435,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyInfo() NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode error, const char *reason) { char str[100]; - Packet *p = new Packet(PACKET_SERVER_ERROR); + Packet *p = new Packet(PACKET_SERVER_ERROR, SHRT_MAX); p->Send_uint8(error); if (reason != nullptr) p->Send_string(reason); @@ -482,7 +481,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err NetworkRecvStatus ServerNetworkGameSocketHandler::SendDesyncLog(const std::string &log) { for (size_t offset = 0; offset < log.size();) { - Packet *p = new Packet(PACKET_SERVER_DESYNC_LOG); + Packet *p = new Packet(PACKET_SERVER_DESYNC_LOG, SHRT_MAX); size_t size = std::min(log.size() - offset, SHRT_MAX - 2 - p->Size()); p->Send_uint16(size); p->Send_binary(log.data() + offset, size); @@ -496,7 +495,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendDesyncLog(const std::strin /** Send the check for the NewGRFs. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck() { - Packet *p = new Packet(PACKET_SERVER_CHECK_NEWGRFS); + Packet *p = new Packet(PACKET_SERVER_CHECK_NEWGRFS, SHRT_MAX); const GRFConfig *c; uint grf_count = 0; @@ -523,7 +522,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword() /* Reset 'lag' counters */ this->last_frame = this->last_frame_server = _frame_counter; - Packet *p = new Packet(PACKET_SERVER_NEED_GAME_PASSWORD); + Packet *p = new Packet(PACKET_SERVER_NEED_GAME_PASSWORD, SHRT_MAX); p->Send_uint32(_settings_game.game_creation.generation_seed ^ this->server_hash_bits); p->Send_string(_settings_client.network.network_id); this->SendPacket(p); @@ -540,7 +539,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword() /* Reset 'lag' counters */ this->last_frame = this->last_frame_server = _frame_counter; - Packet *p = new Packet(PACKET_SERVER_NEED_COMPANY_PASSWORD); + Packet *p = new Packet(PACKET_SERVER_NEED_COMPANY_PASSWORD, SHRT_MAX); p->Send_uint32(_settings_game.game_creation.generation_seed); p->Send_string(_settings_client.network.network_id); this->SendPacket(p); @@ -561,7 +560,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome() _network_game_info.clients_on++; - p = new Packet(PACKET_SERVER_WELCOME); + p = new Packet(PACKET_SERVER_WELCOME, SHRT_MAX); p->Send_uint32(this->client_id); p->Send_uint32(_settings_game.game_creation.generation_seed); p->Send_uint32(_settings_game.game_creation.generation_seed ^ this->server_hash_bits); @@ -592,7 +591,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWait() if (new_cs->GetInfo()->join_date < this->GetInfo()->join_date || (new_cs->GetInfo()->join_date == this->GetInfo()->join_date && new_cs->client_id < this->client_id)) waiting++; } - p = new Packet(PACKET_SERVER_WAIT); + p = new Packet(PACKET_SERVER_WAIT, SHRT_MAX); p->Send_uint8(waiting); this->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; @@ -628,8 +627,6 @@ void ServerNetworkGameSocketHandler::CheckNextClientToSendMap(NetworkClientSocke /** This sends the map to the client */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() { - static uint sent_packets; // How many packets we did send successfully last time - if (this->status < STATUS_AUTHORIZED) { /* Illegal call, return error and ignore the packet */ return this->SendError(NETWORK_ERROR_NOT_AUTHORIZED); @@ -639,7 +636,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() this->savegame = new PacketWriter(this); /* Now send the _frame_counter and how many packets are coming */ - Packet *p = new Packet(PACKET_SERVER_MAP_BEGIN); + Packet *p = new Packet(PACKET_SERVER_MAP_BEGIN, SHRT_MAX); p->Send_uint32(_frame_counter); this->SendPacket(p); @@ -649,8 +646,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() this->last_frame = _frame_counter; this->last_frame_server = _frame_counter; - sent_packets = 4; // We start with trying 4 packets - /* Make a dump of the current game */ SaveModeFlags flags = SMF_NET_SERVER; if (this->supports_zstd) flags |= SMF_ZSTD_OK; @@ -658,25 +653,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() } if (this->status == STATUS_MAP) { - bool last_packet = false; - bool has_packets = true; - - for (uint i = 0; i < sent_packets; i++) { - std::unique_ptr p = this->savegame->PopPacket(); - if (p == nullptr) { - has_packets = false; - break; - } - last_packet = p->GetPacketType() == PACKET_SERVER_MAP_DONE; - - this->SendPacket(std::move(p)); - - if (last_packet) { - /* There is no more data, so break the for */ - break; - } - } - + bool last_packet = this->savegame->TransferToNetworkQueue(this); if (last_packet) { /* Done reading, make sure saving is done as well */ this->savegame->Destroy(); @@ -688,25 +665,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() this->CheckNextClientToSendMap(); } - - switch (this->SendPackets()) { - case SPS_CLOSED: - return NETWORK_RECV_STATUS_CONN_LOST; - - case SPS_ALL_SENT: - /* All are sent, increase the sent_packets */ - if (has_packets) sent_packets *= 2; - break; - - case SPS_PARTLY_SENT: - /* Only a part is sent; leave the transmission state. */ - break; - - case SPS_NONE_SENT: - /* Not everything is sent, decrease the sent_packets */ - if (sent_packets > 1) sent_packets /= 2; - break; - } } return NETWORK_RECV_STATUS_OKAY; } @@ -717,7 +675,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendJoin(ClientID client_id) { - Packet *p = new Packet(PACKET_SERVER_JOIN); + Packet *p = new Packet(PACKET_SERVER_JOIN, SHRT_MAX); p->Send_uint32(client_id); @@ -728,7 +686,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendJoin(ClientID client_id) /** Tell the client that they may run to a particular frame. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendFrame() { - Packet *p = new Packet(PACKET_SERVER_FRAME); + Packet *p = new Packet(PACKET_SERVER_FRAME, SHRT_MAX); p->Send_uint32(_frame_counter); p->Send_uint32(_frame_counter_max); #ifdef ENABLE_NETWORK_SYNC_EVERY_FRAME @@ -752,7 +710,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendFrame() /** Request the client to sync. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendSync() { - Packet *p = new Packet(PACKET_SERVER_SYNC); + Packet *p = new Packet(PACKET_SERVER_SYNC, SHRT_MAX); p->Send_uint32(_frame_counter); p->Send_uint32(_sync_seed_1); @@ -770,7 +728,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendSync() */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCommand(const CommandPacket *cp) { - Packet *p = new Packet(PACKET_SERVER_COMMAND); + Packet *p = new Packet(PACKET_SERVER_COMMAND, SHRT_MAX); this->NetworkGameSocketHandler::SendCommand(p, cp); p->Send_uint32(cp->frame); @@ -792,7 +750,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action, { if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY; - Packet *p = new Packet(PACKET_SERVER_CHAT); + Packet *p = new Packet(PACKET_SERVER_CHAT, SHRT_MAX); p->Send_uint8 (action); p->Send_uint32(client_id); @@ -811,7 +769,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action, */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendErrorQuit(ClientID client_id, NetworkErrorCode errorno) { - Packet *p = new Packet(PACKET_SERVER_ERROR_QUIT); + Packet *p = new Packet(PACKET_SERVER_ERROR_QUIT, SHRT_MAX); p->Send_uint32(client_id); p->Send_uint8 (errorno); @@ -826,7 +784,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendErrorQuit(ClientID client_ */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendQuit(ClientID client_id) { - Packet *p = new Packet(PACKET_SERVER_QUIT); + Packet *p = new Packet(PACKET_SERVER_QUIT, SHRT_MAX); p->Send_uint32(client_id); @@ -837,7 +795,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendQuit(ClientID client_id) /** Tell the client we're shutting down. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendShutdown() { - Packet *p = new Packet(PACKET_SERVER_SHUTDOWN); + Packet *p = new Packet(PACKET_SERVER_SHUTDOWN, SHRT_MAX); this->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; } @@ -845,7 +803,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendShutdown() /** Tell the client we're starting a new game. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGame() { - Packet *p = new Packet(PACKET_SERVER_NEWGAME); + Packet *p = new Packet(PACKET_SERVER_NEWGAME, SHRT_MAX); this->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; } @@ -857,7 +815,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGame() */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendRConResult(uint16 colour, const char *command) { - Packet *p = new Packet(PACKET_SERVER_RCON); + Packet *p = new Packet(PACKET_SERVER_RCON, SHRT_MAX); p->Send_uint16(colour); p->Send_string(command); @@ -872,7 +830,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendRConResult(uint16 colour, */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMove(ClientID client_id, CompanyID company_id) { - Packet *p = new Packet(PACKET_SERVER_MOVE); + Packet *p = new Packet(PACKET_SERVER_MOVE, SHRT_MAX); p->Send_uint32(client_id); p->Send_uint8(company_id); @@ -883,7 +841,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMove(ClientID client_id, C /** Send an update about the company password states. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate() { - Packet *p = new Packet(PACKET_SERVER_COMPANY_UPDATE); + Packet *p = new Packet(PACKET_SERVER_COMPANY_UPDATE, SHRT_MAX); p->Send_uint16(_network_company_passworded); this->SendPacket(p); @@ -893,7 +851,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate() /** Send an update about the max company/spectator counts. */ NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate() { - Packet *p = new Packet(PACKET_SERVER_CONFIG_UPDATE); + Packet *p = new Packet(PACKET_SERVER_CONFIG_UPDATE, SHRT_MAX); p->Send_uint8(_settings_client.network.max_companies); p->Send_uint8(_settings_client.network.max_spectators); @@ -903,7 +861,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate() NetworkRecvStatus ServerNetworkGameSocketHandler::SendSettingsAccessUpdate(bool ok) { - Packet *p = new Packet(PACKET_SERVER_SETTINGS_ACCESS); + Packet *p = new Packet(PACKET_SERVER_SETTINGS_ACCESS, SHRT_MAX); p->Send_bool(ok); this->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; @@ -1123,6 +1081,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet * this->GetClientName(client_name, lastof(client_name)); NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, client_name, nullptr, this->client_id); + InvalidateWindowData(WC_CLIENT_LIST, 0); /* Mark the client as pre-active, and wait for an ACK * so we know he is done loading and in sync with us */ @@ -2193,6 +2152,8 @@ void NetworkServerDoMove(ClientID client_id, CompanyID company_id) NetworkAction action = (company_id == COMPANY_SPECTATOR) ? NETWORK_ACTION_COMPANY_SPECTATOR : NETWORK_ACTION_COMPANY_JOIN; NetworkServerSendChat(action, DESTTYPE_BROADCAST, 0, "", client_id, company_id + 1); + + InvalidateWindowData(WC_CLIENT_LIST, 0); } /** diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 9e9e52a9fd..c3d3bb9652 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -233,7 +233,7 @@ void ServerNetworkUDPSocketHandler::Reply_CLIENT_FIND_SERVER_extended(Packet *p, uint16 flags = p->Recv_uint16(); uint16 version = p->Recv_uint16(); - Packet packet(PACKET_UDP_EX_SERVER_RESPONSE); + Packet packet(PACKET_UDP_EX_SERVER_RESPONSE, SHRT_MAX); this->SendNetworkGameInfoExtended(&packet, ngi, flags, version); /* Let the client know that we are here */ @@ -297,10 +297,10 @@ void ServerNetworkUDPSocketHandler::Receive_CLIENT_DETAIL_INFO(Packet *p, Networ /** * A client has requested the names of some NewGRFs. * - * Replying this can be tricky as we have a limit of SEND_MTU bytes + * Replying this can be tricky as we have a limit of UDP_MTU bytes * in the reply packet and we can send up to 100 bytes per NewGRF * (GRF ID, MD5sum and NETWORK_GRF_NAME_LENGTH bytes for the name). - * As SEND_MTU is _much_ less than 100 * NETWORK_MAX_GRF_COUNT, it + * As UDP_MTU is _much_ less than 100 * NETWORK_MAX_GRF_COUNT, it * could be that a packet overflows. To stop this we only reply * with the first N NewGRFs so that if the first N + 1 NewGRFs * would be sent, the packet overflows. @@ -371,7 +371,7 @@ void ServerNetworkUDPSocketHandler::Receive_CLIENT_GET_NEWGRFS(Packet *p, Networ * The name could be an empty string, if so take the filename. */ size_t required_length = sizeof(info.ident.grfid) + sizeof(info.ident.md5sum) + std::min(strlen(info.name) + 1, (size_t)NETWORK_GRF_NAME_LENGTH); - if (packet_len + required_length > SEND_MTU_SHORT - 4) { // 4 is 3 byte header + grf count in reply + if (packet_len + required_length > UDP_MTU_SHORT - 4) { // 4 is 3 byte header + grf count in reply flush_response(); } packet_len += required_length; diff --git a/src/table/sprites.h b/src/table/sprites.h index eb29791009..1fdf7ac142 100644 --- a/src/table/sprites.h +++ b/src/table/sprites.h @@ -54,7 +54,7 @@ static const SpriteID SPR_LARGE_SMALL_WINDOW = 682; /** Extra graphic spritenumbers */ static const SpriteID SPR_OPENTTD_BASE = 4896; -static const uint16 OPENTTD_SPRITE_COUNT = 186; +static const uint16 OPENTTD_SPRITE_COUNT = 191; /* Halftile-selection sprites */ static const SpriteID SPR_HALFTILE_SELECTION_FLAT = SPR_OPENTTD_BASE; @@ -166,6 +166,12 @@ static const SpriteID SPR_WINDOW_DEFSIZE = SPR_OPENTTD_BASE + 168; static const SpriteID SPR_RENAME = SPR_OPENTTD_BASE + 184; static const SpriteID SPR_GOTO_LOCATION = SPR_OPENTTD_BASE + 185; +static const SpriteID SPR_CHAT = SPR_OPENTTD_BASE + 186; +static const SpriteID SPR_ADMIN = SPR_OPENTTD_BASE + 187; +static const SpriteID SPR_JOIN = SPR_OPENTTD_BASE + 188; +static const SpriteID SPR_PLAYER_SELF = SPR_OPENTTD_BASE + 189; +static const SpriteID SPR_PLAYER_HOST = SPR_OPENTTD_BASE + 190; + static const SpriteID SPR_IMG_CARGOFLOW = SPR_OPENTTD_BASE + 174; static const SpriteID SPR_SIGNALS_BASE = SPR_OPENTTD_BASE + OPENTTD_SPRITE_COUNT; diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index e8567f793e..1e1568de55 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -211,9 +211,7 @@ static void PopupMainToolbMenu(Window *w, int widget, StringID string, int count /** Enum for the Company Toolbar's network related buttons */ static const int CTMN_CLIENT_LIST = -1; ///< Show the client list -static const int CTMN_NEW_COMPANY = -2; ///< Create a new company -static const int CTMN_SPECTATE = -3; ///< Become spectator -static const int CTMN_SPECTATOR = -4; ///< Show a company window as spectator +static const int CTMN_SPECTATOR = -2; ///< Show a company window as spectator /** * Pop up a generic company list menu. @@ -231,12 +229,6 @@ static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) /* Add the client list button for the companies menu */ list.emplace_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false)); - - if (_local_company == COMPANY_SPECTATOR) { - list.emplace_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached())); - } else { - list.emplace_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached())); - } break; case WID_TN_STORY: @@ -627,23 +619,6 @@ static CallBackFunction MenuClickCompany(int index) case CTMN_CLIENT_LIST: ShowClientList(); return CBF_NONE; - - case CTMN_NEW_COMPANY: - if (_network_server) { - DoCommandP(0, CCA_NEW, _network_own_client_id, CMD_COMPANY_CTRL); - } else { - NetworkSendCommand(0, CCA_NEW, 0, 0, CMD_COMPANY_CTRL, nullptr, nullptr, _local_company, 0); - } - return CBF_NONE; - - case CTMN_SPECTATE: - if (_network_server) { - NetworkServerDoMove(CLIENT_ID_SERVER, COMPANY_SPECTATOR); - MarkWholeScreenDirty(); - } else { - NetworkClientRequestMove(COMPANY_SPECTATOR); - } - return CBF_NONE; } } ShowCompany((CompanyID)index); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 9641007aae..d6c36f2a5e 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -378,11 +378,6 @@ void BaseVehicleListWindow::FilterVehicleList() } } -void BaseVehicleListWindow::OnInit() -{ - this->SetCargoFilterArray(); -} - void BaseVehicleListWindow::CheckCargoFilterEnableState(int plane_widget, bool re_init, bool possible) { NWidgetStacked *sel = this->GetWidget(plane_widget); @@ -424,6 +419,12 @@ Dimension BaseVehicleListWindow::GetActionDropdownSize(bool show_autoreplace, bo return d; } +void BaseVehicleListWindow::OnInit() +{ + this->order_arrow_width = GetStringBoundingBox(STR_TINY_RIGHT_ARROW).width; + this->SetCargoFilterArray(); +} + /** * Whether the Action dropdown window should be shown/available. * @return Whether available @@ -1699,14 +1700,14 @@ static const NWidgetPart _nested_vehicle_list[] = { EndContainer(), }; -static void DrawSmallOrderList(const Vehicle *v, int left, int right, int y, VehicleOrderID start = 0) +static void DrawSmallOrderList(const Vehicle *v, int left, int right, int y, uint order_arrow_width, VehicleOrderID start) { const Order *order = v->GetOrder(start); if (order == nullptr) return; bool rtl = _current_text_dir == TD_RTL; - int l_offset = rtl ? 0 : ScaleGUITrad(6); - int r_offset = rtl ? ScaleGUITrad(6) : 0; + int l_offset = rtl ? 0 : order_arrow_width; + int r_offset = rtl ? order_arrow_width : 0; int i = 0; VehicleOrderID oid = start; @@ -1731,11 +1732,11 @@ static void DrawSmallOrderList(const Vehicle *v, int left, int right, int y, Veh } /** Draw small order list in the vehicle GUI, but without the little black arrow. This is used for shared order groups. */ -static void DrawSmallOrderList(const Order *order, int left, int right, int y) +static void DrawSmallOrderList(const Order *order, int left, int right, int y, uint order_arrow_width) { bool rtl = _current_text_dir == TD_RTL; - int l_offset = rtl ? 0 : ScaleGUITrad(6); - int r_offset = rtl ? ScaleGUITrad(6) : 0; + int l_offset = rtl ? 0 : order_arrow_width; + int r_offset = rtl ? order_arrow_width : 0; int i = 0; while (order != nullptr) { if (order->IsType(OT_GOTO_STATION)) { @@ -1959,7 +1960,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int DrawString(text_left, text_right, y, STR_TINY_GROUP, TC_BLACK); } - if (show_orderlist) DrawSmallOrderList(v, orderlist_left, orderlist_right, y, v->cur_real_order_index); + if (show_orderlist) DrawSmallOrderList(v, orderlist_left, orderlist_right, y, this->order_arrow_width, v->cur_real_order_index); StringID str; if (v->IsChainInDepot()) { @@ -1981,7 +1982,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int DrawVehicleImage(vehgroup.vehicles_begin[i], image_left + 8 * i, image_right, y + FONT_HEIGHT_SMALL - 1, selected_vehicle, EIT_IN_LIST, 0); } - if (show_orderlist) DrawSmallOrderList((vehgroup.vehicles_begin[0])->GetFirstOrder(), orderlist_left, orderlist_right, y); + if (show_orderlist) DrawSmallOrderList((vehgroup.vehicles_begin[0])->GetFirstOrder(), orderlist_left, orderlist_right, y, this->order_arrow_width); SetDParam(0, vehgroup.NumVehicles()); DrawString(left, right, y + 2, STR_BLACK_COMMA); diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 9c7cc87712..1c1b5f5a9f 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -86,6 +86,7 @@ public: byte unitnumber_digits; ///< The number of digits of the highest unit number. Scrollbar *vscroll; VehicleListIdentifier vli; ///< Identifier of the vehicle list we want to currently show. + uint order_arrow_width; ///< Width of the arrow in the small order list. VehicleID vehicle_sel; ///< Selected vehicle typedef GUIVehicleGroupList::SortFunction VehicleGroupSortFunction; @@ -130,6 +131,8 @@ public: BaseVehicleListWindow(WindowDesc *desc, WindowNumber wno); + void OnInit() override; + void UpdateSortingFromGrouping(); void DrawVehicleListItems(VehicleID selected_vehicle, int line_height, const Rect &r) const; @@ -140,7 +143,6 @@ public: void SetCargoFilterIndex(int index); void SetCargoFilterArray(); void FilterVehicleList(); - void OnInit() override; void CheckCargoFilterEnableState(int plane_widget, bool re_init, bool possible = true); Dimension GetActionDropdownSize(bool show_autoreplace, bool show_group, bool show_template_replace, StringID change_order_str = 0); DropDownList BuildActionDropdownList(bool show_autoreplace, bool show_group, bool show_template_replace, diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index 1eab9b10e3..ecafeb6138 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -1154,6 +1154,7 @@ void *OpenGLBackend::GetVideoBuffer() #endif if (!this->persistent_mapping_supported) { + assert(this->vid_buffer == nullptr); _glBindBuffer(GL_PIXEL_UNPACK_BUFFER, this->vid_pbo); this->vid_buffer = _glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_READ_WRITE); } else if (this->vid_buffer == nullptr) { diff --git a/src/video/sdl2_opengl_v.cpp b/src/video/sdl2_opengl_v.cpp index 7dcecb5ce3..5f10c60691 100644 --- a/src/video/sdl2_opengl_v.cpp +++ b/src/video/sdl2_opengl_v.cpp @@ -78,6 +78,8 @@ const char *VideoDriver_SDL_OpenGL::Start(const StringList ¶m) this->Stop(); return "Can't get pointer to screen buffer"; } + /* Main loop expects to start with the buffer unmapped. */ + this->ReleaseVideoPointer(); return nullptr; } diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 69e7ba887f..4e75b274b4 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -1319,6 +1319,8 @@ const char *VideoDriver_Win32OpenGL::Start(const StringList ¶m) _cur_resolution = old_res; return "Can't get pointer to screen buffer"; } + /* Main loop expects to start with the buffer unmapped. */ + this->ReleaseVideoPointer(); MarkWholeScreenDirty(); diff --git a/src/widgets/network_widget.h b/src/widgets/network_widget.h index 79d33fb067..2ed94d2849 100644 --- a/src/widgets/network_widget.h +++ b/src/widgets/network_widget.h @@ -96,12 +96,16 @@ enum NetworkLobbyWidgets { /** Widgets of the #NetworkClientListWindow class. */ enum ClientListWidgets { - WID_CL_PANEL, ///< Panel of the window. -}; - -/** Widgets of the #NetworkClientListPopupWindow class. */ -enum ClientListPopupWidgets { - WID_CLP_PANEL, ///< Panel of the window. + WID_CL_PANEL, ///< Panel of the window. + WID_CL_SERVER_SELECTOR, ///< Selector to hide the server frame. + WID_CL_SERVER_NAME, ///< Server name. + WID_CL_SERVER_NAME_EDIT, ///< Edit button for server name. + WID_CL_SERVER_VISIBILITY, ///< Server visibility. + WID_CL_CLIENT_NAME, ///< Client name. + WID_CL_CLIENT_NAME_EDIT, ///< Edit button for client name. + WID_CL_MATRIX, ///< Company/client list. + WID_CL_SCROLLBAR, ///< Scrollbar for company/client list. + WID_CL_COMPANY_JOIN, ///< Used for QueryWindow when a company has a password. }; /** Widgets of the #NetworkJoinStatusWindow class. */ diff --git a/src/window_type.h b/src/window_type.h index 74169e8b20..6bd572edb2 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -495,12 +495,6 @@ enum WindowClass { */ WC_CLIENT_LIST, - /** - * Popup for the client list; %Window numbers: - * - #ClientID = #ClientListPopupWidgets - */ - WC_CLIENT_LIST_POPUP, - /** * Network status window; %Window numbers: * - #WN_NETWORK_STATUS_WINDOW_JOIN = #NetworkJoinStatusWidgets