From 4e65ec1dc41875e592a7697b3c137e90f9b1c016 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 29 Jan 2023 09:28:24 +0100 Subject: [PATCH 01/42] Codechange: do not declare functions in blocks --- src/ai/ai_instance.cpp | 1 - src/ai/ai_scanner.cpp | 1 - src/aircraft.h | 1 + src/base_media_func.h | 4 ++-- src/company_cmd.cpp | 2 +- src/console_cmds.cpp | 8 +++----- src/core/pool_func.hpp | 4 ++-- src/depot_func.h | 1 + src/error.h | 5 +++++ src/error_gui.cpp | 4 +--- src/fileio.cpp | 4 ++-- src/fios.h | 3 +++ src/fontcache.cpp | 13 +++++++++---- src/framerate_type.h | 1 + src/industry_gui.cpp | 2 +- src/network/core/tcp_content.cpp | 1 - src/network/core/tcp_game.cpp | 1 - src/network/network.cpp | 3 --- src/network/network_client.cpp | 1 - src/network/network_content_gui.cpp | 5 +---- src/network/network_func.h | 1 + src/network/network_internal.h | 2 ++ src/newgrf_airporttiles.cpp | 3 +-- src/newgrf_airporttiles.h | 1 - src/newgrf_engine.h | 2 ++ src/newgrf_generic.h | 2 +- src/newgrf_gui.cpp | 1 - src/openttd.cpp | 7 +++---- src/openttd.h | 3 +++ src/order_cmd.cpp | 2 -- src/roadveh_cmd.h | 2 ++ src/saveload/afterload.cpp | 1 - src/saveload/saveload.cpp | 2 ++ src/saveload/saveload.h | 1 - src/script/api/script_airport.cpp | 5 ----- src/script/script_info.hpp | 3 +++ src/script/script_instance.cpp | 2 +- src/settings.cpp | 2 -- src/settings_table.cpp | 4 ++-- src/station_cmd.h | 3 +++ src/station_map.h | 3 ++- src/vehicle.cpp | 2 -- src/vehicle_gui.h | 1 + src/viewport_func.h | 1 + src/window.cpp | 4 +--- 45 files changed, 64 insertions(+), 61 deletions(-) diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index fbec89270f..4ffb10f8d0 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -80,7 +80,6 @@ void AIInstance::Died() void AIInstance::LoadDummyScript() { ScriptAllocatorScope alloc_scope(this->engine); - extern void Script_CreateDummy(HSQUIRRELVM vm, StringID string, const char *type); Script_CreateDummy(this->engine->GetVM(), STR_ERROR_AI_NO_AI_FOUND, "AI"); } diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp index 77a2c814a5..dc5eab49fa 100644 --- a/src/ai/ai_scanner.cpp +++ b/src/ai/ai_scanner.cpp @@ -35,7 +35,6 @@ void AIScannerInfo::Initialize() /* Create the dummy AI */ this->main_script = "%_dummy"; - extern void Script_CreateDummyInfo(HSQUIRRELVM vm, const char *type, const char *dir); Script_CreateDummyInfo(this->engine->GetVM(), "AI", "ai"); } diff --git a/src/aircraft.h b/src/aircraft.h index 842f9bde4e..71dd0fb46a 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -139,5 +139,6 @@ struct Aircraft FINAL : public SpecializedVehicle { void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result); Station *GetTargetAirportIfValid(const Aircraft *v); +void HandleMissingAircraftOrders(Aircraft *v); #endif /* AIRCRAFT_H */ diff --git a/src/base_media_func.h b/src/base_media_func.h index 557cec1e95..d2c8bcdcd9 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -15,6 +15,8 @@ #include "ini_type.h" #include "string_func.h" +extern void CheckExternalFiles(); + /** * Try to read a single piece of metadata and return false if it doesn't exist. * @param name the name of the item to fetch. @@ -227,8 +229,6 @@ bool BaseMedia::AddFile(const std::string &filename, size_t basepath_ template /* static */ bool BaseMedia::SetSet(const std::string &name) { - extern void CheckExternalFiles(); - if (name.empty()) { if (!BaseMedia::DetermineBestSet()) return false; CheckExternalFiles(); diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 58da230836..9b32d5614a 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -42,6 +42,7 @@ #include "safeguards.h" void ClearEnginesHiddenFlagOfCompany(CompanyID cid); +void UpdateObjectColours(const Company *c); CompanyID _local_company; ///< Company controlled by the human player at this client. Can also be #COMPANY_SPECTATOR. CompanyID _current_company; ///< Company currently doing an action. @@ -1029,7 +1030,6 @@ CommandCost CmdSetCompanyColour(DoCommandFlag flags, LiveryScheme scheme, bool p if (v->owner == _current_company) v->InvalidateNewGRFCache(); } - extern void UpdateObjectColours(const Company *c); UpdateObjectColours(c); } return CommandCost(); diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index c36df77014..36b9900c64 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1069,6 +1069,9 @@ DEF_CONSOLE_CMD(ConReturn) * default console commands ******************************/ extern bool CloseConsoleLogIfActive(); +extern const std::vector &GetAllGRFFiles(); +extern void ConPrintFramerate(); // framerate_gui.cpp +extern void ShowFramerateWindow(); DEF_CONSOLE_CMD(ConScript) { @@ -2213,7 +2216,6 @@ DEF_CONSOLE_CMD(ConNewGRFProfile) return true; } - extern const std::vector &GetAllGRFFiles(); const std::vector &files = GetAllGRFFiles(); /* "list" sub-command */ @@ -2338,8 +2340,6 @@ static void IConsoleDebugLibRegister() DEF_CONSOLE_CMD(ConFramerate) { - extern void ConPrintFramerate(); // framerate_gui.cpp - if (argc == 0) { IConsolePrint(CC_HELP, "Show frame rate and game speed information."); return true; @@ -2351,8 +2351,6 @@ DEF_CONSOLE_CMD(ConFramerate) DEF_CONSOLE_CMD(ConFramerateWindow) { - extern void ShowFramerateWindow(); - if (argc == 0) { IConsolePrint(CC_HELP, "Open the frame rate window."); return true; diff --git a/src/core/pool_func.hpp b/src/core/pool_func.hpp index 3b2d24b145..0857a5142b 100644 --- a/src/core/pool_func.hpp +++ b/src/core/pool_func.hpp @@ -14,6 +14,8 @@ #include "mem_func.hpp" #include "pool_type.hpp" +extern void NORETURN SlErrorCorruptFmt(const char *format, ...) WARN_FORMAT(1, 2); + /** * Helper for defining the method's signature. * @param type The return type of the method. @@ -154,8 +156,6 @@ DEFINE_POOL_METHOD(void *)::GetNew(size_t size) */ DEFINE_POOL_METHOD(void *)::GetNew(size_t size, size_t index) { - extern void NORETURN SlErrorCorruptFmt(const char *format, ...); - if (index >= Tmax_size) { SlErrorCorruptFmt("%s index " PRINTF_SIZE " out of range (" PRINTF_SIZE ")", this->name, index, Tmax_size); } diff --git a/src/depot_func.h b/src/depot_func.h index 42ac476ec3..bf0bdb3d93 100644 --- a/src/depot_func.h +++ b/src/depot_func.h @@ -14,6 +14,7 @@ #include "slope_func.h" void ShowDepotWindow(TileIndex tile, VehicleType type); +void InitDepotWindowBlockSizes(); void DeleteDepotHighlightOfVehicle(const Vehicle *v); diff --git a/src/error.h b/src/error.h index 06440c127c..21ccc93386 100644 --- a/src/error.h +++ b/src/error.h @@ -10,6 +10,7 @@ #ifndef ERROR_H #define ERROR_H +#include #include "strings_type.h" #include "company_type.h" #include "core/geometry_type.hpp" @@ -57,6 +58,10 @@ public: void CopyOutDParams(); }; +/** Define a queue with errors. */ +typedef std::list ErrorList; + +void ScheduleErrorMessage(ErrorList &datas); void ScheduleErrorMessage(const ErrorMessageData &data); void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel wl, int x = 0, int y = 0, const GRFFile *textref_stack_grffile = nullptr, uint textref_stack_size = 0, const uint32 *textref_stack = nullptr); diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 7e04db7c56..3e6d519b49 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -174,10 +174,8 @@ void ErrorMessageData::SetDParamStr(uint n, const std::string &str) this->SetDParamStr(n, str.c_str()); } -/** Define a queue with errors. */ -typedef std::list ErrorList; /** The actual queue with errors. */ -ErrorList _error_list; +static ErrorList _error_list; /** Whether the window system is initialized or not. */ bool _window_system_initialized = false; diff --git a/src/fileio.cpp b/src/fileio.cpp index 287f31f93c..ee12b25639 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -69,6 +69,8 @@ TarFileList _tar_filelist[NUM_SUBDIRS]; typedef std::map TarLinkList; static TarLinkList _tar_linklist[NUM_SUBDIRS]; ///< List of directory links +extern bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb); + /** * Checks whether the given search path is a valid search path * @param sp the search path to check @@ -1154,8 +1156,6 @@ static bool MatchesExtension(const char *extension, const char *filename) */ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, size_t basepath_length, bool recursive) { - extern bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb); - uint num = 0; struct stat sb; struct dirent *dirent; diff --git a/src/fios.h b/src/fios.h index c0e5162975..fc6f4bcef9 100644 --- a/src/fios.h +++ b/src/fios.h @@ -125,6 +125,9 @@ std::string FiosMakeSavegameName(const char *name); FiosType FiosGetSavegameListCallback(SaveLoadOperation fop, const std::string &file, const char *ext, char *title, const char *last); +void ScanScenarios(); +const char *FindScenario(const ContentInfo *ci, bool md5sum); + /** * A savegame name automatically numbered. */ diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 546199bc1f..bcb9364994 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -121,6 +121,15 @@ void SetFont(FontSize fontsize, const std::string& font, uint size, bool aa) if (_save_config) SaveToConfig(); } +#ifdef WITH_FREETYPE +extern void LoadFreeTypeFont(FontSize fs); +extern void UninitFreeType(); +#elif defined(_WIN32) +extern void LoadWin32Font(FontSize fs); +#elif defined(WITH_COCOA) +extern void LoadCoreTextFont(FontSize fs); +#endif + /** * (Re)initialize the font cache related things, i.e. load the non-sprite fonts. * @param monospace Whether to initialise the monospace or regular fonts. @@ -134,13 +143,10 @@ void InitFontCache(bool monospace) if (fc->HasParent()) delete fc; #ifdef WITH_FREETYPE - extern void LoadFreeTypeFont(FontSize fs); LoadFreeTypeFont(fs); #elif defined(_WIN32) - extern void LoadWin32Font(FontSize fs); LoadWin32Font(fs); #elif defined(WITH_COCOA) - extern void LoadCoreTextFont(FontSize fs); LoadCoreTextFont(fs); #endif } @@ -157,7 +163,6 @@ void UninitFontCache() } #ifdef WITH_FREETYPE - extern void UninitFreeType(); UninitFreeType(); #endif /* WITH_FREETYPE */ } diff --git a/src/framerate_type.h b/src/framerate_type.h index 1fa6e35ac8..f0116d8182 100644 --- a/src/framerate_type.h +++ b/src/framerate_type.h @@ -121,5 +121,6 @@ public: }; void ShowFramerateWindow(); +void ProcessPendingPerformanceMeasurements(); #endif /* FRAMERATE_TYPE_H */ diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index f973ee7ed2..8bec1d669f 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -71,6 +71,7 @@ struct CargoSuffix { char text[512]; ///< Cargo suffix text. }; +extern void GenerateIndustries(); static void ShowIndustryCargoesWindow(IndustryType id); /** @@ -598,7 +599,6 @@ public: if (Town::GetNumItems() == 0) { ShowErrorMessage(STR_ERROR_CAN_T_GENERATE_INDUSTRIES, STR_ERROR_MUST_FOUND_TOWN_FIRST, WL_INFO); } else { - extern void GenerateIndustries(); Backup old_generating_world(_generating_world, true, FILE_LINE); BasePersistentStorageArray::SwitchMode(PSM_ENTER_GAMELOOP); GenerateIndustries(); diff --git a/src/network/core/tcp_content.cpp b/src/network/core/tcp_content.cpp index 84573d5575..14108fb8ab 100644 --- a/src/network/core/tcp_content.cpp +++ b/src/network/core/tcp_content.cpp @@ -85,7 +85,6 @@ const char *ContentInfo::GetTextfile(TextfileType type) const break; case CONTENT_TYPE_SCENARIO: case CONTENT_TYPE_HEIGHTMAP: - extern const char *FindScenario(const ContentInfo *ci, bool md5sum); tmp = FindScenario(this, true); break; } diff --git a/src/network/core/tcp_game.cpp b/src/network/core/tcp_game.cpp index 2e99659133..ad94536aaa 100644 --- a/src/network/core/tcp_game.cpp +++ b/src/network/core/tcp_game.cpp @@ -42,7 +42,6 @@ NetworkRecvStatus NetworkGameSocketHandler::CloseConnection(bool error) { /* Clients drop back to the main menu */ if (!_network_server && _networking) { - extern void ClientNetworkEmergencySave(); // from network_client.cpp ClientNetworkEmergencySave(); _switch_mode = SM_MENU; _networking = false; diff --git a/src/network/network.cpp b/src/network/network.cpp index c3b4974c36..05e606993f 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -85,9 +85,6 @@ static_assert((int)NETWORK_COMPANY_NAME_LENGTH == MAX_LENGTH_COMPANY_NAME_CHARS /** The amount of clients connected */ byte _network_clients_connected = 0; -/* Some externs / forwards */ -extern void StateGameLoop(); - /** * Return whether there is any client connected or trying to connect at all. * @return whether we have any client activity diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index fea018a1c9..da434ad952 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -264,7 +264,6 @@ void ClientNetworkGameSocketHandler::ClientError(NetworkRecvStatus res) NetworkExecuteLocalCommandQueue(); - extern void StateGameLoop(); StateGameLoop(); /* Check if we are in sync! */ diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index f7a812b11d..1426cd77ec 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -21,6 +21,7 @@ #include "../querystring_gui.h" #include "../core/geometry_func.hpp" #include "../textfile_gui.h" +#include "../fios.h" #include "network_content_gui.h" @@ -263,7 +264,6 @@ public: case CONTENT_TYPE_SCENARIO: case CONTENT_TYPE_HEIGHTMAP: - extern void ScanScenarios(); ScanScenarios(); InvalidateWindowData(WC_SAVELOAD, 0, 0); break; @@ -344,8 +344,6 @@ class NetworkContentListWindow : public Window, ContentCallback { /** Search external websites for content */ void OpenExternalSearch() { - extern void OpenBrowser(const char *url); - char url[1024]; const char *last = lastof(url); @@ -854,7 +852,6 @@ public: case WID_NCL_OPEN_URL: if (this->selected != nullptr) { - extern void OpenBrowser(const char *url); OpenBrowser(this->selected->url.c_str()); } break; diff --git a/src/network/network_func.h b/src/network/network_func.h index 3ac4ae05f5..52c508a75b 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -85,6 +85,7 @@ uint NetworkServerKickOrBanIP(ClientID client_id, bool ban, const std::string &r uint NetworkServerKickOrBanIP(const std::string &ip, bool ban, const std::string &reason); void NetworkInitChatMessage(); +void NetworkReInitChatBoxSize(); void CDECL NetworkAddChatMessage(TextColour colour, uint duration, const std::string &message); void NetworkUndrawChatMessage(); void NetworkChatMessageLoop(); diff --git a/src/network/network_internal.h b/src/network/network_internal.h index 58c99867c2..23c1224d17 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -138,4 +138,6 @@ std::string_view ParseCompanyFromConnectionString(const std::string &connection_ NetworkAddress ParseConnectionString(const std::string &connection_string, uint16 default_port); std::string NormalizeConnectionString(const std::string &connection_string, uint16 default_port); +void ClientNetworkEmergencySave(); + #endif /* NETWORK_INTERNAL_H */ diff --git a/src/newgrf_airporttiles.cpp b/src/newgrf_airporttiles.cpp index 91ae79f2d8..b34992fcf0 100644 --- a/src/newgrf_airporttiles.cpp +++ b/src/newgrf_airporttiles.cpp @@ -23,6 +23,7 @@ #include "safeguards.h" +extern uint32 GetRelativePosition(TileIndex tile, TileIndex ind_tile); AirportTileSpec AirportTileSpec::tiles[NUM_AIRPORTTILES]; @@ -162,8 +163,6 @@ static uint32 GetAirportTileIDAtOffset(TileIndex tile, const Station *st, uint32 { assert(this->st != nullptr); - extern uint32 GetRelativePosition(TileIndex tile, TileIndex ind_tile); - switch (variable) { /* Terrain type */ case 0x41: return GetTerrainType(this->tile); diff --git a/src/newgrf_airporttiles.h b/src/newgrf_airporttiles.h index 37460622d4..e8b40468ec 100644 --- a/src/newgrf_airporttiles.h +++ b/src/newgrf_airporttiles.h @@ -82,7 +82,6 @@ private: friend void AirportTileOverrideManager::SetEntitySpec(const AirportTileSpec *airpts); }; -StationGfx GetTranslatedAirportTileID(StationGfx gfx); void AnimateAirportTile(TileIndex tile); void AirportTileAnimationTrigger(Station *st, TileIndex tile, AirpAnimationTrigger trigger, CargoID cargo_type = CT_INVALID); void AirportAnimationTrigger(Station *st, AirpAnimationTrigger trigger, CargoID cargo_type = CT_INVALID); diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h index eb6a51040e..2b721ebcb1 100644 --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -121,4 +121,6 @@ void CommitVehicleListOrderChanges(); EngineID GetNewEngineID(const GRFFile *file, VehicleType type, uint16 internal_id); +void FillNewGRFVehicleCache(const Vehicle *v); + #endif /* NEWGRF_ENGINE_H */ diff --git a/src/newgrf_generic.h b/src/newgrf_generic.h index 0d4c8c1411..9837a3692c 100644 --- a/src/newgrf_generic.h +++ b/src/newgrf_generic.h @@ -48,6 +48,7 @@ void ResetGenericCallbacks(); void AddGenericCallback(uint8 feature, const GRFFile *file, const SpriteGroup *group); uint16 GetAiPurchaseCallbackResult(uint8 feature, CargoID cargo_type, uint8 default_selection, IndustryType src_industry, IndustryType dst_industry, uint8 distance, AIConstructionEvent event, uint8 count, uint8 station_size, const GRFFile **file); +void AmbientSoundEffectCallback(TileIndex tile); /** Play an ambient sound effect for an empty tile. */ static inline void AmbientSoundEffect(TileIndex tile) @@ -55,7 +56,6 @@ static inline void AmbientSoundEffect(TileIndex tile) /* Only run callback if enabled. */ if (!HasGrfMiscBit(GMB_AMBIENT_SOUND_CALLBACK)) return; - extern void AmbientSoundEffectCallback(TileIndex tile); AmbientSoundEffectCallback(tile); } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 820aa10d03..d4f8a8996d 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -950,7 +950,6 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { case WID_NS_OPEN_URL: { const GRFConfig *c = (this->avail_sel == nullptr) ? this->active_sel : this->avail_sel; - extern void OpenBrowser(const char *url); OpenBrowser(c->GetURL()); break; } diff --git a/src/openttd.cpp b/src/openttd.cpp index 0274063b60..010b366632 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -89,7 +89,10 @@ void ResetMusic(); void CallWindowGameTickEvent(); bool HandleBootstrap(); +extern void AfterLoadCompanyStats(); extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY); +extern void OSOpenBrowser(const char *url); +extern void RebuildTownCaches(); extern void ShowOSErrorBox(const char *buf, bool system); extern std::string _config_file; @@ -402,7 +405,6 @@ void OpenBrowser(const char *url) /* Make sure we only accept urls that are sure to open a browser. */ if (strstr(url, "http://") != url && strstr(url, "https://") != url) return; - extern void OSOpenBrowser(const char *url); OSOpenBrowser(url); } @@ -1161,7 +1163,6 @@ static void CheckCaches() old_town_caches.push_back(t->cache); } - extern void RebuildTownCaches(); RebuildTownCaches(); RebuildSubsidisedSourceAndDestinationCache(); @@ -1177,7 +1178,6 @@ static void CheckCaches() std::vector old_infrastructure; for (const Company *c : Company::Iterate()) old_infrastructure.push_back(c->infrastructure); - extern void AfterLoadCompanyStats(); AfterLoadCompanyStats(); i = 0; @@ -1198,7 +1198,6 @@ static void CheckCaches() } for (Vehicle *v : Vehicle::Iterate()) { - extern void FillNewGRFVehicleCache(const Vehicle *v); if (v != v->First() || v->vehstatus & VS_CRASHED || !v->IsPrimaryVehicle()) continue; uint length = 0; diff --git a/src/openttd.h b/src/openttd.h index 6473168ee1..1534016fd6 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -79,10 +79,13 @@ void AskExitGame(); void AskExitToGameMenu(); int openttd_main(int argc, char *argv[]); +void StateGameLoop(); void HandleExitGameRequest(); void SwitchToMode(SwitchMode new_mode); bool RequestNewGRFScan(struct NewGRFScanCallback *callback = nullptr); +void OpenBrowser(const char *url); + #endif /* OPENTTD_H */ diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 5cde853e42..5ce15f93e0 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -1996,7 +1996,6 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool Aircraft *a = Aircraft::From(v); if (a->state == FLYING && a->targetairport != closestDepot.destination) { /* The aircraft is now heading for a different hangar than the next in the orders */ - extern void AircraftNextAirportPos_and_Order(Aircraft *a); AircraftNextAirportPos_and_Order(a); } } @@ -2138,7 +2137,6 @@ bool ProcessOrders(Vehicle *v) if (order == nullptr || (v->type == VEH_AIRCRAFT && !CheckForValidOrders(v))) { if (v->type == VEH_AIRCRAFT) { /* Aircraft do something vastly different here, so handle separately */ - extern void HandleMissingAircraftOrders(Aircraft *v); HandleMissingAircraftOrders(Aircraft::From(v)); return false; } diff --git a/src/roadveh_cmd.h b/src/roadveh_cmd.h index b168675f98..67fe08bb79 100644 --- a/src/roadveh_cmd.h +++ b/src/roadveh_cmd.h @@ -15,6 +15,8 @@ #include "vehicle_type.h" bool RoadVehLeaveDepot(RoadVehicle *v, bool first); +bool IndividualRoadVehicleController(RoadVehicle *v, const RoadVehicle *prev); +bool RoadVehiclesAreBuilt(); CommandCost CmdBuildRoadVehicle(DoCommandFlag flags, TileIndex tile, const Engine *e, Vehicle **v); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 7bbb2f8456..a131e6c635 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2941,7 +2941,6 @@ bool AfterLoadGame() RoadVehicle *u = v; RoadVehicle *prev = nullptr; for (uint sf : skip_frames) { - extern bool IndividualRoadVehicleController(RoadVehicle *v, const RoadVehicle *prev); if (sf >= cur_skip) IndividualRoadVehicleController(u, prev); prev = u; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index ebb8e10223..604c6292e1 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -367,6 +367,8 @@ void NORETURN SlErrorCorrupt(const char *msg) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, msg); } +void NORETURN SlErrorCorruptFmt(const char *format, ...) WARN_FORMAT(1, 2); + /** * Issue an SlErrorCorrupt with a format string. * @param format format string diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index ca099cafdc..ad082ef590 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -1134,7 +1134,6 @@ std::vector SlCompatTableHeader(const SaveLoadTable &slt, const SaveLo void SlObject(void *object, const SaveLoadTable &slt); void NORETURN SlError(StringID string, const char *extra_msg = nullptr); void NORETURN SlErrorCorrupt(const char *msg); -void NORETURN SlErrorCorruptFmt(const char *format, ...) WARN_FORMAT(1, 2); bool SaveloadCrashWithMissingNewGRFs(); diff --git a/src/script/api/script_airport.cpp b/src/script/api/script_airport.cpp index 4a4c3b99b2..c8bdea2835 100644 --- a/src/script/api/script_airport.cpp +++ b/src/script/api/script_airport.cpp @@ -128,9 +128,6 @@ /* static */ int ScriptAirport::GetNoiseLevelIncrease(TileIndex tile, AirportType type) { - extern Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint &mindist); - extern uint8 GetAirportNoiseLevelForDistance(const AirportSpec *as, uint distance); - if (!::IsValidTile(tile)) return -1; if (!IsAirportInformationAvailable(type)) return -1; @@ -149,8 +146,6 @@ /* static */ TownID ScriptAirport::GetNearestTown(TileIndex tile, AirportType type) { - extern Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint &mindist); - if (!::IsValidTile(tile)) return INVALID_TOWN; if (!IsAirportInformationAvailable(type)) return INVALID_TOWN; diff --git a/src/script/script_info.hpp b/src/script/script_info.hpp index c2e952b821..61af366462 100644 --- a/src/script/script_info.hpp +++ b/src/script/script_info.hpp @@ -164,4 +164,7 @@ private: class ScriptScanner *scanner; ///< ScriptScanner object that was used to scan this script info. }; +void Script_CreateDummyInfo(HSQUIRRELVM vm, const char *type, const char *dir); +void Script_CreateDummy(HSQUIRRELVM vm, StringID string, const char *type); + #endif /* SCRIPT_INFO_HPP */ diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index 9bd2d78718..7375f65e3d 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -12,6 +12,7 @@ #include "../saveload/saveload.h" #include "../script/squirrel_class.hpp" +#include "../script/squirrel_std.hpp" #include "script_fatalerror.hpp" #include "script_storage.hpp" @@ -110,7 +111,6 @@ void ScriptInstance::Initialize(const char *main_script, const char *instance_na void ScriptInstance::RegisterAPI() { - extern void squirrel_register_std(Squirrel *engine); squirrel_register_std(this->engine); } diff --git a/src/settings.cpp b/src/settings.cpp index edf4e2441d..bc3db783fb 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -58,7 +58,6 @@ std::string _config_file; ///< Configuration file of OpenTTD. std::string _private_file; ///< Private configuration file of OpenTTD. std::string _secrets_file; ///< Secrets configuration file of OpenTTD. -typedef std::list ErrorList; static ErrorList _settings_error_list; ///< Errors while loading minimal settings. /** @@ -1250,7 +1249,6 @@ void LoadFromConfig(bool startup) DebugReconsiderSendRemoteMessages(); /* Display scheduled errors */ - extern void ScheduleErrorMessage(ErrorList &datas); ScheduleErrorMessage(_settings_error_list); if (FindWindowById(WC_ERRMSG, 0) == nullptr) ShowFirstError(); } diff --git a/src/settings_table.cpp b/src/settings_table.cpp index ca1bcad3a7..ef910a3600 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -42,7 +42,9 @@ #include "ship.h" #include "smallmap_gui.h" #include "roadveh.h" +#include "roadveh_cmd.h" #include "vehicle_func.h" +#include "viewport_func.h" #include "void_map.h" #include "table/strings.h" @@ -258,7 +260,6 @@ static void TownFoundingChanged(int32 new_value) static void ZoomMinMaxChanged(int32 new_value) { - extern void ConstrainAllViewportsZoom(); ConstrainAllViewportsZoom(); GfxClearSpriteCache(); if (_settings_client.gui.zoom_min > _gui_zoom) { @@ -323,7 +324,6 @@ static void MaxNoAIsChange(int32 new_value) */ static bool CheckRoadSide(int32 &new_value) { - extern bool RoadVehiclesAreBuilt(); return _game_mode == GM_MENU || !RoadVehiclesAreBuilt(); } diff --git a/src/station_cmd.h b/src/station_cmd.h index 7dc23c68dc..84e17ed59f 100644 --- a/src/station_cmd.h +++ b/src/station_cmd.h @@ -15,6 +15,9 @@ enum StationClassID : byte; +extern Town *AirportGetNearestTown(const struct AirportSpec *as, const TileIterator &it, uint &mindist); +extern uint8 GetAirportNoiseLevelForDistance(const struct AirportSpec *as, uint distance); + CommandCost CmdBuildAirport(DoCommandFlag flags, TileIndex tile, byte airport_type, byte layout, StationID station_to_join, bool allow_adjacent); CommandCost CmdBuildDock(DoCommandFlag flags, TileIndex tile, StationID station_to_join, bool adjacent); CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailType rt, Axis axis, byte numtracks, byte plat_len, StationClassID spec_class, byte spec_index, StationID station_to_join, bool adjacent); diff --git a/src/station_map.h b/src/station_map.h index dbb00ef2f5..d38ffe337f 100644 --- a/src/station_map.h +++ b/src/station_map.h @@ -235,6 +235,8 @@ static inline bool IsDriveThroughStopTile(TileIndex t) return IsRoadStopTile(t) && GetStationGfx(t) >= GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET; } +StationGfx GetTranslatedAirportTileID(StationGfx gfx); + /** * Get the station graphics of this airport tile * @param t the tile to query @@ -244,7 +246,6 @@ static inline bool IsDriveThroughStopTile(TileIndex t) static inline StationGfx GetAirportGfx(TileIndex t) { assert(IsAirport(t)); - extern StationGfx GetTranslatedAirportTileID(StationGfx gfx); return GetTranslatedAirportTileID(GetStationGfx(t)); } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index eb565a06c3..937625e884 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -871,7 +871,6 @@ void Vehicle::PreDestructor() DeleteVehicleOrders(this); DeleteDepotHighlightOfVehicle(this); - extern void StopGlobalFollowVehicle(const Vehicle *v); StopGlobalFollowVehicle(this); ReleaseDisastersTargetingVehicle(this->index); @@ -2449,7 +2448,6 @@ CommandCost Vehicle::SendToDepot(DoCommandFlag flags, DepotCommand command) Aircraft *a = Aircraft::From(this); if (a->state == FLYING && a->targetairport != closestDepot.destination) { /* The aircraft is now heading for a different hangar than the next in the orders */ - extern void AircraftNextAirportPos_and_Order(Aircraft *a); AircraftNextAirportPos_and_Order(a); } } diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index 1c66e9671a..3a4786fca6 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -112,6 +112,7 @@ bool VehicleClicked(const GUIVehicleGroup &vehgroup); void StartStopVehicle(const Vehicle *v, bool texteffect); Vehicle *CheckClickOnVehicle(const struct Viewport *vp, int x, int y); +void StopGlobalFollowVehicle(const Vehicle *v); void DrawVehicleImage(const Vehicle *v, const Rect &r, VehicleID selection, EngineImageType image_type, int skip); void SetMouseCursorVehicle(const Vehicle *v, EngineImageType image_type); diff --git a/src/viewport_func.h b/src/viewport_func.h index 16a8fdc5ec..20bf5837c1 100644 --- a/src/viewport_func.h +++ b/src/viewport_func.h @@ -31,6 +31,7 @@ bool MarkAllViewportsDirty(int left, int top, int right, int bottom); bool DoZoomInOutWindow(ZoomStateChange how, Window *w); void ZoomInOrOutToCursorWindow(bool in, Window * w); +void ConstrainAllViewportsZoom(); Point GetTileZoomCenterWindow(bool in, Window * w); void FixTitleGameZoom(int zoom_adjust = 0); void HandleZoomMessage(Window *w, const Viewport *vp, byte widget_zoom_in, byte widget_zoom_out); diff --git a/src/window.cpp b/src/window.cpp index 6e48571d86..0adcef17be 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -18,6 +18,7 @@ #include "blitter/factory.hpp" #include "zoom_func.h" #include "vehicle_base.h" +#include "depot_func.h" #include "window_func.h" #include "tilehighlight_func.h" #include "network/network.h" @@ -3090,7 +3091,6 @@ void UpdateWindows() PerformanceMeasurer framerate(PFE_DRAWING); PerformanceAccumulator::Reset(PFE_DRAWWORLD); - extern void ProcessPendingPerformanceMeasurements(); ProcessPendingPerformanceMeasurements(); CallWindowRealtimeTickEvent(delta_ms); @@ -3386,7 +3386,6 @@ void ReInitAllWindows(bool zoom_changed) NWidgetLeaf::InvalidateDimensionCache(); // Reset cached sizes of several widgets. NWidgetScrollbar::InvalidateDimensionCache(); - extern void InitDepotWindowBlockSizes(); InitDepotWindowBlockSizes(); /* When _gui_zoom has changed, we need to resize toolbar and statusbar first, @@ -3398,7 +3397,6 @@ void ReInitAllWindows(bool zoom_changed) ReInitWindow(w, zoom_changed); } - void NetworkReInitChatBoxSize(); NetworkReInitChatBoxSize(); /* Make sure essential parts of all windows are visible */ From b82bcac3cd41d3868f38ecc5ee7e987b49910b23 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 29 Jan 2023 16:51:32 +0000 Subject: [PATCH 02/42] Fix #10419: Water infrastructure accounting when building ship depots --- src/water_cmd.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index c2bd4a86ef..6db1c62e06 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -136,11 +136,14 @@ CommandCost CmdBuildShipDepot(DoCommandFlag flags, TileIndex tile, Axis axis) Depot *depot = new Depot(tile); depot->build_date = _date; - if (wc1 == WATER_CLASS_CANAL || wc2 == WATER_CLASS_CANAL) { - /* Update infrastructure counts after the unconditional clear earlier. */ - Company::Get(_current_company)->infrastructure.water += wc1 == WATER_CLASS_CANAL && wc2 == WATER_CLASS_CANAL ? 2 : 1; - } - Company::Get(_current_company)->infrastructure.water += 2 * LOCK_DEPOT_TILE_FACTOR; + uint new_water_infra = 2 * LOCK_DEPOT_TILE_FACTOR; + /* Update infrastructure counts after the tile clears earlier. + * Clearing object tiles may result in water tiles which are already accounted for in the water infrastructure total. + * See: MakeWaterKeepingClass() */ + if (wc1 == WATER_CLASS_CANAL && !(HasTileWaterClass(tile) && GetWaterClass(tile) == WATER_CLASS_CANAL && IsTileOwner(tile, _current_company))) new_water_infra++; + if (wc2 == WATER_CLASS_CANAL && !(HasTileWaterClass(tile2) && GetWaterClass(tile2) == WATER_CLASS_CANAL && IsTileOwner(tile2, _current_company))) new_water_infra++; + + Company::Get(_current_company)->infrastructure.water += new_water_infra; DirtyCompanyInfrastructureWindows(_current_company); MakeShipDepot(tile, _current_company, depot->index, DEPOT_PART_NORTH, axis, wc1); From 9c915f05ecbbb065b1d5b3c8d9278b4d07e0aed2 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 29 Jan 2023 17:09:10 +0000 Subject: [PATCH 03/42] Fix: Water infrastructure accounting when building docks --- src/station_cmd.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index ace90dc029..92a5faae4e 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2535,14 +2535,17 @@ CommandCost CmdBuildDock(DoCommandFlag flags, TileIndex tile, StationID station_ if (flags & DC_EXEC) { st->ship_station.Add(tile); - st->ship_station.Add(tile + TileOffsByDiagDir(direction)); + TileIndex flat_tile = tile + TileOffsByDiagDir(direction); + st->ship_station.Add(flat_tile); st->AddFacility(FACIL_DOCK, tile); st->rect.BeforeAddRect(dock_area.tile, dock_area.w, dock_area.h, StationRect::ADD_TRY); /* If the water part of the dock is on a canal, update infrastructure counts. - * This is needed as we've unconditionally cleared that tile before. */ - if (wc == WATER_CLASS_CANAL) { + * This is needed as we've cleared that tile before. + * Clearing object tiles may result in water tiles which are already accounted for in the water infrastructure total. + * See: MakeWaterKeepingClass() */ + if (wc == WATER_CLASS_CANAL && !(HasTileWaterClass(flat_tile) && GetWaterClass(flat_tile) == WATER_CLASS_CANAL && IsTileOwner(flat_tile, _current_company))) { Company::Get(st->owner)->infrastructure.water++; } Company::Get(st->owner)->infrastructure.station += 2; From 07b40c02fe595ac30982429ef6019227f6026449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sun, 29 Jan 2023 23:27:29 +0100 Subject: [PATCH 04/42] Fix #10361, fe30f66: Don't try to give saved data to a dead script (#10433) --- src/script/script_instance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index 7375f65e3d..c02003a8a7 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -691,7 +691,7 @@ void ScriptInstance::LoadOnStack(ScriptData *data) { ScriptObject::ActiveInstance active(this); - if (data == nullptr) return; + if (this->IsDead() || data == nullptr) return; HSQUIRRELVM vm = this->engine->GetVM(); From 43657cf65d63c4cfa55dfec85a59c55cc620a613 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 30 Jan 2023 18:45:30 +0000 Subject: [PATCH 05/42] Update: Translations from eints chinese (traditional): 9 changes by wpi3 --- src/lang/traditional_chinese.txt | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 4754206744..1bfec5e00a 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -257,7 +257,7 @@ STR_TOOLTIP_RESIZE :{BLACK}點選 STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}切換大/小視窗 STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}捲軸 - 上下捲動清單 STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}捲軸 - 左右捲動清單 -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}拆卸位於土地上的建築物等。按 Ctrl 以對角線選擇區域。Shift切換建築或顯示預估成本。 +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}拆卸位於土地上的建築物等。按 Ctrl 以對角線選擇區域。按 Shift 可切換建築或顯示預估成本。 # Show engines button ###length VEHICLE_TYPES @@ -386,7 +386,7 @@ 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_PLANT_TREES :{BLACK}植樹。按 Ctrl 以對角線選擇區域。按 Shift 可切換種植/顯示預估的種植費用 STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}放置標誌 STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}放置物件。按 Ctrl 以對角線選擇區域。按 Shift 可切換興建/顯示預估的興建費用。 @@ -1929,7 +1929,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :設使有交通 STR_CONFIG_SETTING_DISTRIBUTION_MAIL :郵件分配方式:{STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :設使有交通路線連接甲、乙兩站。「對稱」指甲站往乙站的郵件數量與乙站往甲站的郵件數量大致相同。「不對稱」指任何一站往另一站的郵件數量皆由系統隨意決定。「手動」指系統不會自動分配郵件的目的地。 STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :裝甲貨物分配方式:{STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :「裝甲貨物」包括溫帶場景的「貴重物品」、寒帶場景的「金塊」及亞熱帶場景的「鑽石」。使用 NewGRF 可能會改變以上設定。{} 設使有交通路線連接甲、乙兩站。「對稱」指甲站往乙站的郵件數量與乙站往甲站的裝甲貨物數量大致相同。「不對稱」指任何一站往另一站的裝甲貨物數量皆由系統隨意決定。「手動」指系統不會自動分配裝甲貨物的目的地。{} 建議在溫帶及亞熱帶場景應使用「對稱」,因為銀行會互相發送貴重物品或鑽石;而在寒帶場景應使用「不對稱」,因為銀行不會把金塊送回礦場。 +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :「裝甲貨物」包括溫帶場景的「貴重物品」、寒帶場景的「金塊」及亞熱帶場景的「鑽石」。使用 NewGRF 可能會改變以上設定。設使有交通路線連接甲、乙兩站,則「對稱」指甲站往乙站的郵件數量與乙站往甲站的裝甲貨物數量大致相同;「不對稱」指任何一站往另一站的裝甲貨物數量皆由系統隨意決定;「手動」指系統不會自動分配裝甲貨物的目的地。建議在亞熱帶及寒帶場景中應使用「不對稱」或「手動」,因為銀行只會接收貨物。在溫帶場景中建議使用「對稱」,因為銀行之間會互相傳送貴重物品。 STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :其他貨物分配方式:{STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :如設定此值為「不對稱」,則任何一站往另一站的貨物數量皆由系統隨意決定。如設定此值為「手動」,則系統不會自動分配貨物的目的地。 ###length 3 @@ -2698,6 +2698,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}增加 ( STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}選擇鐵路橋樑 STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}選擇道路橋樑 STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}選擇橋樑 - 點選想建的橋樑即可建造 +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :吊橋,鋼製 STR_BRIDGE_NAME_GIRDER_STEEL :桁橋,鋼製 STR_BRIDGE_NAME_CANTILEVER_STEEL :懸臂橋,鋼製 @@ -2798,7 +2802,7 @@ STR_STATION_BUILD_NOISE :{BLACK}產生 # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}地形 -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}下降土地上的一角。以拖曳來下降第一個選定的角落並平面化選定的區域到新角落的高度。Ctrl 以對角線選定區域。Shift切換建造/顯示成本估算。 +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}下降土地上的一角。以拖曳來下降第一個選定的角落並平面化選定的區域到新角落的高度。按 Ctrl 以對角線選定區域。按 Shift 可切換建造/顯示成本估算。 STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}上昇土地上的一角。以拖曳來上昇第一個選定的角落並平面化選定的區域到新角落的高度。按 Ctrl 以對角線選定區域。按 Shift 以切換建造/顯示成本估算。 STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}將一片區域正平到首選高度。按 Ctrl 以對角線選擇區域。按 Shift 查看造價預算 STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}購買土地供將來使用。按 Ctrl 以對角線選擇區域。按 Shift 可切換購買/顯示預估的購買費用 @@ -2817,7 +2821,7 @@ STR_OBJECT_CLASS_TRNS :天線塔 STR_PLANT_TREE_CAPTION :{WHITE}樹木 STR_PLANT_TREE_TOOLTIP :{BLACK}選擇要種植的樹種。無論您選擇了甚麼樹種,如所點擊的方格本身已經有樹,遊戲會在該方格加上一棵隨機樹種的樹 STR_TREES_RANDOM_TYPE :{BLACK}隨機種類樹木 -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}種植隨機種類樹木。按 Shift 可切換種植/顯示預估的種植費用 +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}種植隨機種類樹木。按 Ctrl 以對角線選擇區域。按 Shift 可切換種植/顯示預估的種植費用。 STR_TREES_RANDOM_TREES_BUTTON :{BLACK}隨機樹種 STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}在場景中隨機植樹 STR_TREES_MODE_NORMAL_BUTTON :{BLACK}正常 From f5394ed2ef32efdccb6312dd830d827e67d1311d Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 22 Jan 2023 18:34:35 +0100 Subject: [PATCH 06/42] Change: [NewGRF] Extend the D8xx (DCxx) string area up to FFFF. This adds the Exxx and Fxxx blocks to the usable range for NewGRF local strings. TTDPatch uses these ranges for internal strings, but as we don't support any of them anyway, it is "free" real estate for us. --- src/newgrf.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 7898afe739..2625d1d108 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -556,10 +556,10 @@ static StringID TTDPStringIDToOTTDStringIDMapping(StringID str) */ StringID MapGRFStringID(uint32 grfid, StringID str) { - if (IsInsideMM(str, 0xD800, 0xE000)) { + if (IsInsideMM(str, 0xD800, 0x10000)) { /* General text provided by NewGRF. * In the specs this is called the 0xDCxx range (misc persistent texts), - * but we meanwhile extended the range to 0xD800-0xDFFF. + * but we meanwhile extended the range to 0xD800-0xFFFF. * Note: We are not involved in the "persistent" business, since we do not store * any NewGRF strings in savegames. */ return GetGRFStringID(grfid, str); @@ -6079,7 +6079,7 @@ static void FeatureNewName(ByteReader *buf) break; default: - if (IsInsideMM(id, 0xD000, 0xD400) || IsInsideMM(id, 0xD800, 0xE000)) { + if (IsInsideMM(id, 0xD000, 0xD400) || IsInsideMM(id, 0xD800, 0x10000)) { AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, true, name, STR_UNDEFINED); break; } @@ -8465,7 +8465,8 @@ static void InitializeGRFSpecial() | (1U << 0x1F); // any switch is on _ttdpatch_flags[4] = (1U << 0x00) // larger persistent storage - | ((_settings_game.economy.inflation ? 1U : 0U) << 0x01); // inflation is on + | ((_settings_game.economy.inflation ? 1U : 0U) << 0x01) // inflation is on + | (1U << 0x02); // extended string range } /** Reset and clear all NewGRF stations */ From 2d730760563662d7c4fb1e631763d7737e70a3f3 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 22 Jan 2023 18:56:36 +0100 Subject: [PATCH 07/42] Add: [NewGRF] Second vehicle property for additional callback flags. --- src/engine_type.h | 8 ++++---- src/newgrf.cpp | 24 ++++++++++++++++++++---- src/table/newgrf_debug_data.h | 1 + 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/engine_type.h b/src/engine_type.h index aac6a38eee..f3cd5aacfd 100644 --- a/src/engine_type.h +++ b/src/engine_type.h @@ -150,10 +150,10 @@ struct EngineInfo { CargoID cargo_type; CargoTypes refit_mask; byte refit_cost; - byte misc_flags; ///< Miscellaneous flags. @see EngineMiscFlags - byte callback_mask; ///< Bitmask of vehicle callbacks that have to be called - int8 retire_early; ///< Number of years early to retire vehicle - StringID string_id; ///< Default name of engine + byte misc_flags; ///< Miscellaneous flags. @see EngineMiscFlags + uint16 callback_mask; ///< Bitmask of vehicle callbacks that have to be called + int8 retire_early; ///< Number of years early to retire vehicle + StringID string_id; ///< Default name of engine uint16 cargo_age_period; ///< Number of ticks before carried cargo is aged. EngineID variant_id; ///< Engine variant ID. If set, will be treated specially in purchase lists. ExtraEngineFlags extra_flags; diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 2625d1d108..84c8cab467 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1237,7 +1237,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop } case 0x1E: // Callback - ei->callback_mask = buf->ReadByte(); + SB(ei->callback_mask, 0, 8, buf->ReadByte()); break; case PROP_TRAIN_TRACTIVE_EFFORT: // 0x1F Tractive effort coefficient @@ -1336,6 +1336,10 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop ei->extra_flags = static_cast(buf->ReadDWord()); break; + case 0x31: // Callback additional mask + SB(ei->callback_mask, 8, 8, buf->ReadByte()); + break; + default: ret = CommonVehicleChangeInfo(ei, prop, buf); break; @@ -1454,7 +1458,7 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop } case 0x17: // Callback mask - ei->callback_mask = buf->ReadByte(); + SB(ei->callback_mask, 0, 8, buf->ReadByte()); break; case PROP_ROADVEH_TRACTIVE_EFFORT: // Tractive effort coefficient in 1/256. @@ -1538,6 +1542,10 @@ static ChangeInfoResult RoadVehicleChangeInfo(uint engine, int numinfo, int prop ei->extra_flags = static_cast(buf->ReadDWord()); break; + case 0x28: // Callback additional mask + SB(ei->callback_mask, 8, 8, buf->ReadByte()); + break; + default: ret = CommonVehicleChangeInfo(ei, prop, buf); break; @@ -1638,7 +1646,7 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop } case 0x12: // Callback mask - ei->callback_mask = buf->ReadByte(); + SB(ei->callback_mask, 0, 8, buf->ReadByte()); break; case 0x13: // Refit cost @@ -1718,6 +1726,10 @@ static ChangeInfoResult ShipVehicleChangeInfo(uint engine, int numinfo, int prop ei->extra_flags = static_cast(buf->ReadDWord()); break; + case 0x22: // Callback additional mask + SB(ei->callback_mask, 8, 8, buf->ReadByte()); + break; + default: ret = CommonVehicleChangeInfo(ei, prop, buf); break; @@ -1814,7 +1826,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int } case 0x14: // Callback mask - ei->callback_mask = buf->ReadByte(); + SB(ei->callback_mask, 0, 8, buf->ReadByte()); break; case 0x15: // Refit cost @@ -1880,6 +1892,10 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int ei->extra_flags = static_cast(buf->ReadDWord()); break; + case 0x22: // Callback additional mask + SB(ei->callback_mask, 8, 8, buf->ReadByte()); + break; + default: ret = CommonVehicleChangeInfo(ei, prop, buf); break; diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index e35b2eecbf..f21d2df4d4 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -42,6 +42,7 @@ static const NICallback _nic_vehicles[] = { NICV(CBID_VEHICLE_SOUND_EFFECT, CBM_VEHICLE_SOUND_EFFECT), NICV(CBID_VEHICLE_AUTOREPLACE_SELECTION, CBM_NO_BIT), NICV(CBID_VEHICLE_MODIFY_PROPERTY, CBM_NO_BIT), + NICV(CBID_VEHICLE_NAME, CBM_VEHICLE_NAME), NIC_END() }; From 05ed9f56fd6c24b58914962827e537071e24cdd4 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 22 Jan 2023 22:06:48 +0100 Subject: [PATCH 08/42] Feature: [NewGRF] Engine name callback. --- src/aircraft_gui.cpp | 2 +- src/autoreplace_gui.cpp | 2 +- src/build_vehicle_gui.cpp | 9 +++++---- src/engine.cpp | 2 +- src/engine_gui.cpp | 2 +- src/engine_type.h | 16 ++++++++++++++++ src/newgrf_callbacks.h | 4 ++++ src/news_gui.cpp | 2 +- src/roadveh_gui.cpp | 2 +- src/ship_gui.cpp | 2 +- src/strings.cpp | 30 ++++++++++++++++++++++++++---- src/train_gui.cpp | 4 ++-- 12 files changed, 60 insertions(+), 17 deletions(-) diff --git a/src/aircraft_gui.cpp b/src/aircraft_gui.cpp index 421ddaf33b..4192fd2473 100644 --- a/src/aircraft_gui.cpp +++ b/src/aircraft_gui.cpp @@ -34,7 +34,7 @@ void DrawAircraftDetails(const Aircraft *v, const Rect &r) int y = r.top; for (const Aircraft *u = v; u != nullptr; u = u->Next()) { if (u->IsNormalAircraft()) { - SetDParam(0, u->engine_type); + SetDParam(0, PackEngineNameDParam(u->engine_type, EngineNameContext::VehicleDetails)); SetDParam(1, u->build_year); SetDParam(2, u->value); DrawString(r.left, r.right, y, STR_VEHICLE_INFO_BUILT_VALUE); diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index d53496ca8d..be339cc4a7 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -458,7 +458,7 @@ public: bool when_old = false; EngineID e = EngineReplacementForCompany(c, this->sel_engine[0], this->sel_group, &when_old); str = when_old ? STR_REPLACE_REPLACING_WHEN_OLD : STR_ENGINE_NAME; - SetDParam(0, e); + SetDParam(0, PackEngineNameDParam(e, EngineNameContext::PurchaseList)); } } else { str = STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED; diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index a4d425783b..b0d5d62e55 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -145,13 +145,14 @@ static bool EngineNameSorter(const GUIEngineListItem &a, const GUIEngineListItem if (a.engine_id != _last_engine[0]) { _last_engine[0] = a.engine_id; - SetDParam(0, a.engine_id); + SetDParam(0, PackEngineNameDParam(a.engine_id, EngineNameContext::PurchaseList)); + GetString(last_name[0], STR_ENGINE_NAME, lastof(last_name[0])); } if (b.engine_id != _last_engine[1]) { _last_engine[1] = b.engine_id; - SetDParam(0, b.engine_id); + SetDParam(0, PackEngineNameDParam(b.engine_id, EngineNameContext::PurchaseList)); GetString(last_name[1], STR_ENGINE_NAME, lastof(last_name[1])); } @@ -1037,7 +1038,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li StringID str = hidden ? STR_HIDDEN_ENGINE_NAME : STR_ENGINE_NAME; TextColour tc = (item.engine_id == selected_id) ? TC_WHITE : (TC_NO_SHADE | ((hidden | shaded) ? TC_GREY : TC_BLACK)); - SetDParam(0, item.engine_id); + SetDParam(0, PackEngineNameDParam(item.engine_id, EngineNameContext::PurchaseList, item.indent)); Rect itr = tr.Indent(indent, rtl); DrawString(itr.left, itr.right, y + normal_text_y_offset, str, tc); int sprite_x = ir.Indent(indent + circle_width + WidgetDimensions::scaled.hsep_normal, rtl).WithWidth(sprite_width, rtl).left + sprite_left; @@ -1599,7 +1600,7 @@ struct BuildVehicleWindow : Window { EngineID sel_eng = this->sel_engine; if (sel_eng != INVALID_ENGINE) { this->rename_engine = sel_eng; - SetDParam(0, sel_eng); + SetDParam(0, PackEngineNameDParam(sel_eng, EngineNameContext::Generic)); ShowQueryString(STR_ENGINE_NAME, STR_QUERY_RENAME_TRAIN_TYPE_CAPTION + this->vehicle_type, MAX_LENGTH_ENGINE_NAME_CHARS, this, CS_ALPHANUMERAL, QSF_ENABLE_DEFAULT | QSF_LEN_IN_CHARS); } break; diff --git a/src/engine.cpp b/src/engine.cpp index 26259066c3..649c49804d 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -1049,7 +1049,7 @@ static void NewVehicleAvailable(Engine *e) /* Only provide the "New Vehicle available" news paper entry, if engine can be built. */ if (!IsVehicleTypeDisabled(e->type, false) && (e->info.extra_flags & ExtraEngineFlags::NoNews) == ExtraEngineFlags::None) { SetDParam(0, GetEngineCategoryName(index)); - SetDParam(1, index); + SetDParam(1, PackEngineNameDParam(index, EngineNameContext::PreviewNews)); AddNewsItem(STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE, NT_NEW_VEHICLES, NF_VEHICLE, NR_ENGINE, index); } diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 6bad2fb331..11a1cd7f3e 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -112,7 +112,7 @@ struct EnginePreviewWindow : Window { SetDParam(0, GetEngineCategoryName(engine)); int y = DrawStringMultiLine(r, STR_ENGINE_PREVIEW_MESSAGE, TC_FROMSTRING, SA_HOR_CENTER | SA_TOP) + WidgetDimensions::scaled.vsep_wide; - SetDParam(0, engine); + SetDParam(0, PackEngineNameDParam(engine, EngineNameContext::PreviewNews)); DrawString(r.left, r.right, y, STR_ENGINE_NAME, TC_BLACK, SA_HOR_CENTER); y += FONT_HEIGHT_NORMAL; diff --git a/src/engine_type.h b/src/engine_type.h index f3cd5aacfd..789ddbbca0 100644 --- a/src/engine_type.h +++ b/src/engine_type.h @@ -182,6 +182,22 @@ enum EngineFlags { ENGINE_EXCLUSIVE_PREVIEW = 2, ///< This vehicle is in the exclusive preview stage, either being used or being offered to a company. }; +/** + * Contexts an engine name can be shown in. + */ +enum EngineNameContext : uint8 { + Generic = 0x00, ///< No specific context available. + VehicleDetails = 0x11, ///< Name is shown in the vehicle details GUI. + PurchaseList = 0x20, ///< Name is shown in the purchase list (including autoreplace window). + PreviewNews = 0x21, ///< Name is shown in exclusive preview or newspaper. +}; + +/** Combine an engine ID and a name context to an engine name dparam. */ +inline uint64 PackEngineNameDParam(EngineID engine_id, EngineNameContext context, uint32 extra_data = 0) +{ + return engine_id | (static_cast(context) << 32) | (static_cast(extra_data) << 40); +} + static const uint MAX_LENGTH_ENGINE_NAME_CHARS = 32; ///< The maximum length of an engine name in characters including '\0' static const EngineID INVALID_ENGINE = 0xFFFF; ///< Constant denoting an invalid engine. diff --git a/src/newgrf_callbacks.h b/src/newgrf_callbacks.h index ed32a3abf1..ea20105cb8 100644 --- a/src/newgrf_callbacks.h +++ b/src/newgrf_callbacks.h @@ -279,6 +279,9 @@ enum CallbackID { /** Called to spawn visual effects for vehicles. */ CBID_VEHICLE_SPAWN_VISUAL_EFFECT = 0x160, // 15 bit callback + + /** Called to determine the engine name to show. */ + CBID_VEHICLE_NAME = 0x161, // 15 bit callback }; /** @@ -294,6 +297,7 @@ enum VehicleCallbackMask { CBM_VEHICLE_CARGO_SUFFIX = 5, ///< Show suffix after cargo name CBM_VEHICLE_COLOUR_REMAP = 6, ///< Change colour mapping of vehicle CBM_VEHICLE_SOUND_EFFECT = 7, ///< Vehicle uses custom sound effects + CBM_VEHICLE_NAME = 8, ///< Engine name }; /** diff --git a/src/news_gui.cpp b/src/news_gui.cpp index cd53aaf7d9..ab3bfadb92 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -601,7 +601,7 @@ private: return STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE; case WID_N_VEH_NAME: - SetDParam(0, engine); + SetDParam(0, PackEngineNameDParam(engine, EngineNameContext::PreviewNews)); return STR_NEWS_NEW_VEHICLE_TYPE; default: diff --git a/src/roadveh_gui.cpp b/src/roadveh_gui.cpp index da9200954e..37e43b506b 100644 --- a/src/roadveh_gui.cpp +++ b/src/roadveh_gui.cpp @@ -32,7 +32,7 @@ void DrawRoadVehDetails(const Vehicle *v, const Rect &r) StringID str; Money feeder_share = 0; - SetDParam(0, v->engine_type); + SetDParam(0, PackEngineNameDParam(v->engine_type, EngineNameContext::VehicleDetails)); SetDParam(1, v->build_year); SetDParam(2, v->value); DrawString(r.left, r.right, y, STR_VEHICLE_INFO_BUILT_VALUE); diff --git a/src/ship_gui.cpp b/src/ship_gui.cpp index 93c4a4a9c5..d5991c9b93 100644 --- a/src/ship_gui.cpp +++ b/src/ship_gui.cpp @@ -63,7 +63,7 @@ void DrawShipDetails(const Vehicle *v, const Rect &r) { int y = r.top; - SetDParam(0, v->engine_type); + SetDParam(0, PackEngineNameDParam(v->engine_type, EngineNameContext::VehicleDetails)); SetDParam(1, v->build_year); SetDParam(2, v->value); DrawString(r.left, r.right, y, STR_VEHICLE_INFO_BUILT_VALUE); diff --git a/src/strings.cpp b/src/strings.cpp index 27a8639550..f888770714 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -34,6 +34,7 @@ #include "debug.h" #include "game/game_text.hpp" #include "network/network_content_gui.h" +#include "newgrf_engine.h" #include #include "table/strings.h" @@ -1371,17 +1372,38 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } case SCC_ENGINE_NAME: { // {ENGINE} - const Engine *e = Engine::GetIfValid(args->GetInt32(SCC_ENGINE_NAME)); + int64 arg = args->GetInt64(SCC_ENGINE_NAME); + const Engine *e = Engine::GetIfValid(static_cast(arg)); if (e == nullptr) break; if (!e->name.empty() && e->IsEnabled()) { int64 args_array[] = {(int64)(size_t)e->name.c_str()}; StringParameters tmp_params(args_array); buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); - } else { - StringParameters tmp_params(nullptr, 0, nullptr); - buff = GetStringWithArgs(buff, e->info.string_id, &tmp_params, last); + + break; } + + if (HasBit(e->info.callback_mask, CBM_VEHICLE_NAME)) { + uint16 callback = GetVehicleCallback(CBID_VEHICLE_NAME, static_cast(arg >> 32), 0, e->index, nullptr); + /* Not calling ErrorUnknownCallbackResult due to being inside string processing. */ + if (callback != CALLBACK_FAILED && callback < 0x400) { + const GRFFile *grffile = e->GetGRF(); + assert(grffile != nullptr); + + StartTextRefStackUsage(grffile, 6); + uint64 tmp_dparam[6] = { 0 }; + WChar tmp_type[6] = { 0 }; + StringParameters tmp_params(tmp_dparam, 6, tmp_type); + buff = GetStringWithArgs(buff, GetGRFStringID(grffile->grfid, 0xD000 + callback), &tmp_params, last); + StopTextRefStackUsage(); + + break; + } + } + + StringParameters tmp_params(nullptr, 0, nullptr); + buff = GetStringWithArgs(buff, e->info.string_id, &tmp_params, last); break; } diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 835fa24356..0745a08b2d 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -227,11 +227,11 @@ static void TrainDetailsCargoTab(const CargoSummaryItem *item, int left, int rig static void TrainDetailsInfoTab(const Vehicle *v, int left, int right, int y) { if (RailVehInfo(v->engine_type)->railveh_type == RAILVEH_WAGON) { - SetDParam(0, v->engine_type); + SetDParam(0, PackEngineNameDParam(v->engine_type, EngineNameContext::VehicleDetails)); SetDParam(1, v->value); DrawString(left, right, y, STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE); } else { - SetDParam(0, v->engine_type); + SetDParam(0, PackEngineNameDParam(v->engine_type, EngineNameContext::VehicleDetails)); SetDParam(1, v->build_year); SetDParam(2, v->value); DrawString(left, right, y, STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE); From 1897e98c3dec300a0b97cc1222906bff9fadea09 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 31 Jan 2023 18:45:28 +0000 Subject: [PATCH 09/42] Update: Translations from eints slovak: 10 changes by legitalk --- src/lang/slovak.txt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index ac59e2a263..aa61dc4b14 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -450,7 +450,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generova STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generovanie priemyslu STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Stavba cesty STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Výstavba električkovej trate -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadiť stromy. Shift zobrazí odhadovanú cenu +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Sadiť stromy. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Umiestniť popis STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Umiestniť objekt. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu @@ -1993,13 +1993,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Použiť {STRIN STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Čas potrebný pre každé prepočítanie grafu spojov. Pri štarte prepočtu je vytvorené vlákno, ktoré môže bežať uvedený počet dní. Čím menej nastavíte, tým je pravdepodobnejšie, že vlákno nestihne skončiť, kým je to možné. Potom sa hra na nejaký čas zasekne. Čím viac nastavíte, tým dlhšie trvá aktualizácia rozdelenia po zmene trasy. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Druh distribúcie pre cestujúcich: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symetricky" znamená, že približne rovnaké množstvo pasažierov bude cestovať zo stanice A do stanice B ako z B do A. "asymetricky"znamená, že v oboch smeroch môže cestovať ľubovoľné množstvo pasažierov. "manuálne" znamená, že sa pre pasažierov nevykoná automatická distribúcia. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symetricky" znamená, že približne rovnaké množstvo pasažierov bude cestovať zo stanice A do stanice B ako z B do A. "Asymetricky" znamená, že v oboch smeroch môže cestovať ľubovoľné množstvo pasažierov. "Manuálne" znamená, že sa pre pasažierov nevykoná automatická distribúcia. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Druh distribúcie pre poštu: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symetricky" znamená, že približne rovnaké množstvo pošty bude odoslané zo stanice A do stanice B ako z B do A. "asymetricky"znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo pošty. "manuálne" znamená, že sa pre poštu nevykoná automatická distribúcia. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symetricky" znamená, že približne rovnaké množstvo pošty bude odoslané zo stanice A do stanice B ako z B do A. "Asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo pošty. "Manuálne" znamená, že sa pre poštu nevykoná automatická distribúcia. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Druh distribúcie pre náklad prevážaný obrnenými vozidlami: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Náklad prevážaný obrnenými vozidlami sú cennosti v miernom, diamanty v subtropickom alebo zlato v subarktickom podnebí. NewGRF to môže zmeniť. "symetricky" znamená, že rovnaké množstvo nákladu bude odoslané zo stanice A do stanice B a naopak. "asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo nákladu. "manuálne" znamená, že sa pre náklad nevykoná automatická distribúcia. Doporučuje sa nastaviť na "asymetricky" alebo "manuálne" pri hraní v subarktickom, pretože banky neodošlú žiadne zlato do zlatých baní. Pre mierne a subtropické si môžete vybrať aj "symetricky", pretože banky budú posielať cennosti späť do pôvodnej banky, ktorá ich odoslala. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Náklad prevážaný obrnenými vozidlami sú cennosti v miernom, diamanty v subtropickom alebo zlato v subarktickom podnebí. NewGRF to môže zmeniť. "Symetricky" znamená, že rovnaké množstvo nákladu bude odoslané zo stanice A do stanice B a naopak. "Asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo nákladu. "Manuálne" znamená, že sa pre náklad nevykoná automatická distribúcia. Doporučuje sa nastaviť na "asymetricky" alebo "manuálne" pri hraní v subarktickom alebo subtropickom, pretože banky prijímajú náklad iba v týchto podnebiach. Pre mierne podnebie si môžete vybrať aj "symetricky", pretože banky budú posielať cennosti späť do pôvodnej banky, ktorá ich odoslala. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Druh distribúcie pre ostatné druhy nákladu: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymetricky"znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo nákladu. "manuálne" znamená, že sa pre náklad nevykoná automatická distribúcia. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymetricky" znamená, že v oboch smeroch môže byť odoslané ľubovoľné množstvo nákladu. "Manuálne" znamená, že sa pre náklad nevykoná automatická distribúcia. ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuálne STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymetricky @@ -2766,6 +2766,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zvýšit STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vyber železničný most STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Vyber cestný most STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Výber mostu - pre postavanie zvoľ typ mostu +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Závesný oceľový STR_BRIDGE_NAME_GIRDER_STEEL :Pilierový oceľový STR_BRIDGE_NAME_CANTILEVER_STEEL :Visutý oceľový @@ -2885,7 +2889,7 @@ STR_OBJECT_CLASS_TRNS :Vysielače STR_PLANT_TREE_CAPTION :{WHITE}Stromy STR_PLANT_TREE_TOOLTIP :{BLACK}Vybrať druh stromu na sadenie. Ak sa už strom na políčku nachádza, pridá sa viac stromov zmiešaných druhov nezávisle od vybraného druhu STR_TREES_RANDOM_TYPE :{BLACK}Náhodný druh stromov -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestniť stromy náhodného druhu. Shift zobrazí odhadovanú cenu +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Umiestniť stromy náhodného druhu. Ctrl označí oblasť diagonálne. Shift zobrazí odhadovanú cenu STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Náhodné stromy STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Zasadiť stromy náhodne po celej krajine STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normálne From 67e1d1ad893fd6efc7a7ed1545ef0a7cf5eab627 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 31 Jan 2023 16:59:14 +0100 Subject: [PATCH 10/42] Fix: no need to cast enums down to int32; they will be automatically promoted to int64 --- cmake/scripts/SquirrelExport.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/scripts/SquirrelExport.cmake b/cmake/scripts/SquirrelExport.cmake index c1305066ab..e5d83714b9 100644 --- a/cmake/scripts/SquirrelExport.cmake +++ b/cmake/scripts/SquirrelExport.cmake @@ -298,7 +298,7 @@ foreach(LINE IN LISTS SOURCE_LINES) string(APPEND SQUIRREL_EXPORT "\n /* Allow enums to be used as Squirrel parameters */") foreach(ENUM IN LISTS ENUMS) string(APPEND SQUIRREL_EXPORT "\n template <> inline ${ENUM} GetParam(ForceType<${ENUM}>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (${ENUM})tmp; }") - string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${ENUM}>(HSQUIRRELVM vm, ${ENUM} res) { sq_pushinteger(vm, (int32)res); return 1; }") + string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${ENUM}>(HSQUIRRELVM vm, ${ENUM} res) { sq_pushinteger(vm, res); return 1; }") endforeach() endif() From 31869501eebf575a7897b0270e14f96fb229a46d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 31 Jan 2023 16:59:58 +0100 Subject: [PATCH 11/42] Fix: make script goals work with the whole range of ClientIDs --- src/goal.cpp | 4 +++- src/goal_cmd.h | 2 +- src/script/api/script_goal.cpp | 2 -- src/script/api/script_goal.hpp | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/goal.cpp b/src/goal.cpp index 447763866b..208678678d 100644 --- a/src/goal.cpp +++ b/src/goal.cpp @@ -224,9 +224,11 @@ CommandCost CmdSetGoalCompleted(DoCommandFlag flags, GoalID goal, bool completed * @param text Text of the question. * @return the cost of this operation or an error */ -CommandCost CmdGoalQuestion(DoCommandFlag flags, uint16 uniqueid, uint16 target, bool is_client, uint32 button_mask, GoalQuestionType type, const std::string &text) +CommandCost CmdGoalQuestion(DoCommandFlag flags, uint16 uniqueid, uint32 target, bool is_client, uint32 button_mask, GoalQuestionType type, const std::string &text) { + static_assert(sizeof(uint32) >= sizeof(CompanyID)); CompanyID company = (CompanyID)target; + static_assert(sizeof(uint32) >= sizeof(ClientID)); ClientID client = (ClientID)target; static_assert(GOAL_QUESTION_BUTTON_COUNT < 29); diff --git a/src/goal_cmd.h b/src/goal_cmd.h index e57d9b185c..3f5eac7d8c 100644 --- a/src/goal_cmd.h +++ b/src/goal_cmd.h @@ -18,7 +18,7 @@ CommandCost CmdRemoveGoal(DoCommandFlag flags, GoalID goal); CommandCost CmdSetGoalText(DoCommandFlag flags, GoalID goal, const std::string &text); CommandCost CmdSetGoalProgress(DoCommandFlag flags, GoalID goal, const std::string &text); CommandCost CmdSetGoalCompleted(DoCommandFlag flags, GoalID goal, bool completed); -CommandCost CmdGoalQuestion(DoCommandFlag flags, uint16 uniqueid, uint16 target, bool is_client, uint32 button_mask, GoalQuestionType type, const std::string &text); +CommandCost CmdGoalQuestion(DoCommandFlag flags, uint16 uniqueid, uint32 target, bool is_client, uint32 button_mask, GoalQuestionType type, const std::string &text); CommandCost CmdGoalQuestionAnswer(DoCommandFlag flags, uint16 uniqueid, uint8 button); DEF_CMD_TRAIT(CMD_CREATE_GOAL, CmdCreateGoal, CMD_DEITY | CMD_STR_CTRL, CMDT_OTHER_MANAGEMENT) diff --git a/src/script/api/script_goal.cpp b/src/script/api/script_goal.cpp index 70f040dd45..d908f4e720 100644 --- a/src/script/api/script_goal.cpp +++ b/src/script/api/script_goal.cpp @@ -137,8 +137,6 @@ { EnforcePrecondition(false, ScriptGame::IsMultiplayer()); EnforcePrecondition(false, ScriptClient::ResolveClientID(client) != ScriptClient::CLIENT_INVALID); - /* Can only send 16 bits of client_id before proper fix is implemented */ - EnforcePrecondition(false, client < (1 << 16)); return DoQuestion(uniqueid, client, true, question, type, buttons); } diff --git a/src/script/api/script_goal.hpp b/src/script/api/script_goal.hpp index dda8498fe4..69f8c38f66 100644 --- a/src/script/api/script_goal.hpp +++ b/src/script/api/script_goal.hpp @@ -170,7 +170,7 @@ public: * @pre question != null && len(question) != 0. * @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID. * @pre CountBits(buttons) >= 1 && CountBits(buttons) <= 3. - * @note Replies to the question are given by you via the event ScriptEvent_GoalQuestionAnswer. + * @note Replies to the question are given by you via the event ScriptEventGoalQuestionAnswer. * @note There is no guarantee you ever get a reply on your question. */ static bool Question(uint16 uniqueid, ScriptCompany::CompanyID company, Text *question, QuestionType type, int buttons); @@ -188,7 +188,7 @@ public: * @pre question != null && len(question) != 0. * @pre ResolveClientID(client) != CLIENT_INVALID. * @pre CountBits(buttons) >= 1 && CountBits(buttons) <= 3. - * @note Replies to the question are given by you via the event ScriptEvent_GoalQuestionAnswer. + * @note Replies to the question are given by you via the event ScriptEventGoalQuestionAnswer. * @note There is no guarantee you ever get a reply on your question. */ static bool QuestionClient(uint16 uniqueid, ScriptClient::ClientID client, Text *question, QuestionType type, int buttons); From 12f9fbcf390cdc14ff14496c937a2a23ae36289a Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Wed, 1 Feb 2023 16:41:41 +0900 Subject: [PATCH 12/42] Fix: [CMake] remove cpack warning on fedora when lsb_release exists (#10437) --- cmake/InstallAndPackage.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/InstallAndPackage.cmake b/cmake/InstallAndPackage.cmake index be37b9b745..3a894b5a62 100644 --- a/cmake/InstallAndPackage.cmake +++ b/cmake/InstallAndPackage.cmake @@ -173,6 +173,10 @@ elseif(UNIX) set(CPACK_GENERATOR "DEB") include(PackageDeb) + elseif(LSB_RELEASE_ID STREQUAL "Fedora") + set(PLATFORM "fedora") + set(CPACK_GENERATOR "RPM") + include(PackageRPM) else() set(UNSUPPORTED_PLATFORM_NAME "LSB-based Linux distribution '${LSB_RELEASE_ID}'") endif() From 654a77c4f7a18cdfbd902fde34d848871f30a65f Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 1 Feb 2023 18:47:29 +0000 Subject: [PATCH 13/42] Update: Translations from eints luxembourgish: 21 changes by phreeze83 --- src/lang/luxembourgish.txt | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 781d0410cf..4002b3610f 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stieders STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieerstellung STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Stroossebau STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramkonstruktioun -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Beem planzen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Beem planzen. Ctrl wielt d'Land diagonal. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Schëld opstellen STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Objet plazéiren. Ctrl wiel d'Areal diagonal aus. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen @@ -1919,31 +1919,31 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Keng STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Ufangs-Gréisst vu Stied multiplizéiren mat: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Duerchschnëttsgréisst vu Stied an Proportioun zu normalen Dierfer um Spillstart -STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Aktualiséier d'Distributiounsgrafik all {STRING}{NBSP}D{P 0:2 ag eeg} -STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Zäit tëscht nofolgenden Neiberechnungen vun der Linkgrafik. All Neiberechnung rechent d'Pläng fir eng Komponent vun der Grafik. Dat heescht dass en Wert X fir dës Astellung net all X Deeg aktualiséiert gëtt. Nëmmen een Komponent gëtt aktualiséiert. Wat méi kuerz gesat, wat méi CPU Rechenzäit gebraucht gëtt. Wat se méi laang gesat gëtt, wat méi Zäit vergeet bis Wuerendistributioun op enger neier Route gestart gëtt. -STR_CONFIG_SETTING_LINKGRAPH_TIME :Benotz {STRING}{NBSP}D{P 0:2 ag eeg} fir d'Neiberechnung vum Distributiounsgraf -STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Zäit déi gebraucht gëtt fir all Neiberechnung vun enger Linkgrafikkomponent. Wann eng Neiberechnung ufenkt, gëtt en Thread erstallt dee fir dës Unzuel un Deeg leeft. Wann de Wäert ze kleng ass, kann den Thread net an der gewënschter Zäit faerdeg ginn an et kënnt zu engem Lag. Wann de Wäert méi héich gesat gëtt, brauch d'Distributioun méi lang fir erneiert ze ginn wann eng Streck ännert +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Aktualiséier d'Verdeelungsgrafik all {STRING}{NBSP}D{P 0:2 ag eeg} +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Zäit tëscht nofolgenden Neiberechnungen vun der Linkgrafik. All Neiberechnung rechent d'Pläng fir eng Komponent vun der Grafik. Dat heescht, dass en Wert X fir dës Astellung net all X Deeg aktualiséiert gëtt. Nëmmen een Komponent gëtt aktualiséiert. Wat méi kuerz gesat, wat méi CPU Rechenzäit gebraucht gëtt. Wat se méi laang gesat gëtt, wat méi Zäit vergeet bis Wuereverdeelung op enger neier Route gestart gëtt. +STR_CONFIG_SETTING_LINKGRAPH_TIME :Benotz {STRING}{NBSP}D{P 0:2 ag eeg} fir d'Neiberechnung vum Verdeelungsgraf +STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Zäit déi gebraucht gëtt fir all Neiberechnung vun enger Linkgrafikkomponent. Wann eng Neiberechnung ufenkt, gëtt en Thread erstallt dee fir dës Unzuel un Deeg leeft. Wann de Wäert ze kleng ass, kann den Thread net an der gewënschter Zäit faerdeg ginn an et kënnt zu engem Lag. Wann de Wäert méi héich gesat gëtt, brauch d'Verdeelung méi lang fir erneiert ze ginn wann eng Streck ännert -STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributiounsmodus fir Passagéier: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetresch" heescht, dass ongeféier d'selwecht vill Passagéier vun A op B wéi vu B op A geschéckt ginn. "asymmetresch" heescht, dass eng arbiträr Unzuel u Wueren an d'jeweileg Richtung geschéckt ginn. "manuell" heescht dass keng automatësch Distributioun stattfënnt fir Passagéier -STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distributiounsmodus fir Post: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetresch" heescht, dass ongeféier d'selwecht vill vun A op B wéi vu B op A geschéckt ginn. "asymmetresch" heescht, dass eng arbiträr Unzuel u Wueren an d'jeweileg Richtung geschéckt ginn. "manuell" heescht dass keng automatësch Distributioun stattfënnt fir Post -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distributiounsmodus fir d'GEPANZERT Wuereklass: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :D'GEPANZERT Wuereklass huet Wäertsaachen am geméissegte Klima, Diamanten am Sub-Tropenklima an Gold am sub-arktësche Klima. NewGRFen kënnen dat änneren. "Symmetrësch" heescht, dass ongeféier d'selwecht vill vun A op B wéi vu B op A geschéckt ginn. "asymmetrësch" heescht, dass eng arbiträr Unzuel u Wueren an d'jeweileg Richtung geschéckt ginn. "manuell" heescht dass keng automatësch Distributioun stattfënnt. Et gëtt emfuelen dëst op asymmetrësch oder manuell ze loossen wann ee sub-arktësch spillt, well Banken kee Gold zréck an d’Minen liwweren. Fir geméissegt Klima an sub-tropësch Klima kann eng Bank mat der anerer Wäertsachen zeréckschécken. -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distributiounsmodus fir aner Wuerenklassen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetresch" heescht dass eng beléiweg Unzuel un Wueren an béid Richtungen verschéckt ginn. "manuell" heescht dass keng automatësch Distributioun stattfënnt. Meeschtens gëtt "asymmetresch" oder manuell gewielt. +STR_CONFIG_SETTING_DISTRIBUTION_PAX :Verdeelungsmodus fir Passagéier: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetresch" heescht, dass ongeféier d'selwecht vill Passagéier vun A op B wéi vu B op A geschéckt ginn. "Asymmetresch" heescht, dass eng arbiträr Unzuel u Wueren an d'jeweileg Richtung geschéckt ginn. "Manuell" heescht dass keng automatësch Verdeelung stattfënnt fir Passagéier +STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Verdeelungsmodus fir Post: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetresch" heescht, dass ongeféier d'selwecht vill vun A op B wéi vu B op A geschéckt ginn. "Asymmetresch" heescht, dass eng arbiträr Unzuel u Wueren an d'jeweileg Richtung geschéckt ginn. "Manuell" heescht dass keng automatësch Verdeelung stattfënnt fir Post +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Verdeelungsmodus fir d'GEPANZERT Wuereklass: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :D'GEPANZERT Wuereklass huet Wäertsaachen am geméissegte Klima, Diamanten am Sub-Tropenklima an Gold am sub-arktësche Klima. NewGRFen kënnen dat änneren. "Symmetrësch" heescht, dass ongeféier d'selwecht vill vun A op B wéi vu B op A geschéckt ginn. "Asymmetrësch" heescht, dass eng arbiträr Unzuel u Wueren an d'jeweileg Richtung geschéckt ginn. "Manuell" heescht dass keng automatësch Verdeelung stattfënnt. Et gëtt emfuelen dëst op asymmetrësch oder manuell ze loossen wann ee sub-arktësch spillt, well Banken kee Gold zréck an d’Minen liwweren. Fir geméissegt Klima an sub-tropësch Klima kann eng Bank mat der anerer Wäertsachen zeréckschécken. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Verdeelungsmodus fir aner Wuereklassen: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetresch" heescht dass eng beléiweg Unzuel un Wueren an béid Richtungen verschéckt ginn. "Manuell" heescht dass keng automatësch Verdeelung stattfënnt. ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuell STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetresch STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetresch -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Distributiounsgenauegkeet: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Wat de Wäert méi héich ass, wat méi CPU benotzt gëtt fir d'Linkgrafik ze zeechnen. Wann ze héich gesat, kann et zu Lags kommen. Ze niddreg gesat kann d'Distributioun ongenau ginn an d'Wueren net sou verdeelt ginn wéi geduet +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Verdeelungsgenauegkeet: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Wat de Wäert méi héich ass, wat méi CPU benotzt gëtt fir d'Linkgrafik ze zeechnen. Wann ze héich gesat, kann et zu Lags kommen. Ze niddreg gesat kann d'Verdeelung ongenau ginn an d'Wueren net sou verdeelt ginn wéi geduet STR_CONFIG_SETTING_DEMAND_DISTANCE :Afloss vun der Distanz op d'Nofro: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Wann's de en méi héije Wäert wéi 0 wiels, huet d'Differenz tëscht 2 Statiounen A an B en Afloss dorop wéivill Wueren geschéckt ginn. Wat B méi wäit ewech vun A ass, wat manner Wueren geschéckt ginn. Wat de Wäert méi héich gesat gëtt, wat manner Wueren op eng Statioun wait ewech an méi Wueren op eng Statioun méi no geschéckt ginn. STR_CONFIG_SETTING_DEMAND_SIZE :Unzuel vun zeréckgeschéckte Wueren fir de symmetreschen Modus: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Wann een dëst op manner wéi 100% setzt, gëtt déi symmetresch Distributioun méi wéi eng asymmetrësch behandelt. Manner Wueren ginn zeréckgeschéckt wann en bestëmmten Wäert op eng Statioun geschéckt gouf. Bei 0% verhält sech d'symmetresch Distributioun wéi eng asymmetresch +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Wann een dëst op manner wéi 100% setzt, gëtt déi symmetresch Verdeelung méi wéi eng asymmetrësch behandelt. Manner Wueren ginn zeréckgeschéckt wann en bestëmmten Wäert op eng Statioun geschéckt gouf. Bei 0% verhält sech d'symmetresch Verdeelung wéi eng asymmetresch STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Sättegung vu kuerzen Weeër befier grouss Weeër benotzt ginn: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Oft gëtt et e puer Weeër tëscht zwou Statiounen. Cargodist siedegt fir d'éischt de kierzten, dann den zweetkierzten a.s.w. Siedegung gëtt bestemmt durch Kapazitéit an geplangten Notzung. Wann all Wee gesiedegt ass, an nach emmer eng Nofro do ass, ginn all d'Weeër iwwersiedegt, mat Präferenz déi mat grousser Kapazitéit. Gréissten Deel vun der Zäit rechent den Algorithmus d'Kapazitéit allerdéngs net richteg. Des Astellung erlabt engem en Prozentsaz ze bestëmmen fir den éischten Wee befier en zweeten Wee benotzt gëtt. Setz en enner 100% fir iwwerfëllten Statiounen ze vermeide wann d'Kapazitéit iwwerschat gouf. @@ -2698,6 +2698,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Setzt Si STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Zuchbréck auswielen STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Stroossebréck auswielen STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Bréckenauswiel - Wiel deng Bréck aus +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Stolen Hängebréck STR_BRIDGE_NAME_GIRDER_STEEL :Stoldréier Bréck STR_BRIDGE_NAME_CANTILEVER_STEEL :Fräidroend Stolbréck @@ -2817,7 +2821,7 @@ STR_OBJECT_CLASS_TRNS :Antennen STR_PLANT_TREE_CAPTION :{WHITE}Beem STR_PLANT_TREE_TOOLTIP :{BLACK}Wielt de Baamtyp. Wann d'Feld schons e Baam huet, ginn méi Beem vu verschiddenen Arten gesat STR_TREES_RANDOM_TYPE :{BLACK}Zoufälleg Beem -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Zoufälleg Beem planzen. Shift wiesselt tëscht bauen an ongeféier Käschten uweisen +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Zoufälleg Type vu Beem planzen. Ctrl wielt d'Land diagonal. Shift wiesselt tëscht bauen an ongeféier Käschten uweisen STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Zoufälleg Beem STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Beem zoufälleg iwwert d'Landschaft setzen STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal From 184ff9205738d8b37b0430e15ae910697e50dc67 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Wed, 1 Feb 2023 18:48:39 +0000 Subject: [PATCH 14/42] Cleanup: [Script] Pass new_rating directly to CmdTownRating (#10441) --- src/script/api/script_town.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp index 7138e22e79..eafb9106fc 100644 --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -358,10 +358,7 @@ int16 new_rating = Clamp(t->ratings[company] + delta, RATING_MINIMUM, RATING_MAXIMUM); if (new_rating == t->ratings[company]) return false; - uint16 p2 = 0; - memcpy(&p2, &new_rating, sizeof(p2)); - - return ScriptObject::Command::Do(town_id, (::CompanyID)company_id, p2); + return ScriptObject::Command::Do(town_id, (::CompanyID)company_id, new_rating); } /* static */ int ScriptTown::GetAllowedNoise(TownID town_id) From 4fc4874a3060eee727f277de21af4c9626ea296d Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Wed, 1 Feb 2023 18:21:00 +0000 Subject: [PATCH 15/42] Add: [Script] Let random road layout be a choice --- src/script/api/ai_changelog.hpp | 3 +++ src/script/api/game_changelog.hpp | 3 +++ src/script/api/script_town.cpp | 2 +- src/script/api/script_town.hpp | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index e69408926f..27ad40e79f 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -17,6 +17,9 @@ * * This version is not yet released. The following changes are not set in stone yet. * + * API additions: + * \li AITown::ROAD_LAYOUT_RANDOM + * * \b 13.0 * * API additions: diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 1512a6ea7c..46a8e4904f 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -17,6 +17,9 @@ * * This version is not yet released. The following changes are not set in stone yet. * + * API additions: + * \li GSTown::ROAD_LAYOUT_RANDOM + * * \b 13.0 * * API additions: diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp index eafb9106fc..047cbe1a69 100644 --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -288,7 +288,7 @@ EnforcePrecondition(false, size == TOWN_SIZE_SMALL || size == TOWN_SIZE_MEDIUM || size == TOWN_SIZE_LARGE) EnforcePrecondition(false, size != TOWN_SIZE_LARGE || ScriptObject::GetCompany() == OWNER_DEITY); if (ScriptObject::GetCompany() == OWNER_DEITY || _settings_game.economy.found_town == TF_CUSTOM_LAYOUT) { - EnforcePrecondition(false, layout == ROAD_LAYOUT_ORIGINAL || layout == ROAD_LAYOUT_BETTER_ROADS || layout == ROAD_LAYOUT_2x2 || layout == ROAD_LAYOUT_3x3); + EnforcePrecondition(false, layout >= ROAD_LAYOUT_ORIGINAL && layout <= ROAD_LAYOUT_RANDOM); } else { /* The layout parameter is ignored for AIs when custom layouts is disabled. */ layout = (RoadLayout) (byte)_settings_game.economy.town_layout; diff --git a/src/script/api/script_town.hpp b/src/script/api/script_town.hpp index 6e7fc67781..d64d12ef6b 100644 --- a/src/script/api/script_town.hpp +++ b/src/script/api/script_town.hpp @@ -98,6 +98,7 @@ public: ROAD_LAYOUT_BETTER_ROADS = ::TL_BETTER_ROADS, ///< Extended original algorithm (min. 2 distance between roads). ROAD_LAYOUT_2x2 = ::TL_2X2_GRID, ///< Geometric 2x2 grid algorithm ROAD_LAYOUT_3x3 = ::TL_3X3_GRID, ///< Geometric 3x3 grid algorithm + ROAD_LAYOUT_RANDOM = ::TL_RANDOM, ///< Random road layout /* Custom added value, only valid for this API */ ROAD_LAYOUT_INVALID = -1, ///< The layout for invalid towns. From d0639cdc289f8e1d99ce88eca11f523bc4897ada Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Wed, 1 Feb 2023 16:07:45 +0000 Subject: [PATCH 16/42] Fix: [Script] Incorrect subsidy SourceID value used --- src/script/api/script_subsidy.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/script/api/script_subsidy.cpp b/src/script/api/script_subsidy.cpp index 5e1180d1bb..7e90f8e9a2 100644 --- a/src/script/api/script_subsidy.cpp +++ b/src/script/api/script_subsidy.cpp @@ -80,7 +80,7 @@ /* static */ int32 ScriptSubsidy::GetSourceIndex(SubsidyID subsidy_id) { - if (!IsValidSubsidy(subsidy_id)) return INVALID_STATION; + if (!IsValidSubsidy(subsidy_id)) return INVALID_SOURCE; return ::Subsidy::Get(subsidy_id)->src; } @@ -94,7 +94,7 @@ /* static */ int32 ScriptSubsidy::GetDestinationIndex(SubsidyID subsidy_id) { - if (!IsValidSubsidy(subsidy_id)) return INVALID_STATION; + if (!IsValidSubsidy(subsidy_id)) return INVALID_SOURCE; return ::Subsidy::Get(subsidy_id)->dst; } From b7b7c11b90888200810fcd296696dd19f061b140 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 15 Jan 2023 07:55:54 +0100 Subject: [PATCH 17/42] Change #10077: make maximum loan a positive multiple of the loan interval And set the minimum maximum loan to the value of loan interval, so there is always an amount of money to lend. Compared to being allowed to set max loan to 0 and never be allowed to lend any money. --- src/company_cmd.cpp | 3 ++- src/economy.cpp | 4 ++-- src/table/settings/company_settings.ini | 8 ++++---- src/table/settings/difficulty_settings.ini | 5 +++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 9b32d5614a..182f32a4f0 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -561,7 +561,8 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY) ResetCompanyLivery(c); _company_colours[c->index] = (Colours)c->colour; - c->money = c->current_loan = (std::min(INITIAL_LOAN, _economy.max_loan) * _economy.inflation_prices >> 16) / 50000 * 50000; + /* Scale the initial loan based on the inflation rounded down to the loan interval. The maximum loan has already been inflation adjusted. */ + c->money = c->current_loan = std::min((INITIAL_LOAN * _economy.inflation_prices >> 16) / LOAN_INTERVAL * LOAN_INTERVAL, _economy.max_loan); std::fill(c->share_owners.begin(), c->share_owners.end(), INVALID_OWNER); diff --git a/src/economy.cpp b/src/economy.cpp index 4c97feb1cf..ab23288c5f 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -757,8 +757,8 @@ bool AddInflation(bool check_year) */ void RecomputePrices() { - /* Setup maximum loan */ - _economy.max_loan = ((uint64)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / 50000 * 50000; + /* Setup maximum loan as a rounded down multiple of LOAN_INTERVAL. */ + _economy.max_loan = ((uint64)_settings_game.difficulty.max_loan * _economy.inflation_prices >> 16) / LOAN_INTERVAL * LOAN_INTERVAL; /* Setup price bases */ for (Price i = PR_BEGIN; i < PR_END; i++) { diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index 52920e6e6d..ef299e1e22 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -89,7 +89,7 @@ max = 800 str = STR_CONFIG_SETTING_SERVINT_TRAINS strhelp = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE -pre_cb = [](auto new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); } +pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); } [SDT_VAR] @@ -102,7 +102,7 @@ max = 800 str = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES strhelp = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE -pre_cb = [](auto new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); } +pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); } [SDT_VAR] @@ -115,7 +115,7 @@ max = 800 str = STR_CONFIG_SETTING_SERVINT_SHIPS strhelp = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE -pre_cb = [](auto new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); } +pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); } [SDT_VAR] @@ -128,5 +128,5 @@ max = 800 str = STR_CONFIG_SETTING_SERVINT_AIRCRAFT strhelp = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT strval = STR_CONFIG_SETTING_SERVINT_VALUE -pre_cb = [](auto new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); } +pre_cb = [](auto &new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); } post_cb = [](auto new_value) { UpdateServiceInterval(VEH_AIRCRAFT, new_value); } diff --git a/src/table/settings/difficulty_settings.ini b/src/table/settings/difficulty_settings.ini index d47da817d6..c453162a18 100644 --- a/src/table/settings/difficulty_settings.ini +++ b/src/table/settings/difficulty_settings.ini @@ -98,9 +98,10 @@ type = SLE_UINT32 from = SLV_97 flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_CURRENCY def = 300000 -min = 0 +min = LOAN_INTERVAL max = 2000000000 -interval = 50000 +pre_cb = [](auto &new_value) { new_value = (new_value + LOAN_INTERVAL / 2) / LOAN_INTERVAL * LOAN_INTERVAL; return true; } +interval = LOAN_INTERVAL str = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN strhelp = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT strval = STR_JUST_CURRENCY_LONG From bf8b32d1933cd2517c1574237ae70e83a40853d2 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 17 Jan 2023 18:16:41 +0100 Subject: [PATCH 18/42] Change: explicitly allow initial loan of 0, however show warning in UI --- src/lang/english.txt | 3 +++ src/table/settings/difficulty_settings.ini | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 2ff0ac81fe..9e41ea5a26 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1206,6 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING2} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} +###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan {RED}Requires Game Script to provide initial funds STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING2} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled diff --git a/src/table/settings/difficulty_settings.ini b/src/table/settings/difficulty_settings.ini index c453162a18..ee68c6d30e 100644 --- a/src/table/settings/difficulty_settings.ini +++ b/src/table/settings/difficulty_settings.ini @@ -96,7 +96,7 @@ cat = SC_BASIC var = difficulty.max_loan type = SLE_UINT32 from = SLV_97 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_CURRENCY +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_CURRENCY | SF_GUI_0_IS_SPECIAL def = 300000 min = LOAN_INTERVAL max = 2000000000 @@ -104,7 +104,7 @@ pre_cb = [](auto &new_value) { new_value = (new_value + LOAN_INTERVAL / 2) / L interval = LOAN_INTERVAL str = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN strhelp = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT -strval = STR_JUST_CURRENCY_LONG +strval = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE cat = SC_BASIC [SDT_VAR] From 1f194eb94e156821fea29bbfb92cc25b937b4795 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Wed, 1 Feb 2023 22:35:51 +0000 Subject: [PATCH 19/42] Fix: [Script] Incorrect value for GOAL_INVALID (#10436) * Fix: [Script] Incorrect value for GOAL_INVALID * Cleanup: Remove unused static variable --- src/goal_type.h | 3 +-- src/script/api/script_goal.hpp | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/goal_type.h b/src/goal_type.h index 27ec758a9d..2db04b9f0a 100644 --- a/src/goal_type.h +++ b/src/goal_type.h @@ -32,8 +32,7 @@ enum GoalType : byte { GT_STORY_PAGE, ///< Destination is a story page }; -typedef uint32 GoalTypeID; ///< Contains either tile, industry ID, town ID or company ID (or INVALID_GOALTYPE) -static const GoalTypeID INVALID_GOALTYPE = 0xFFFFFFFF; ///< Invalid/unknown index of GoalType +typedef uint32 GoalTypeID; ///< Contains either tile, industry ID, town ID, company ID, or story page ID typedef uint16 GoalID; ///< ID of a goal struct Goal; diff --git a/src/script/api/script_goal.hpp b/src/script/api/script_goal.hpp index 69f8c38f66..9367ab7753 100644 --- a/src/script/api/script_goal.hpp +++ b/src/script/api/script_goal.hpp @@ -28,9 +28,9 @@ public: /** * The goal IDs. */ - enum GoalID { + enum GoalID : uint16 { /* Note: these values represent part of the in-game GoalID enum */ - GOAL_INVALID = ::INVALID_GOALTYPE, ///< An invalid goal id. + GOAL_INVALID = ::INVALID_GOAL, ///< An invalid goal id. }; /** From e41af1f2bb78c121f58aa70e157499ff34ff5190 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 2 Feb 2023 18:44:54 +0000 Subject: [PATCH 20/42] Update: Translations from eints portuguese (brazilian): 8 changes by ericandradex --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 13 +++++++++---- src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/chuvash.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 1 + src/lang/danish.txt | 1 + src/lang/dutch.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 1 + src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 1 + src/lang/french.txt | 1 + src/lang/frisian.txt | 1 + src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hindi.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/ido.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 1 + src/lang/japanese.txt | 1 + src/lang/korean.txt | 1 + src/lang/latin.txt | 1 + src/lang/latvian.txt | 1 + src/lang/lithuanian.txt | 1 + src/lang/luxembourgish.txt | 1 + src/lang/macedonian.txt | 1 + src/lang/malay.txt | 1 + src/lang/maltese.txt | 1 + src/lang/marathi.txt | 1 + src/lang/norwegian_bokmal.txt | 1 + src/lang/norwegian_nynorsk.txt | 1 + src/lang/persian.txt | 1 + src/lang/polish.txt | 1 + src/lang/portuguese.txt | 1 + src/lang/romanian.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 1 + src/lang/spanish_MX.txt | 1 + src/lang/swedish.txt | 1 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/urdu.txt | 1 + src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 1 + 64 files changed, 72 insertions(+), 4 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index dcad6e6eb8..e144cd38e4 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1145,6 +1145,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Regs STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum aanvanklike lening: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimum bedrag wat 'n maatskappy kan leen (sonder die inagneming van inflasie) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Rentekoers: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lening rentekoers: beheer ook inflasie indien aangeskakel diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 7c961dcbd1..a979257798 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1133,6 +1133,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :يسار STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :متوسط STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :يمين +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :سعر الفائدة على القرض يتحكم أيضًا في التضخم ، إذا تم تمكينه diff --git a/src/lang/basque.txt b/src/lang/basque.txt index dae81d2051..32b4333ae3 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1108,6 +1108,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Eskuina STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Gehienezko mailegua joko hasieran: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Konpainiek eskatu dezaketen gehienezko mailegua(inflazioa kontua hartu gabe) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Interes tasa: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Maileguen interes tasa; inflazioa ere kontrolatuko du, gaitzen bada diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 5798072b5e..275f958967 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1456,6 +1456,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :правару STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максымальная сума пазыкі: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максымальная сума пазыкі для кампаніі (без уліку інфляцыі) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Адсоткавая стаўка: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Адсоткавая стаўка па пазыках; таксама кантралюе інфляцыю, калі тая ўключана diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 7477d2beb6..f7ebcc59c8 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Empréstimo Inicial Máximo: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantia máxima a ser emprestada para uma companhia (sem levar em conta a inflação) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Taxa de Juros: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Juros de empréstimo; também controla inflação, se ativado @@ -1926,13 +1927,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Demore {STRING} STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Tempo tomado para cada recálculo de um componente de um gráfico. Quando um recálculo começa, um processo é criado e é executado por esse número de dias. Quanto menos dias você define, maior a chance do processo não terminar quando era para ter terminado. Nesse caso, o jogo irá parar até ele terminar ("lag"). Quanto maior você definir isso, mais tempo leva para a distribuição ser atualizada quando as rotas mudarem. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para passageiros: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"simétrico" significa que aproximadamente a mesma quantidade de passageiros será enviada da estação A para a estação B assim como de B para A. "assimétrico" significa que a quantidade de passageiros enviada em ambas as direções será arbitrária. "manual" significa que não haverá distribuição automática. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simétrico" significa que aproximadamente o mesmo número de passageiros irá de uma estação A para uma estação B como de B para A. "Assimétrico" significa que um número arbitrário de passageiros pode ir em qualquer direção. "Manual" significa que não haverá distribuição automática para os passageiros. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribuição para correios: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"simétrico" significa que aproximadamente a mesma quantidade de correio será enviada da estação A para a estação B assim como de B para A. "assimétrico" significa que a quantidade de correio enviada em ambas as direções será arbitrária. "manual" significa que não haverá distribuição automática. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Simétrico" significa que aproximadamente a mesma quantidade de correspondência será enviada de uma estação A para uma estação B como de B para A. "Assimétrica" significa que quantidades arbitrárias de correspondência podem ser enviadas em qualquer direção. "Manual" significa que nenhuma distribuição automática ocorrerá por correio. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribuição para classe BLINDADOS de carga: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe BLINDADO indica objetos de valor no clima temperado, diamantes no subtropical ou ouro no subártico. NewGRF's podem mudar isso. "simétrico" significa que aproximadamente a mesma quantidade de carga será enviada da estação A para a estação B assim como de B para A. "assimétrico" significa que quantidades de carga arbitrárias serão enviadas em ambas as direções. "manual" significa que não haverá distribuição automática. Para objetos de valor, sugere-se usar "assimétrico" ou "manual" para subártico, já que bancos não enviam ouro de volta a minas. Para temperado e subtropical você pode selecionar "simétrico", já que bancos trocam objetos de valor entre si. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :A classe de carga BLINDADA contém objetos de valor em clima temperado, diamantes em clima subtropical ou ouro em clima subártico. NewGRFs podem mudar isso. "Simétrica" significa que aproximadamente a mesma quantidade dessa carga será enviada de uma estação A para uma estação B como de B para A. "Assimétrica" significa que quantidades arbitrárias dessa carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática para aquela carga. Recomenda-se definir isso como assimétrico ou manual ao jogar subártico ou subtropical, pois os bancos só recebem carga nesses climas. Para temperado, você também pode escolher simétrico, pois os bancos enviarão objetos de valor de volta ao banco de origem. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribuição para outras classes de carga: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"assimétrico" significa que quantidades de carga arbitrárias serão enviadas em ambas as direções. "manual" significa que não haverá distribuição automática. Você provavelmente irá querer usar "assimétrico" ou "manual". +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Assimétrico" significa que quantidades arbitrárias de carga podem ser enviadas em qualquer direção. "Manual" significa que não haverá distribuição automática dessas cargas. ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :assimétrico @@ -2699,6 +2700,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Ferroviária STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selecionar Ponte Rodoviária STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Seleção de ponte - clique na ponte desejada para construir +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensa, Aço STR_BRIDGE_NAME_GIRDER_STEEL :Vigas, Aço STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Aço diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 6e9f0d2ac0..cf14e81673 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1128,6 +1128,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :дясно STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимален начален заем: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимално количество заем за компания (без отчитане на инфлацията) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Лихвен процент: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Лихвен процент на заемите; също така контролира инфлацията ако е разрешена diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 6765231f44..6184e9b971 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dreta STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstec inicial màxim: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantitat màxima del préstec que pot demanar una companyia (sense tenir en compte la inflació) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Taxa d'interès: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Tipus d'interès dels préstecs; també controla la inflació, si està activada diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 2ccafddfaf..1f18546230 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -578,6 +578,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Сулахай STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Варринче STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Сылтӑмра +###setting-zero-is-special diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 309ae94c89..3e5a8beb48 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1248,6 +1248,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Desno STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Najveći početni zajam: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najveći iznos koji tvrtka može pozajmiti (ne uzimajući inflaciju u obzir) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Kamatna stopa: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Kamatna stopa zajmova; također kontrolira i inflaciju ako je uključena diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 625c1c5b30..4903cf4dcf 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1293,6 +1293,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :vpravo STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximální půjčka: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Jak moc si může společnost půjčit (bez ohledu na inflaci) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Výše úroků: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Výše úroků z půjček; rovněž ovlivňuje inflaci, pokud je zapnuta diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 45720f744e..60d334d9c9 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1182,6 +1182,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Højre STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum startlån: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimumbeløb et selskab kan låne (uden at tage inflation i betragtning) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Lånerente: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lånerente; kontrollerer også inflationen hvis aktiveret diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 0f1427b1cb..8220e30f4b 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rechts STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximale beginlening: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag dat een bedrijf kan lenen (zonder rekening te houden met de inflatie) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Rente van lening: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Percentage rente op lening; bepaald ook het inflatiecijfer wanneer ingeschakeld diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 669d72c50c..935c2d48ff 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 78bb6352c3..2d9da3ed13 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 480b1c46bc..786a7c5ba1 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1090,6 +1090,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centre STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dekstre STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimuma komenca prunto: {STRING} +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Rentumtarifoj: {STRING} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 0d0b709cf7..7eb26fe4bc 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1231,6 +1231,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Paremal STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Stardilaenu ülempiirang: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurim summa, mida ettevõte saab laenata (arvestamata inflatsiooni) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Intressimäär: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Laenu intressimäär; ühtlasi juhib inflatsiooni, kui inflatsioon on aktiveeritud diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index a8a973becc..431b18d703 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1087,6 +1087,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Høgra STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Hægst loyvda byrjunar lán: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Mest loyvda upphæddin ein fyritøka kann lána (uttan at taka virðisminkan til eftirtektar) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Rentu stigi: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Rentustigi á láni, stýrir eisini virðisminkan um hon er sligin til diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index dac2c7b509..dbd0e04f1d 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :oikealla STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Suurin mahdollinen laina alussa: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurin mahdollinen yhtiön ottama laina (ottamatta huomioon inflaatiota) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Korko: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lainan korko; ohjaa myös inflaatiota mikäli käytössä diff --git a/src/lang/french.txt b/src/lang/french.txt index c485ef3aca..7f0ffa521f 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :À droite STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Emprunt initial maximum{NBSP}: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Montant maximum qu'une compagnie peut emprunter (sans tenir compte de l'inflation) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Taux d'intérêt{NBSP}: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Taux d’intérêt de l'emprunt{NBSP}; contrôle également l'inflation si activé diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 19bb320d54..ad62b9ec50 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1145,6 +1145,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rjochts STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimale startersliening: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimale bedrach hokker troch in bedriuw lient wurde kin (sûnder acht te slaan op de ynflaasje) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Rinte: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Rinte op liening; behearsket ek ynflaasje at dizze oan stiet diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 947089feab..bcfed5811e 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1329,6 +1329,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Ris an taobh de STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Iasad tòiseachaidh as motha: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :An t-airgead as motha as urrainn dha chompanaidh fhaighinn mar iasad (a' fàgail an atmhorachd dhan darna taobh) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Luach-rèidh: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Luach-rèidh iasaid; stiùiridh seo an atmhorachd cuideachd ma tha e an comas diff --git a/src/lang/galician.txt b/src/lang/galician.txt index ebaefa6def..b574786b3f 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dereita STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Crédito máximo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidade máxima de cartos que unha compañía pode pedir (sen ter en conta a inflación) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Taxa de interés: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :A taxa de interés do préstamo; controla tamén a inflación, se está activada diff --git a/src/lang/german.txt b/src/lang/german.txt index 6c96a74cf3..165938590c 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rechts STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Kreditlimit bei Spielbeginn: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaler Kredit für eine Firma (ohne Berücksichtigung der Inflation) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Zinssatz: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Zinssatz für Kredite; beeinflusst auch die Inflation, falls aktiv diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 75e3787de7..7d7e5e468c 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1312,6 +1312,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Δεξιά STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Μέγιστο αρχικό δάνειο: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Μέγιστο ποσό που μπορεί να δανειστεί μία εταιρία (χωρίς να λαμβάνεται υπόψη ο πληθωρισμός) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Επιτόκιο: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Επιτόκιο δανείων· επίσης ελέγχεται ο πληθωρισμός αν είναι ενεργοποιημένος diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index ac1a5dd518..f16c68e7cd 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1158,6 +1158,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :ימין STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :סכום הלוואה ראשוני: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :סכום מירבי שחברה יכולה ללוות (מבלי לקחת בחשבון אינפלציה) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :ריבית: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :ריבית עבור הלוואות; שולטת גם באינפלציה אם זו מאופשרות diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index b2f124e3b2..7d78dd3402 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -340,6 +340,7 @@ STR_CONFIG_SETTING_COMPANIES_OFF :बन्द ###length 3 +###setting-zero-is-special diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 8728460e36..bd8f71c88b 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1270,6 +1270,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Jobbra STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximális kezdeti hitelkeret: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálisan kölcsönözhető összeg (az inflációtól eltekintve) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Kamatláb: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Banki hitel kamat; inflációt is szabályozza, ha be van kapcsolva diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 08af721213..50f820575b 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1086,6 +1086,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Hægri STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Hámarkslán: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Hámarks upphæð sem fyrirtæki getur fengið lánað (ekki er gert ráð fyrir verðbólgu) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Vextir: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Vextir á lánum, stjórnar einnig verðbólgu, ef hún er virk diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 090010e89e..3cc90bdcb2 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -552,6 +552,7 @@ STR_CONFIG_SETTING_NONE :Nulo ###length 3 +###setting-zero-is-special diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index e8318a4f8b..ceea4ed657 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Kanan STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum pinjaman awal: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Jumlah maksimum yang dapat dipinjam (tanpa menghitung inflasi) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Bunga pinjaman: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Bunga pinjaman; juga mengendalikan inflasi jika dinyalakan diff --git a/src/lang/irish.txt b/src/lang/irish.txt index a879918469..507329e0d7 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1182,6 +1182,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Ar dheis STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Iasacht tosaigh uasta: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Uasmhéid is féidir le cuideachta a chur ar iasacht (gan boilsciú a chur san áireamh) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Ráta úis: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Ráta úis ar iasachtaí; rialaíonn sé seo boilsciú freisin, má tá sé cumasaithe diff --git a/src/lang/italian.txt b/src/lang/italian.txt index fa1cdde290..38441f794c 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1241,6 +1241,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Destra STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Prestito massimo iniziale: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Ammontare massimo di denaro che una compagnia può chiedere in prestito (senza tenere conto dell'inflazione). +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Tasso d'interesse: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Tasso d'interesse sul prestito; controlla anche l'abilitazione dell'inflazione. diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 98d2eb8ed7..422c0e0aca 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1197,6 +1197,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :初期の借入最大額: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :初期の借入限度額を設定します (インフレは考慮されません) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :金利: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :借入利率を設定します (インフレ設定を有効にしたときのインフレ率にも影響します) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 96d99a6917..59f4329b98 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :오른쪽 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :최대 초기 대출금: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. (여기서 설정한 값은 인플레이션에 의한 효과를 적용하지 않은 값입니다.) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :대출 금리: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :대출 금리입니다. 인플레이션 설정이 켜져있는 경우 인플레이션의 영향을 받습니다. diff --git a/src/lang/latin.txt b/src/lang/latin.txt index efba0d6a19..d898808b07 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1321,6 +1321,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dextro STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Creditum maximum in initio: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Copia crediti maxima (sine inflatione) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Proportio faenoris: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Proportio faenoris creditorum; etiam inflationem afficit, si inflatio adest diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index f96ecbb92c..7638db7955 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1208,6 +1208,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :pa labi STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimālais sākotnējais aizdevums: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimālais aizdevuma daudzums, ko uzņēmums var izsniegt (neskaitot inflāciju) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Procentu likme: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Aizdevumu procentu likme; ja ieslēgts, ietekmē arī inflāciju diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 6c611c5d70..67f3992091 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1399,6 +1399,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dešinėje STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Didžiausia pradinė paskola: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Didžiausia paskola, kokią kompanija gali gauti iš banko (neatsižvelgiant į infliaciją) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Palūkanų norma: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Paskolos palūkanų norma. Taip pat įtakoja infliaciją (jei ji įgalinta) diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 4002b3610f..16f5b9ab5d 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Riets STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximalen Ufanksloun: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalwäert den eng Firma kann léinen (ouni Inflatioun matzerechnen) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Zënssaz: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Zënssaz; kontrolléiert och d'Inflatioun wann ugeschalt diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index ec794d034b..27b403ce2e 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -859,6 +859,7 @@ STR_CONFIG_SETTING_REALISTIC :Реален ###length 3 +###setting-zero-is-special diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 61e35adbc2..e63b065827 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1088,6 +1088,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Kanan STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum pinjaman permulaan: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Rantaian industri +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Kadar faedah: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Kadar faedah pinjaman; juga mengawal inflasi, jika dibolehkan diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 3518e7c8dd..5765868414 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -466,6 +466,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :oħrajn ###length 3 +###setting-zero-is-special STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Stabbilixxi l-kosti għal manutenzjoni u servizzi fuq vetturi u infrastruttura diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index 1021a16b71..ff2c89b235 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -796,6 +796,7 @@ STR_CONFIG_SETTING_REALISTIC :खरेखु ###length 3 +###setting-zero-is-special diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index fe1a54ca2f..93dfe5ad59 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1188,6 +1188,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Høyre STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimalt innledende lån: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Det maksimale beløp et selskap kan låne (uten å ta inflasjon i betraktning) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Lånerente: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lånerente; kontrollerer også inflasjonen, hvis aktivert diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index c210846e9b..101a8fd9c1 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1126,6 +1126,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Høgre STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimalt startlån: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimalt lån eit firma kan ta opp (utan å reikne med inflasjon) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Rente: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lånerente; kontrollerar óg mogleg inflasjon diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 319ad9549b..7c7cc26ebf 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1105,6 +1105,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :مرکز STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :راست STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :حداکثر اعتبار اولیه: {STRING} +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :نرخ سود: {STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index cde33df6dd..66bcaacf15 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1586,6 +1586,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :z prawej strony STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksymalna wysokość początkowej pożyczki: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksymalna wysokość pożyczki, jaką firma może zaciągnąć (bez uwzględnienia inflacji) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Oprocentowanie: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Oprocentowanie pożyczki; kontroluje też inflację, jeśli jest włączona diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index ac331efa32..276839c9dd 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantia máxima que uma companhia pode pedir (sem ter em conta a inflação) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Taxa de juro: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Taxa de juro do empréstimo; também controla a inflação, se ativo diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index d9c6299b0b..77edcc4f81 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :dreapta STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valoarea maximă a împrumutului initial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valoarea maximă pe care o companie o poate împrumuta (fără a ține cont de inflație) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Rata dobânzii: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Rata dobânzii; de asemenea controlează inflația dacă este activată diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 1421d18ab9..15448daf9d 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1357,6 +1357,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :справа STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимальная сумма кредита: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальная сумма кредита для компании (без учета инфляции) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Процентная ставка: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Процентная ставка по кредитам; также устанавливает уровень инфляции, если та включена. diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index a29aab1a06..c7e5dd05a3 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1401,6 +1401,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Desno STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Najveći zajam na početku: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najveći iznos koji preduzeće može da pozajmi (ne uzimajući u obzir inflaciju) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Kamatna stopa: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Kamatna stopa na zajam; ako je omogućena, kontroliše inflaciju diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index bb9d6b7a61..dc54b7a4ea 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右侧 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大初始贷款: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :贷款利率: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :贷款利率;如果通货膨胀启用,将同时影响通货膨胀率。 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index aa61dc4b14..023ae5a0f1 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1274,6 +1274,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :vpravo STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximálny počiatočný úver: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálna množstvo peňazí ktoré si môže spoločnosť požičať (bez inflácie) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Úroková sadzba: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Úroková sadzba úveru; kontroluje infláciu ak je povolená diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 700c8ecb42..98b73aeddc 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1281,6 +1281,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Desno STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Najvišje začetno posojilo: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najvišji znesek, ki si ga podjetje lahko izposodi (ni vključen izračun inflacije) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Obrestna mera: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Obrestna mera; kontrolira tudi inflacijo, če je omogočena. diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index bbe74b23b9..7cec150d8d 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Derecha STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstamo máximo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidad máxima que una empresa puede recibir como préstamo (sin tener en cuenta la inflación) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Porcentaje de interés: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Porcentaje de interés de los préstamos; también controla la inflación, en caso de que esté activada diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 4d878492ed..528b030d9c 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Derecha STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Máximo préstamo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Máxima cantidad que una empresa puede pedir prestada (sin tener en cuenta la inflación) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Porcentaje de interés: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Tasa de interés del préstamo; controla también la inflación, en caso de estar activada diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 8289cd3941..c6ecec245e 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Höger STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximalt startlån: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalt belopp ett företag kan låna (där inflationen inte tas med i beräkningen) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Räntenivå: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Räntenivå för lån; styr även inflationen om sådan är aktiverad diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 556ede8912..eb82e80c5d 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1142,6 +1142,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :வலது STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :அதிகபட்ச ஆரம்ப கடன்: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :ஒரு நிறுவனத்தால் பெறமுடியும் கடன் (பணவீக்கத்தினைக் கணக்கில் எடுத்துக் கொள்ளாமல்) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :வட்டி: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :கடன் வட்டி;செயற்படுத்தினால் பணவீக்கத்தினையும் கட்டுப்படுத்தும் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 6ebbe16e15..e551f3e119 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1141,6 +1141,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :ขวา STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :เงินกู้เริ่มต้นสูงสุด: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :บริษัท สามารถกู้ยืมเงินจำนวนสูงสุด (โดยไม่คำนึงถึงอัตราเงินเฟ้อเข้าบัญชี) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :ดอกเบี้ย: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :อัตราดอกเบี้ยเงินกู้; มีผลกับอัตราเงินเฟ้อถ้าเปิดใช้งาน diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 1bfec5e00a..fe647d978e 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :靠右 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大貸款額:{STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最多可借多少錢(此設定的值排除了通貨膨脹因素)。 +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :息率:{STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :設定貸款息率。如啟用了通貨膨脹的設定,則此設定同時決定通脹率。 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index d7e4d82300..d1d82287a6 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Sağ STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :En yüsek açılış borcu: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Bir şirketin alabileceği en fazla borç (enflasyon hesaba katılmadan) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Faiz oranı: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Borç faiz oranı; eğer aktifse aynı zamanda enflasyonu da belirler diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 100c0d6afd..09b89dd3a2 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1334,6 +1334,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :правору STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимальна сума позики: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальна сума позики для компанії (без урахування інфляції) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Процентна ставка: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Процентна ставка за позиками; також контролює інфляцію, якщо вона увімкнена diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 14f45e478e..3abf30218e 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1057,6 +1057,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :بائیں STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :درمیان STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :دائیں +###setting-zero-is-special diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index bab542223b..0bb236a3c2 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Phải STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Khoảng vay khởi nghiệp tối đa: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Hạn mức tối đa một công ty có thể vay (không tính lạm phát) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Lãi suất vay: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lãi xuất vay; ảnh hưởng tới cả lạm phát nếu bật tùy chọn đó diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 4896b326e1..0260137973 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1128,6 +1128,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :De STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Benthyciad agoriadol uchafsymol: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Y swm uchaf y gall cwmni fenthyca (heb ustyried chwyddiant) +###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Cyfradd chwyddiant: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Cyfradd chwyddiant y benthyciad; hefyd chwyddiant yr economi os y galluogir From b364b417686f6631c4031404a10d53d086affe41 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 3 Feb 2023 18:44:54 +0000 Subject: [PATCH 21/42] Update: Translations from eints english (us): 2 changes by 2TallTyler finnish: 2 changes by hpiirai catalan: 2 changes by J0anJosep dutch: 2 changes by Afoklala --- src/lang/catalan.txt | 2 ++ src/lang/dutch.txt | 2 ++ src/lang/english_US.txt | 2 ++ src/lang/finnish.txt | 2 ++ 4 files changed, 8 insertions(+) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 6184e9b971..5804ee9cb2 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1207,7 +1207,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dreta STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstec inicial màxim: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantitat màxima del préstec que pot demanar una companyia (sense tenir en compte la inflació) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sense préstec {RED}Fa falta un script de partida que doni els fons inicials STR_CONFIG_SETTING_INTEREST_RATE :Taxa d'interès: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Tipus d'interès dels préstecs; també controla la inflació, si està activada diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 8220e30f4b..49e4fa07db 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1206,7 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rechts STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximale beginlening: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag dat een bedrijf kan lenen (zonder rekening te houden met de inflatie) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Geen lening {RED}Spelscript vereist voor aanvankelijk saldo STR_CONFIG_SETTING_INTEREST_RATE :Rente van lening: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Percentage rente op lening; bepaald ook het inflatiecijfer wanneer ingeschakeld diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 2d9da3ed13..9244642cf9 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1206,7 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan {RED}Requires Game Script to provide initial funds STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index dbd0e04f1d..ee4bf404b1 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1206,7 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :oikealla STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Suurin mahdollinen laina alussa: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurin mahdollinen yhtiön ottama laina (ottamatta huomioon inflaatiota) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ei lainaa {RED}Vaatii peliskriptin, joka tarjoaa alkupääoman STR_CONFIG_SETTING_INTEREST_RATE :Korko: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Lainan korko; ohjaa myös inflaatiota mikäli käytössä From 6aafccfb22ff7f6ab81f46576930a1e1992be19c Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 4 Feb 2023 18:44:14 +0000 Subject: [PATCH 22/42] Update: Translations from eints korean: 2 changes by telk5093 spanish: 2 changes by MontyMontana portuguese: 2 changes by azulcosta --- src/lang/korean.txt | 2 ++ src/lang/portuguese.txt | 2 ++ src/lang/spanish.txt | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 59f4329b98..bd35070cd1 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1207,7 +1207,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :오른쪽 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :최대 초기 대출금: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. (여기서 설정한 값은 인플레이션에 의한 효과를 적용하지 않은 값입니다.) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :대출 불가 {RED}초기 자금을 제공하려면 게임 스크립트가 필요합니다 STR_CONFIG_SETTING_INTEREST_RATE :대출 금리: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :대출 금리입니다. 인플레이션 설정이 켜져있는 경우 인플레이션의 영향을 받습니다. diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 276839c9dd..e70dfbe4c5 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1207,7 +1207,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantia máxima que uma companhia pode pedir (sem ter em conta a inflação) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sem empréstimo {RED}Requer Script de Jogo para fornecer fundos iniciais STR_CONFIG_SETTING_INTEREST_RATE :Taxa de juro: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Taxa de juro do empréstimo; também controla a inflação, se ativo diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 7cec150d8d..36ca821e03 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1207,7 +1207,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Derecha STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstamo máximo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidad máxima que una empresa puede recibir como préstamo (sin tener en cuenta la inflación) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sin préstamo {RED} Se necesita un script de juego para proporcionar fondos iniciales STR_CONFIG_SETTING_INTEREST_RATE :Porcentaje de interés: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Porcentaje de interés de los préstamos; también controla la inflación, en caso de que esté activada From cef9931e5333c6fd46ffa75e6873c8647950eeb0 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sat, 4 Feb 2023 00:55:11 +0100 Subject: [PATCH 23/42] Cleanup: GS don't have "start_date" --- src/ai/ai_gui.cpp | 2 +- src/game/game_gui.cpp | 28 +++++++++++----------------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index e861c56f47..0581513f6c 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -376,7 +376,7 @@ struct AISettingsWindow : public Window { TextColour colour; uint idx = 0; if (StrEmpty(config_item.description)) { - if (!strcmp(config_item.name, "start_date")) { + if (this->slot != OWNER_DEITY && !strcmp(config_item.name, "start_date")) { /* Build-in translation */ str = STR_AI_SETTINGS_START_DELAY; colour = TC_LIGHT_BLUE; diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index d111ff192c..c5285a7547 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -95,7 +95,7 @@ static WindowDesc _gs_config_desc( * Window to configure which GSs will start. */ struct GSConfigWindow : public Window { - ScriptConfig* gs_config; ///< The configuration we're modifying. + ScriptConfig *gs_config; ///< The configuration we're modifying. int line_height; ///< Height of a single GS-name line. int clicked_button; ///< The button we clicked. bool clicked_increase; ///< Whether we clicked the increase or decrease button. @@ -103,8 +103,8 @@ struct GSConfigWindow : public Window { bool closing_dropdown; ///< True, if the dropdown list is currently closing. GUITimer timeout; ///< Timeout for unclicking the button. int clicked_row; ///< The clicked row of settings. - Scrollbar* vscroll; ///< Cache of the vertical scrollbar. - typedef std::vector VisibleSettingsList; ///< typdef for a vector of script settings + Scrollbar *vscroll; ///< Cache of the vertical scrollbar. + typedef std::vector VisibleSettingsList; ///< typdef for a vector of script settings VisibleSettingsList visible_settings; ///< List of visible GS settings GSConfigWindow() : Window(&_gs_config_desc), @@ -138,7 +138,7 @@ struct GSConfigWindow : public Window { { visible_settings.clear(); - for (const auto& item : *this->gs_config->GetConfigList()) { + for (const auto &item : *this->gs_config->GetConfigList()) { bool no_hide = (item.flags & SCRIPTCONFIG_DEVELOPER) == 0; if (no_hide || _settings_client.gui.ai_developer_tools) { visible_settings.push_back(&item); @@ -148,7 +148,7 @@ struct GSConfigWindow : public Window { this->vscroll->SetCount((int)this->visible_settings.size()); } - void UpdateWidgetSize(int widget, Dimension* size, const Dimension& padding, Dimension* fill, Dimension* resize) override + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_GSC_SETTINGS: @@ -174,7 +174,7 @@ struct GSConfigWindow : public Window { return _game_mode != GM_NORMAL || Game::GetInstance() != nullptr; } - void DrawWidget(const Rect& r, int widget) const override + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_GSC_GSLIST: { @@ -190,7 +190,7 @@ struct GSConfigWindow : public Window { break; } case WID_GSC_SETTINGS: { - ScriptConfig* config = this->gs_config; + ScriptConfig *config = this->gs_config; VisibleSettingsList::const_iterator it = this->visible_settings.begin(); int i = 0; for (; !this->vscroll->IsVisible(i); i++) it++; @@ -204,7 +204,7 @@ struct GSConfigWindow : public Window { int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2; int text_y_offset = (this->line_height - FONT_HEIGHT_NORMAL) / 2; for (; this->vscroll->IsVisible(i) && it != visible_settings.end(); i++, it++) { - const ScriptConfigItem& config_item = **it; + const ScriptConfigItem &config_item = **it; int current_value = config->GetSetting((config_item).name); bool editable = this->IsEditableItem(config_item); @@ -212,14 +212,8 @@ struct GSConfigWindow : public Window { TextColour colour; uint idx = 0; if (StrEmpty(config_item.description)) { - if (!strcmp(config_item.name, "start_date")) { - /* Build-in translation */ - str = STR_AI_SETTINGS_START_DELAY; - colour = TC_LIGHT_BLUE; - } else { - str = STR_JUST_STRING; - colour = TC_ORANGE; - } + str = STR_JUST_STRING; + colour = TC_ORANGE; } else { str = STR_AI_SETTINGS_SETTING; colour = TC_LIGHT_BLUE; @@ -382,7 +376,7 @@ struct GSConfigWindow : public Window { } } - void OnQueryTextFinished(char* str) override + void OnQueryTextFinished(char *str) override { if (StrEmpty(str)) return; int32 value = atoi(str); From 78e3c93a25b032d3168105f56e562e2cc1d3654d Mon Sep 17 00:00:00 2001 From: glx22 Date: Sat, 4 Feb 2023 04:15:11 +0100 Subject: [PATCH 24/42] Fix: caption for GS settings window opened from debug window --- src/ai/ai_gui.cpp | 11 ++++++++++- src/lang/english.txt | 6 ++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 0581513f6c..c012809c72 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -339,6 +339,15 @@ struct AISettingsWindow : public Window { this->vscroll->SetCount((int)this->visible_settings.size()); } + void SetStringParameters(int widget) const override + { + switch (widget) { + case WID_AIS_CAPTION: + SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_SETTINGS_CAPTION_GAMESCRIPT : STR_AI_SETTINGS_CAPTION_AI); + break; + } + } + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_AIS_BACKGROUND) { @@ -593,7 +602,7 @@ private: static const NWidgetPart _nested_ai_settings_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_MAUVE), - NWidget(WWT_CAPTION, COLOUR_MAUVE, WID_AIS_CAPTION), SetDataTip(STR_AI_SETTINGS_CAPTION_AI, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_MAUVE, WID_AIS_CAPTION), SetDataTip(STR_AI_SETTINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_DEFSIZEBOX, COLOUR_MAUVE), EndContainer(), NWidget(NWID_HORIZONTAL), diff --git a/src/lang/english.txt b/src/lang/english.txt index 9e41ea5a26..732f3a6745 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4623,8 +4623,10 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Whole ma STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Heightmap screenshot STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot -# AI Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI Parameters +# Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters +STR_AI_SETTINGS_CAPTION_AI :AI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{RAW_STRING}: {ORANGE}{STRING1} From b080f24bd87d4f3130ea12abbc40f8b0ad92a8cf Mon Sep 17 00:00:00 2001 From: glx22 Date: Sat, 4 Feb 2023 04:17:55 +0100 Subject: [PATCH 25/42] Codechange: move windows common to AI and GS out of ai_gui --- src/ai/ai.hpp | 4 - src/ai/ai_core.cpp | 12 +- src/ai/ai_gui.cpp | 1264 +------------------------- src/ai/ai_gui.hpp | 7 - src/ai/ai_instance.cpp | 4 +- src/company_cmd.cpp | 4 +- src/game/game.hpp | 4 - src/game/game_core.cpp | 8 +- src/game/game_gui.cpp | 33 +- src/game/game_instance.cpp | 4 +- src/misc.cpp | 4 +- src/saveload/afterload.cpp | 4 +- src/script/CMakeLists.txt | 2 + src/script/api/script_controller.cpp | 4 +- src/script/api/script_log.cpp | 2 +- src/script/script_gui.cpp | 1256 +++++++++++++++++++++++++ src/script/script_gui.h | 23 + src/table/settings/gui_settings.ini | 2 +- src/toolbar_gui.cpp | 7 +- src/toolbar_gui.h | 2 +- src/widgets/CMakeLists.txt | 1 + src/widgets/ai_widget.h | 38 - src/widgets/game_widget.h | 2 +- src/widgets/script_widget.h | 52 ++ src/window.cpp | 4 +- src/window_type.h | 18 +- 26 files changed, 1391 insertions(+), 1374 deletions(-) create mode 100644 src/script/script_gui.cpp create mode 100644 src/script/script_gui.h create mode 100644 src/widgets/script_widget.h diff --git a/src/ai/ai.hpp b/src/ai/ai.hpp index 1e2e99d22f..e090303bd9 100644 --- a/src/ai/ai.hpp +++ b/src/ai/ai.hpp @@ -13,10 +13,6 @@ #include "../script/api/script_event_types.hpp" #include "../core/string_compare_type.hpp" #include "ai_scanner.hpp" -#include - -/** A list that maps AI names to their AIInfo object. */ -typedef std::map ScriptInfoList; /** * Main AI class. Contains all functions needed to start, stop, save and load AIs. diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index 64a16758d1..220e7bdbd2 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -62,7 +62,7 @@ cur_company.Restore(); - InvalidateWindowData(WC_AI_DEBUG, 0, -1); + InvalidateWindowData(WC_SCRIPT_DEBUG, 0, -1); return; } @@ -113,8 +113,8 @@ cur_company.Restore(); - InvalidateWindowData(WC_AI_DEBUG, 0, -1); - CloseWindowById(WC_AI_SETTINGS, company); + InvalidateWindowData(WC_SCRIPT_DEBUG, 0, -1); + CloseWindowById(WC_SCRIPT_SETTINGS, company); } /* static */ void AI::Pause(CompanyID company) @@ -338,9 +338,9 @@ AI::scanner_library->RescanDir(); ResetConfig(); - InvalidateWindowData(WC_AI_LIST, 0, 1); - SetWindowClassesDirty(WC_AI_DEBUG); - InvalidateWindowClassesData(WC_AI_SETTINGS); + InvalidateWindowData(WC_SCRIPT_LIST, 0, 1); + SetWindowClassesDirty(WC_SCRIPT_DEBUG); + InvalidateWindowClassesData(WC_SCRIPT_SETTINGS); } /** diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index c012809c72..da60bb9f98 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -8,675 +8,23 @@ /** @file ai_gui.cpp %Window for configuring the AIs */ #include "../stdafx.h" -#include "../table/sprites.h" #include "../error.h" -#include "../settings_gui.h" -#include "../querystring_gui.h" -#include "../stringfilter_type.h" #include "../company_base.h" -#include "../company_gui.h" -#include "../strings_func.h" #include "../window_func.h" -#include "../gfx_func.h" -#include "../command_func.h" #include "../network/network.h" #include "../settings_func.h" #include "../network/network_content.h" -#include "../textfile_gui.h" -#include "../widgets/dropdown_type.h" -#include "../widgets/dropdown_func.h" -#include "../hotkeys.h" #include "../core/geometry_func.hpp" -#include "../guitimer_func.h" -#include "../company_cmd.h" -#include "../misc_cmd.h" #include "ai.hpp" #include "ai_gui.hpp" -#include "../script/api/script_log.hpp" #include "ai_config.hpp" #include "ai_info.hpp" -#include "ai_instance.hpp" -#include "../game/game.hpp" -#include "../game/game_config.hpp" -#include "../game/game_info.hpp" -#include "../game/game_instance.hpp" - +#include "../script/script_gui.h" #include "table/strings.h" -#include - #include "../safeguards.h" -static ScriptConfig *GetConfig(CompanyID slot) -{ - if (slot == OWNER_DEITY) return GameConfig::GetConfig(); - return AIConfig::GetConfig(slot); -} - -/** - * Window that let you choose an available AI. - */ -struct AIListWindow : public Window { - const ScriptInfoList *info_list; ///< The list of Scripts. - int selected; ///< The currently selected Script. - CompanyID slot; ///< The company we're selecting a new Script for. - int line_height; ///< Height of a row in the matrix widget. - Scrollbar *vscroll; ///< Cache of the vertical scrollbar. - - /** - * Constructor for the window. - * @param desc The description of the window. - * @param slot The company we're changing the AI for. - */ - AIListWindow(WindowDesc *desc, CompanyID slot) : Window(desc), - slot(slot) - { - if (slot == OWNER_DEITY) { - this->info_list = Game::GetUniqueInfoList(); - } else { - this->info_list = AI::GetUniqueInfoList(); - } - - this->CreateNestedTree(); - this->vscroll = this->GetScrollbar(WID_AIL_SCROLLBAR); - this->FinishInitNested(); // Initializes 'this->line_height' as side effect. - - this->vscroll->SetCount((int)this->info_list->size() + 1); - - /* Try if we can find the currently selected AI */ - this->selected = -1; - if (GetConfig(slot)->HasScript()) { - ScriptInfo *info = GetConfig(slot)->GetInfo(); - int i = 0; - for (const auto &item : *this->info_list) { - if (item.second == info) { - this->selected = i; - break; - } - - i++; - } - } - } - - void SetStringParameters(int widget) const override - { - switch (widget) { - case WID_AIL_CAPTION: - SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_LIST_CAPTION_GAMESCRIPT : STR_AI_LIST_CAPTION_AI); - break; - } - } - - void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override - { - if (widget == WID_AIL_LIST) { - this->line_height = FONT_HEIGHT_NORMAL + padding.height; - - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; - } - } - - void DrawWidget(const Rect &r, int widget) const override - { - switch (widget) { - case WID_AIL_LIST: { - /* Draw a list of all available AIs. */ - Rect tr = r.Shrink(WidgetDimensions::scaled.matrix); - /* First AI in the list is hardcoded to random */ - if (this->vscroll->IsVisible(0)) { - DrawString(tr, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE); - tr.top += this->line_height; - } - int i = 0; - for (const auto &item : *this->info_list) { - i++; - if (this->vscroll->IsVisible(i)) { - DrawString(tr, item.second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); - tr.top += this->line_height; - } - } - break; - } - case WID_AIL_INFO_BG: { - ScriptInfo *selected_info = nullptr; - int i = 0; - for (const auto &item : *this->info_list) { - i++; - if (this->selected == i - 1) selected_info = static_cast(item.second); - } - /* Some info about the currently selected AI. */ - if (selected_info != nullptr) { - Rect tr = r.Shrink(WidgetDimensions::scaled.frametext, WidgetDimensions::scaled.framerect); - SetDParamStr(0, selected_info->GetAuthor()); - DrawString(tr, STR_AI_LIST_AUTHOR); - tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; - SetDParam(0, selected_info->GetVersion()); - DrawString(tr, STR_AI_LIST_VERSION); - tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; - if (selected_info->GetURL() != nullptr) { - SetDParamStr(0, selected_info->GetURL()); - DrawString(tr, STR_AI_LIST_URL); - tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; - } - SetDParamStr(0, selected_info->GetDescription()); - DrawStringMultiLine(tr, STR_JUST_RAW_STRING, TC_WHITE); - } - break; - } - } - } - - /** - * Changes the AI of the current slot. - */ - void ChangeAI() - { - if (this->selected == -1) { - GetConfig(slot)->Change(nullptr); - } else { - ScriptInfoList::const_iterator it = this->info_list->begin(); - for (int i = 0; i < this->selected; i++) it++; - GetConfig(slot)->Change((*it).second->GetName(), (*it).second->GetVersion()); - } - InvalidateWindowData(WC_GAME_OPTIONS, slot == OWNER_DEITY ? WN_GAME_OPTIONS_GS : WN_GAME_OPTIONS_AI); - InvalidateWindowClassesData(WC_AI_SETTINGS); - CloseWindowByClass(WC_QUERY_STRING); - InvalidateWindowClassesData(WC_TEXTFILE); - } - - void OnClick(Point pt, int widget, int click_count) override - { - switch (widget) { - case WID_AIL_LIST: { // Select one of the AIs - int sel = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_AIL_LIST) - 1; - if (sel < (int)this->info_list->size()) { - this->selected = sel; - this->SetDirty(); - if (click_count > 1) { - this->ChangeAI(); - this->Close(); - } - } - break; - } - - case WID_AIL_ACCEPT: { - this->ChangeAI(); - this->Close(); - break; - } - - case WID_AIL_CANCEL: - this->Close(); - break; - } - } - - void OnResize() override - { - this->vscroll->SetCapacityFromWidget(this, WID_AIL_LIST); - } - - /** - * Some data on this window has become invalid. - * @param data Information about the changed data. - * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. - */ - void OnInvalidateData(int data = 0, bool gui_scope = true) override - { - if (_game_mode == GM_NORMAL && Company::IsValidID(this->slot)) { - this->Close(); - return; - } - - if (!gui_scope) return; - - this->vscroll->SetCount((int)this->info_list->size() + 1); - - /* selected goes from -1 .. length of ai list - 1. */ - this->selected = std::min(this->selected, this->vscroll->GetCount() - 2); - } -}; - -/** Widgets for the AI list window. */ -static const NWidgetPart _nested_ai_list_widgets[] = { - NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_MAUVE), - NWidget(WWT_CAPTION, COLOUR_MAUVE, WID_AIL_CAPTION), SetDataTip(STR_AI_LIST_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_DEFSIZEBOX, COLOUR_MAUVE), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIL_LIST), SetMinimalSize(188, 112), SetFill(1, 1), SetResize(1, 1), SetMatrixDataTip(1, 0, STR_AI_LIST_TOOLTIP), SetScrollbar(WID_AIL_SCROLLBAR), - NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, WID_AIL_SCROLLBAR), - EndContainer(), - NWidget(WWT_PANEL, COLOUR_MAUVE, WID_AIL_INFO_BG), SetMinimalTextLines(8, WidgetDimensions::unscaled.framerect.Vertical() + WidgetDimensions::unscaled.vsep_normal * 3), SetResize(1, 0), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_AIL_ACCEPT), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_LIST_ACCEPT, STR_AI_LIST_ACCEPT_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_AIL_CANCEL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_LIST_CANCEL, STR_AI_LIST_CANCEL_TOOLTIP), - EndContainer(), - NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), - EndContainer(), -}; - -/** Window definition for the ai list window. */ -static WindowDesc _ai_list_desc( - WDP_CENTER, "settings_script_list", 200, 234, - WC_AI_LIST, WC_NONE, - 0, - _nested_ai_list_widgets, lengthof(_nested_ai_list_widgets) -); - -/** - * Open the AI list window to chose an AI for the given company slot. - * @param slot The slot to change the AI of. - */ -void ShowAIListWindow(CompanyID slot) -{ - CloseWindowByClass(WC_AI_LIST); - new AIListWindow(&_ai_list_desc, slot); -} - -/** - * Window for settings the parameters of an AI. - */ -struct AISettingsWindow : public Window { - CompanyID slot; ///< The currently show company's setting. - ScriptConfig *ai_config; ///< The configuration we're modifying. - int clicked_button; ///< The button we clicked. - bool clicked_increase; ///< Whether we clicked the increase or decrease button. - bool clicked_dropdown; ///< Whether the dropdown is open. - bool closing_dropdown; ///< True, if the dropdown list is currently closing. - GUITimer timeout; ///< Timeout for unclicking the button. - int clicked_row; ///< The clicked row of settings. - int line_height; ///< Height of a row in the matrix widget. - Scrollbar *vscroll; ///< Cache of the vertical scrollbar. - typedef std::vector VisibleSettingsList; ///< typdef for a vector of script settings - VisibleSettingsList visible_settings; ///< List of visible AI settings - - /** - * Constructor for the window. - * @param desc The description of the window. - * @param slot The company we're changing the settings for. - */ - AISettingsWindow(WindowDesc *desc, CompanyID slot) : Window(desc), - slot(slot), - clicked_button(-1), - clicked_dropdown(false), - closing_dropdown(false), - timeout(0) - { - this->ai_config = GetConfig(slot); - - this->CreateNestedTree(); - this->vscroll = this->GetScrollbar(WID_AIS_SCROLLBAR); - this->FinishInitNested(slot); // Initializes 'this->line_height' as side effect. - - this->RebuildVisibleSettings(); - } - - /** - * Rebuilds the list of visible settings. AI settings with the flag - * AICONFIG_AI_DEVELOPER set will only be visible if the game setting - * gui.ai_developer_tools is enabled. - */ - void RebuildVisibleSettings() - { - visible_settings.clear(); - - for (const auto &item : *this->ai_config->GetConfigList()) { - bool no_hide = (item.flags & SCRIPTCONFIG_DEVELOPER) == 0; - if (no_hide || _settings_client.gui.ai_developer_tools) { - visible_settings.push_back(&item); - } - } - - this->vscroll->SetCount((int)this->visible_settings.size()); - } - - void SetStringParameters(int widget) const override - { - switch (widget) { - case WID_AIS_CAPTION: - SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_SETTINGS_CAPTION_GAMESCRIPT : STR_AI_SETTINGS_CAPTION_AI); - break; - } - } - - void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override - { - if (widget == WID_AIS_BACKGROUND) { - this->line_height = std::max(SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL) + padding.height; - - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; - } - } - - void DrawWidget(const Rect &r, int widget) const override - { - if (widget != WID_AIS_BACKGROUND) return; - - ScriptConfig *config = this->ai_config; - VisibleSettingsList::const_iterator it = this->visible_settings.begin(); - int i = 0; - for (; !this->vscroll->IsVisible(i); i++) it++; - - Rect ir = r.Shrink(WidgetDimensions::scaled.framerect); - bool rtl = _current_text_dir == TD_RTL; - Rect br = ir.WithWidth(SETTING_BUTTON_WIDTH, rtl); - Rect tr = ir.Indent(SETTING_BUTTON_WIDTH + WidgetDimensions::scaled.hsep_wide, rtl); - - int y = r.top; - int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2; - int text_y_offset = (this->line_height - FONT_HEIGHT_NORMAL) / 2; - for (; this->vscroll->IsVisible(i) && it != visible_settings.end(); i++, it++) { - const ScriptConfigItem &config_item = **it; - int current_value = config->GetSetting((config_item).name); - bool editable = this->IsEditableItem(config_item); - - StringID str; - TextColour colour; - uint idx = 0; - if (StrEmpty(config_item.description)) { - if (this->slot != OWNER_DEITY && !strcmp(config_item.name, "start_date")) { - /* Build-in translation */ - str = STR_AI_SETTINGS_START_DELAY; - colour = TC_LIGHT_BLUE; - } else { - str = STR_JUST_STRING; - colour = TC_ORANGE; - } - } else { - str = STR_AI_SETTINGS_SETTING; - colour = TC_LIGHT_BLUE; - SetDParamStr(idx++, config_item.description); - } - - if ((config_item.flags & SCRIPTCONFIG_BOOLEAN) != 0) { - DrawBoolButton(br.left, y + button_y_offset, current_value != 0, editable); - SetDParam(idx++, current_value == 0 ? STR_CONFIG_SETTING_OFF : STR_CONFIG_SETTING_ON); - } else { - if (config_item.complete_labels) { - DrawDropDownButton(br.left, y + button_y_offset, COLOUR_YELLOW, this->clicked_row == i && clicked_dropdown, editable); - } else { - DrawArrowButtons(br.left, y + button_y_offset, COLOUR_YELLOW, (this->clicked_button == i) ? 1 + (this->clicked_increase != rtl) : 0, editable && current_value > config_item.min_value, editable && current_value < config_item.max_value); - } - if (config_item.labels != nullptr && config_item.labels->Contains(current_value)) { - SetDParam(idx++, STR_JUST_RAW_STRING); - SetDParamStr(idx++, config_item.labels->Find(current_value)->second); - } else { - SetDParam(idx++, STR_JUST_INT); - SetDParam(idx++, current_value); - } - } - - DrawString(tr.left, tr.right, y + text_y_offset, str, colour); - y += this->line_height; - } - } - - void OnPaint() override - { - if (this->closing_dropdown) { - this->closing_dropdown = false; - this->clicked_dropdown = false; - } - this->DrawWidgets(); - } - - void OnClick(Point pt, int widget, int click_count) override - { - switch (widget) { - case WID_AIS_BACKGROUND: { - Rect r = this->GetWidget(widget)->GetCurrentRect().Shrink(WidgetDimensions::scaled.matrix, RectPadding::zero); - int num = (pt.y - r.top) / this->line_height + this->vscroll->GetPosition(); - if (num >= (int)this->visible_settings.size()) break; - - VisibleSettingsList::const_iterator it = this->visible_settings.begin(); - for (int i = 0; i < num; i++) it++; - const ScriptConfigItem config_item = **it; - if (!this->IsEditableItem(config_item)) return; - - if (this->clicked_row != num) { - this->CloseChildWindows(WC_QUERY_STRING); - HideDropDownMenu(this); - this->clicked_row = num; - this->clicked_dropdown = false; - } - - bool bool_item = (config_item.flags & SCRIPTCONFIG_BOOLEAN) != 0; - - int x = pt.x - r.left; - if (_current_text_dir == TD_RTL) x = r.Width() - 1 - x; - - /* One of the arrows is clicked (or green/red rect in case of bool value) */ - int old_val = this->ai_config->GetSetting(config_item.name); - if (!bool_item && IsInsideMM(x, 0, SETTING_BUTTON_WIDTH) && config_item.complete_labels) { - if (this->clicked_dropdown) { - /* unclick the dropdown */ - HideDropDownMenu(this); - this->clicked_dropdown = false; - this->closing_dropdown = false; - } else { - int rel_y = (pt.y - r.top) % this->line_height; - - Rect wi_rect; - wi_rect.left = pt.x - (_current_text_dir == TD_RTL ? SETTING_BUTTON_WIDTH - 1 - x : x); - wi_rect.right = wi_rect.left + SETTING_BUTTON_WIDTH - 1; - wi_rect.top = pt.y - rel_y + (this->line_height - SETTING_BUTTON_HEIGHT) / 2; - wi_rect.bottom = wi_rect.top + SETTING_BUTTON_HEIGHT - 1; - - /* If the mouse is still held but dragged outside of the dropdown list, keep the dropdown open */ - if (pt.y >= wi_rect.top && pt.y <= wi_rect.bottom) { - this->clicked_dropdown = true; - this->closing_dropdown = false; - - DropDownList list; - for (int i = config_item.min_value; i <= config_item.max_value; i++) { - list.emplace_back(new DropDownListCharStringItem(config_item.labels->Find(i)->second, i, false)); - } - - ShowDropDownListAt(this, std::move(list), old_val, -1, wi_rect, COLOUR_ORANGE, true); - } - } - } else if (IsInsideMM(x, 0, SETTING_BUTTON_WIDTH)) { - int new_val = old_val; - if (bool_item) { - new_val = !new_val; - } else if (x >= SETTING_BUTTON_WIDTH / 2) { - /* Increase button clicked */ - new_val += config_item.step_size; - if (new_val > config_item.max_value) new_val = config_item.max_value; - this->clicked_increase = true; - } else { - /* Decrease button clicked */ - new_val -= config_item.step_size; - if (new_val < config_item.min_value) new_val = config_item.min_value; - this->clicked_increase = false; - } - - if (new_val != old_val) { - this->ai_config->SetSetting(config_item.name, new_val); - this->clicked_button = num; - this->timeout.SetInterval(150); - } - } else if (!bool_item && !config_item.complete_labels) { - /* Display a query box so users can enter a custom value. */ - SetDParam(0, old_val); - ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 10, this, CS_NUMERAL, QSF_NONE); - } - this->SetDirty(); - break; - } - - case WID_AIS_ACCEPT: - this->Close(); - break; - - case WID_AIS_RESET: - this->ai_config->ResetEditableSettings(_game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot))); - this->SetDirty(); - break; - } - } - - void OnQueryTextFinished(char *str) override - { - if (StrEmpty(str)) return; - int32 value = atoi(str); - - SetValue(value); - } - - void OnDropdownSelect(int widget, int index) override - { - assert(this->clicked_dropdown); - SetValue(index); - } - - void OnDropdownClose(Point pt, int widget, int index, bool instant_close) override - { - /* We cannot raise the dropdown button just yet. OnClick needs some hint, whether - * the same dropdown button was clicked again, and then not open the dropdown again. - * So, we only remember that it was closed, and process it on the next OnPaint, which is - * after OnClick. */ - assert(this->clicked_dropdown); - this->closing_dropdown = true; - this->SetDirty(); - } - - void OnResize() override - { - this->vscroll->SetCapacityFromWidget(this, WID_AIS_BACKGROUND); - } - - void OnRealtimeTick(uint delta_ms) override - { - if (this->timeout.Elapsed(delta_ms)) { - this->clicked_button = -1; - this->SetDirty(); - } - } - - /** - * Some data on this window has become invalid. - * @param data Information about the changed data. - * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. - */ - void OnInvalidateData(int data = 0, bool gui_scope = true) override - { - this->RebuildVisibleSettings(); - HideDropDownMenu(this); - this->CloseChildWindows(WC_QUERY_STRING); - } - -private: - bool IsEditableItem(const ScriptConfigItem &config_item) const - { - return _game_mode == GM_MENU - || _game_mode == GM_EDITOR - || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) - || (config_item.flags & SCRIPTCONFIG_INGAME) != 0 - || _settings_client.gui.ai_developer_tools; - } - - void SetValue(int value) - { - VisibleSettingsList::const_iterator it = this->visible_settings.begin(); - for (int i = 0; i < this->clicked_row; i++) it++; - const ScriptConfigItem config_item = **it; - if (_game_mode == GM_NORMAL && ((this->slot == OWNER_DEITY) || Company::IsValidID(this->slot)) && (config_item.flags & SCRIPTCONFIG_INGAME) == 0) return; - this->ai_config->SetSetting(config_item.name, value); - this->SetDirty(); - } -}; - -/** Widgets for the AI settings window. */ -static const NWidgetPart _nested_ai_settings_widgets[] = { - NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_MAUVE), - NWidget(WWT_CAPTION, COLOUR_MAUVE, WID_AIS_CAPTION), SetDataTip(STR_AI_SETTINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_DEFSIZEBOX, COLOUR_MAUVE), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_AIS_BACKGROUND), SetMinimalSize(188, 182), SetResize(1, 1), SetFill(1, 0), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_AIS_SCROLLBAR), - NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, WID_AIS_SCROLLBAR), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_AIS_ACCEPT), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_AIS_RESET), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_SETTINGS_RESET, STR_NULL), - EndContainer(), - NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), - EndContainer(), -}; - -/** Window definition for the AI settings window. */ -static WindowDesc _ai_settings_desc( - WDP_CENTER, "settings_script", 500, 208, - WC_AI_SETTINGS, WC_NONE, - 0, - _nested_ai_settings_widgets, lengthof(_nested_ai_settings_widgets) -); - -/** - * Open the AI settings window to change the AI settings for an AI. - * @param slot The CompanyID of the AI to change the settings. - */ -static void ShowAISettingsWindow(CompanyID slot) -{ - CloseWindowByClass(WC_AI_LIST); - CloseWindowByClass(WC_AI_SETTINGS); - new AISettingsWindow(&_ai_settings_desc, slot); -} - - -/** Window for displaying the textfile of a AI. */ -struct ScriptTextfileWindow : public TextfileWindow { - CompanyID slot; ///< View the textfile of this CompanyID slot. - - ScriptTextfileWindow(TextfileType file_type, CompanyID slot) : TextfileWindow(file_type), slot(slot) - { - this->OnInvalidateData(); - } - - void SetStringParameters(int widget) const override - { - if (widget == WID_TF_CAPTION) { - SetDParam(0, (slot == OWNER_DEITY) ? STR_CONTENT_TYPE_GAME_SCRIPT : STR_CONTENT_TYPE_AI); - SetDParamStr(1, GetConfig(slot)->GetInfo()->GetName()); - } - } - - void OnInvalidateData(int data = 0, bool gui_scope = true) override - { - const char *textfile = GetConfig(slot)->GetTextfile(file_type, slot); - if (textfile == nullptr) { - this->Close(); - } else { - this->LoadTextfile(textfile, (slot == OWNER_DEITY) ? GAME_DIR : AI_DIR); - } - } -}; - -/** - * Open the AI version of the textfile window. - * @param file_type The type of textfile to display. - * @param slot The slot the Script is using. - */ -void ShowScriptTextfileWindow(TextfileType file_type, CompanyID slot) -{ - CloseWindowById(WC_TEXTFILE, file_type); - new ScriptTextfileWindow(file_type, slot); -} - /** Widgets for the configure AI window. */ static const NWidgetPart _nested_ai_config_widgets[] = { @@ -747,8 +95,8 @@ struct AIConfigWindow : public Window { void Close() override { - CloseWindowByClass(WC_AI_LIST); - CloseWindowByClass(WC_AI_SETTINGS); + CloseWindowByClass(WC_SCRIPT_LIST); + CloseWindowByClass(WC_SCRIPT_SETTINGS); this->Window::Close(); } @@ -824,7 +172,7 @@ struct AIConfigWindow : public Window { void OnClick(Point pt, int widget, int click_count) override { if (widget >= WID_AIC_TEXTFILE && widget < WID_AIC_TEXTFILE + TFT_END) { - if (this->selected_slot == INVALID_COMPANY || GetConfig(this->selected_slot) == nullptr) return; + if (this->selected_slot == INVALID_COMPANY || AIConfig::GetConfig(this->selected_slot) == nullptr) return; ShowScriptTextfileWindow((TextfileType)(widget - WID_AIC_TEXTFILE), this->selected_slot); return; @@ -846,7 +194,7 @@ struct AIConfigWindow : public Window { case WID_AIC_LIST: { // Select a slot this->selected_slot = (CompanyID)this->vscroll->GetScrolledRowFromWidget(pt.y, this, widget); this->InvalidateData(); - if (click_count > 1 && this->selected_slot != INVALID_COMPANY) ShowAIListWindow((CompanyID)this->selected_slot); + if (click_count > 1 && this->selected_slot != INVALID_COMPANY) ShowScriptListWindow((CompanyID)this->selected_slot); break; } @@ -869,11 +217,11 @@ struct AIConfigWindow : public Window { break; case WID_AIC_CHANGE: // choose other AI - ShowAIListWindow((CompanyID)this->selected_slot); + ShowScriptListWindow((CompanyID)this->selected_slot); break; case WID_AIC_CONFIGURE: // change the settings for an AI - ShowAISettingsWindow((CompanyID)this->selected_slot); + ShowScriptSettingsWindow((CompanyID)this->selected_slot); break; case WID_AIC_CLOSE: @@ -906,12 +254,12 @@ struct AIConfigWindow : public Window { this->SetWidgetDisabledState(WID_AIC_DECREASE, GetGameSettings().difficulty.max_no_competitors == 0); this->SetWidgetDisabledState(WID_AIC_INCREASE, GetGameSettings().difficulty.max_no_competitors == MAX_COMPANIES - 1); this->SetWidgetDisabledState(WID_AIC_CHANGE, this->selected_slot == INVALID_COMPANY); - this->SetWidgetDisabledState(WID_AIC_CONFIGURE, this->selected_slot == INVALID_COMPANY || GetConfig(this->selected_slot)->GetConfigList()->size() == 0); + this->SetWidgetDisabledState(WID_AIC_CONFIGURE, this->selected_slot == INVALID_COMPANY || AIConfig::GetConfig(this->selected_slot)->GetConfigList()->size() == 0); this->SetWidgetDisabledState(WID_AIC_MOVE_UP, this->selected_slot == INVALID_COMPANY || !IsEditable((CompanyID)(this->selected_slot - 1))); this->SetWidgetDisabledState(WID_AIC_MOVE_DOWN, this->selected_slot == INVALID_COMPANY || !IsEditable((CompanyID)(this->selected_slot + 1))); for (TextfileType tft = TFT_BEGIN; tft < TFT_END; tft++) { - this->SetWidgetDisabledState(WID_AIC_TEXTFILE + tft, this->selected_slot == INVALID_COMPANY || (GetConfig(this->selected_slot)->GetTextfile(tft, this->selected_slot) == nullptr)); + this->SetWidgetDisabledState(WID_AIC_TEXTFILE + tft, this->selected_slot == INVALID_COMPANY || (AIConfig::GetConfig(this->selected_slot)->GetTextfile(tft, this->selected_slot) == nullptr)); } } }; @@ -923,597 +271,3 @@ void ShowAIConfigWindow() new AIConfigWindow(); } -/** - * Set the widget colour of a button based on the - * state of the script. (dead or alive) - * @param button the button to update. - * @param dead true if the script is dead, otherwise false. - * @param paused true if the script is paused, otherwise false. - * @return true if the colour was changed and the window need to be marked as dirty. - */ -static bool SetScriptButtonColour(NWidgetCore &button, bool dead, bool paused) -{ - /* Dead scripts are indicated with red background and - * paused scripts are indicated with yellow background. */ - Colours colour = dead ? COLOUR_RED : - (paused ? COLOUR_YELLOW : COLOUR_GREY); - if (button.colour != colour) { - button.colour = colour; - return true; - } - return false; -} - -/** - * Window with everything an AI prints via ScriptLog. - */ -struct AIDebugWindow : public Window { - static const uint MAX_BREAK_STR_STRING_LENGTH = 256; ///< Maximum length of the break string. - - static CompanyID ai_debug_company; ///< The AI that is (was last) being debugged. - int redraw_timer; ///< Timer for redrawing the window, otherwise it'll happen every tick. - int last_vscroll_pos; ///< Last position of the scrolling. - bool autoscroll; ///< Whether automatically scrolling should be enabled or not. - bool show_break_box; ///< Whether the break/debug box is visible. - static bool break_check_enabled; ///< Stop an AI when it prints a matching string - static char break_string[MAX_BREAK_STR_STRING_LENGTH]; ///< The string to match to the AI output - QueryString break_editbox; ///< Break editbox - static StringFilter break_string_filter; ///< Log filter for break. - static bool case_sensitive_break_check; ///< Is the matching done case-sensitive - int highlight_row; ///< The output row that matches the given string, or -1 - Scrollbar *vscroll; ///< Cache of the vertical scrollbar. - - ScriptLog::LogData *GetLogPointer() const - { - if (ai_debug_company == OWNER_DEITY) return (ScriptLog::LogData *)Game::GetInstance()->GetLogPointer(); - return (ScriptLog::LogData *)Company::Get(ai_debug_company)->ai_instance->GetLogPointer(); - } - - /** - * Check whether the currently selected AI/GS is dead. - * @return true if dead. - */ - bool IsDead() const - { - if (ai_debug_company == OWNER_DEITY) { - GameInstance *game = Game::GetInstance(); - return game == nullptr || game->IsDead(); - } - return !Company::IsValidAiID(ai_debug_company) || Company::Get(ai_debug_company)->ai_instance->IsDead(); - } - - /** - * Check whether a company is a valid AI company or GS. - * @param company Company to check for validity. - * @return true if company is valid for debugging. - */ - bool IsValidDebugCompany(CompanyID company) const - { - switch (company) { - case INVALID_COMPANY: return false; - case OWNER_DEITY: return Game::GetInstance() != nullptr; - default: return Company::IsValidAiID(company); - } - } - - /** - * Ensure that \c ai_debug_company refers to a valid AI company or GS, or is set to #INVALID_COMPANY. - * If no valid company is selected, it selects the first valid AI or GS if any. - */ - void SelectValidDebugCompany() - { - /* Check if the currently selected company is still active. */ - if (this->IsValidDebugCompany(ai_debug_company)) return; - - ai_debug_company = INVALID_COMPANY; - - for (const Company *c : Company::Iterate()) { - if (c->is_ai) { - ChangeToAI(c->index); - return; - } - } - - /* If no AI is available, see if there is a game script. */ - if (Game::GetInstance() != nullptr) ChangeToAI(OWNER_DEITY); - } - - /** - * Constructor for the window. - * @param desc The description of the window. - * @param number The window number (actually unused). - */ - AIDebugWindow(WindowDesc *desc, WindowNumber number) : Window(desc), break_editbox(MAX_BREAK_STR_STRING_LENGTH) - { - this->CreateNestedTree(); - this->vscroll = this->GetScrollbar(WID_AID_SCROLLBAR); - this->show_break_box = _settings_client.gui.ai_developer_tools; - this->GetWidget(WID_AID_BREAK_STRING_WIDGETS)->SetDisplayedPlane(this->show_break_box ? 0 : SZSP_HORIZONTAL); - this->FinishInitNested(number); - - if (!this->show_break_box) break_check_enabled = false; - - this->last_vscroll_pos = 0; - this->autoscroll = true; - this->highlight_row = -1; - - this->querystrings[WID_AID_BREAK_STR_EDIT_BOX] = &this->break_editbox; - - SetWidgetsDisabledState(!this->show_break_box, WID_AID_BREAK_STR_ON_OFF_BTN, WID_AID_BREAK_STR_EDIT_BOX, WID_AID_MATCH_CASE_BTN, WIDGET_LIST_END); - - /* Restore the break string value from static variable */ - this->break_editbox.text.Assign(this->break_string); - - this->SelectValidDebugCompany(); - this->InvalidateData(-1); - } - - void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override - { - if (widget == WID_AID_LOG_PANEL) { - resize->height = FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; - size->height = 14 * resize->height + WidgetDimensions::scaled.framerect.Vertical(); - } - } - - void OnPaint() override - { - this->SelectValidDebugCompany(); - - /* Draw standard stuff */ - this->DrawWidgets(); - - if (this->IsShaded()) return; // Don't draw anything when the window is shaded. - - bool dirty = false; - - /* Paint the company icons */ - for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { - NWidgetCore *button = this->GetWidget(i + WID_AID_COMPANY_BUTTON_START); - - bool valid = Company::IsValidAiID(i); - - /* Check whether the validity of the company changed */ - dirty |= (button->IsDisabled() == valid); - - /* Mark dead/paused AIs by setting the background colour. */ - bool dead = valid && Company::Get(i)->ai_instance->IsDead(); - bool paused = valid && Company::Get(i)->ai_instance->IsPaused(); - /* Re-paint if the button was updated. - * (note that it is intentional that SetScriptButtonColour is always called) */ - dirty |= SetScriptButtonColour(*button, dead, paused); - - /* Draw company icon only for valid AI companies */ - if (!valid) continue; - - byte offset = (i == ai_debug_company) ? 1 : 0; - DrawCompanyIcon(i, button->pos_x + button->current_x / 2 - 7 + offset, this->GetWidget(WID_AID_COMPANY_BUTTON_START + i)->pos_y + 2 + offset); - } - - /* Set button colour for Game Script. */ - GameInstance *game = Game::GetInstance(); - bool valid = game != nullptr; - bool dead = valid && game->IsDead(); - bool paused = valid && game->IsPaused(); - - NWidgetCore *button = this->GetWidget(WID_AID_SCRIPT_GAME); - dirty |= (button->IsDisabled() == valid) || SetScriptButtonColour(*button, dead, paused); - - if (dirty) this->InvalidateData(-1); - - /* If there are no active companies, don't display anything else. */ - if (ai_debug_company == INVALID_COMPANY) return; - - ScriptLog::LogData *log = this->GetLogPointer(); - - int scroll_count = (log == nullptr) ? 0 : log->used; - if (this->vscroll->GetCount() != scroll_count) { - this->vscroll->SetCount(scroll_count); - - /* We need a repaint */ - this->SetWidgetDirty(WID_AID_SCROLLBAR); - } - - if (log == nullptr) return; - - /* Detect when the user scrolls the window. Enable autoscroll when the - * bottom-most line becomes visible. */ - if (this->last_vscroll_pos != this->vscroll->GetPosition()) { - this->autoscroll = this->vscroll->GetPosition() >= log->used - this->vscroll->GetCapacity(); - } - if (this->autoscroll) { - int scroll_pos = std::max(0, log->used - this->vscroll->GetCapacity()); - if (scroll_pos != this->vscroll->GetPosition()) { - this->vscroll->SetPosition(scroll_pos); - - /* We need a repaint */ - this->SetWidgetDirty(WID_AID_SCROLLBAR); - this->SetWidgetDirty(WID_AID_LOG_PANEL); - } - } - this->last_vscroll_pos = this->vscroll->GetPosition(); - } - - void SetStringParameters(int widget) const override - { - switch (widget) { - case WID_AID_NAME_TEXT: - if (ai_debug_company == OWNER_DEITY) { - const GameInfo *info = Game::GetInfo(); - assert(info != nullptr); - SetDParam(0, STR_AI_DEBUG_NAME_AND_VERSION); - SetDParamStr(1, info->GetName()); - SetDParam(2, info->GetVersion()); - } else if (ai_debug_company == INVALID_COMPANY || !Company::IsValidAiID(ai_debug_company)) { - SetDParam(0, STR_EMPTY); - } else { - const AIInfo *info = Company::Get(ai_debug_company)->ai_info; - assert(info != nullptr); - SetDParam(0, STR_AI_DEBUG_NAME_AND_VERSION); - SetDParamStr(1, info->GetName()); - SetDParam(2, info->GetVersion()); - } - break; - } - } - - void DrawWidget(const Rect &r, int widget) const override - { - if (ai_debug_company == INVALID_COMPANY) return; - - switch (widget) { - case WID_AID_LOG_PANEL: { - ScriptLog::LogData *log = this->GetLogPointer(); - if (log == nullptr) return; - - Rect br = r.Shrink(WidgetDimensions::scaled.bevel); - Rect tr = r.Shrink(WidgetDimensions::scaled.framerect); - for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < log->used; i++) { - int pos = (i + log->pos + 1 - log->used + log->count) % log->count; - if (log->lines[pos] == nullptr) break; - - TextColour colour; - switch (log->type[pos]) { - case ScriptLog::LOG_SQ_INFO: colour = TC_BLACK; break; - case ScriptLog::LOG_SQ_ERROR: colour = TC_WHITE; break; - case ScriptLog::LOG_INFO: colour = TC_BLACK; break; - case ScriptLog::LOG_WARNING: colour = TC_YELLOW; break; - case ScriptLog::LOG_ERROR: colour = TC_RED; break; - default: colour = TC_BLACK; break; - } - - /* Check if the current line should be highlighted */ - if (pos == this->highlight_row) { - GfxFillRect(br.left, tr.top, br.right, tr.top + this->resize.step_height - 1, PC_BLACK); - if (colour == TC_BLACK) colour = TC_WHITE; // Make black text readable by inverting it to white. - } - - DrawString(tr, log->lines[pos], colour, SA_LEFT | SA_FORCE); - tr.top += this->resize.step_height; - } - break; - } - } - } - - /** - * Change all settings to select another AI. - * @param show_ai The new AI to show. - */ - void ChangeToAI(CompanyID show_ai) - { - if (!this->IsValidDebugCompany(show_ai)) return; - - ai_debug_company = show_ai; - - this->highlight_row = -1; // The highlight of one AI make little sense for another AI. - - /* Close AI settings window to prevent confusion */ - CloseWindowByClass(WC_AI_SETTINGS); - - this->InvalidateData(-1); - - this->autoscroll = true; - this->last_vscroll_pos = this->vscroll->GetPosition(); - } - - void OnClick(Point pt, int widget, int click_count) override - { - /* Also called for hotkeys, so check for disabledness */ - if (this->IsWidgetDisabled(widget)) return; - - /* Check which button is clicked */ - if (IsInsideMM(widget, WID_AID_COMPANY_BUTTON_START, WID_AID_COMPANY_BUTTON_END + 1)) { - ChangeToAI((CompanyID)(widget - WID_AID_COMPANY_BUTTON_START)); - } - - switch (widget) { - case WID_AID_SCRIPT_GAME: - ChangeToAI(OWNER_DEITY); - break; - - case WID_AID_RELOAD_TOGGLE: - if (ai_debug_company == OWNER_DEITY) break; - /* First kill the company of the AI, then start a new one. This should start the current AI again */ - Command::Post(CCA_DELETE, ai_debug_company, CRR_MANUAL, INVALID_CLIENT_ID); - Command::Post(CCA_NEW_AI, ai_debug_company, CRR_NONE, INVALID_CLIENT_ID); - break; - - case WID_AID_SETTINGS: - ShowAISettingsWindow(ai_debug_company); - break; - - case WID_AID_BREAK_STR_ON_OFF_BTN: - this->break_check_enabled = !this->break_check_enabled; - this->InvalidateData(-1); - break; - - case WID_AID_MATCH_CASE_BTN: - this->case_sensitive_break_check = !this->case_sensitive_break_check; - this->InvalidateData(-1); - break; - - case WID_AID_CONTINUE_BTN: - /* Unpause current AI / game script and mark the corresponding script button dirty. */ - if (!this->IsDead()) { - if (ai_debug_company == OWNER_DEITY) { - Game::Unpause(); - } else { - AI::Unpause(ai_debug_company); - } - } - - /* If the last AI/Game Script is unpaused, unpause the game too. */ - if ((_pause_mode & PM_PAUSED_NORMAL) == PM_PAUSED_NORMAL) { - bool all_unpaused = !Game::IsPaused(); - if (all_unpaused) { - for (const Company *c : Company::Iterate()) { - if (c->is_ai && AI::IsPaused(c->index)) { - all_unpaused = false; - break; - } - } - if (all_unpaused) { - /* All scripts have been unpaused => unpause the game. */ - Command::Post(PM_PAUSED_NORMAL, false); - } - } - } - - this->highlight_row = -1; - this->InvalidateData(-1); - break; - } - } - - void OnEditboxChanged(int wid) override - { - if (wid == WID_AID_BREAK_STR_EDIT_BOX) { - /* Save the current string to static member so it can be restored next time the window is opened. */ - strecpy(this->break_string, this->break_editbox.text.buf, lastof(this->break_string)); - break_string_filter.SetFilterTerm(this->break_string); - } - } - - /** - * Some data on this window has become invalid. - * @param data Information about the changed data. - * This is the company ID of the AI/GS which wrote a new log message, or -1 in other cases. - * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. - */ - void OnInvalidateData(int data = 0, bool gui_scope = true) override - { - /* If the log message is related to the active company tab, check the break string. - * This needs to be done in gameloop-scope, so the AI is suspended immediately. */ - if (!gui_scope && data == ai_debug_company && this->IsValidDebugCompany(ai_debug_company) && this->break_check_enabled && !this->break_string_filter.IsEmpty()) { - /* Get the log instance of the active company */ - ScriptLog::LogData *log = this->GetLogPointer(); - - if (log != nullptr) { - this->break_string_filter.ResetState(); - this->break_string_filter.AddLine(log->lines[log->pos]); - if (this->break_string_filter.GetState()) { - /* Pause execution of script. */ - if (!this->IsDead()) { - if (ai_debug_company == OWNER_DEITY) { - Game::Pause(); - } else { - AI::Pause(ai_debug_company); - } - } - - /* Pause the game. */ - if ((_pause_mode & PM_PAUSED_NORMAL) == PM_UNPAUSED) { - Command::Post(PM_PAUSED_NORMAL, true); - } - - /* Highlight row that matched */ - this->highlight_row = log->pos; - } - } - } - - if (!gui_scope) return; - - this->SelectValidDebugCompany(); - - ScriptLog::LogData *log = ai_debug_company != INVALID_COMPANY ? this->GetLogPointer() : nullptr; - this->vscroll->SetCount((log == nullptr) ? 0 : log->used); - - /* Update company buttons */ - for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { - this->SetWidgetDisabledState(i + WID_AID_COMPANY_BUTTON_START, !Company::IsValidAiID(i)); - this->SetWidgetLoweredState(i + WID_AID_COMPANY_BUTTON_START, ai_debug_company == i); - } - - this->SetWidgetDisabledState(WID_AID_SCRIPT_GAME, Game::GetGameInstance() == nullptr); - this->SetWidgetLoweredState(WID_AID_SCRIPT_GAME, ai_debug_company == OWNER_DEITY); - - this->SetWidgetLoweredState(WID_AID_BREAK_STR_ON_OFF_BTN, this->break_check_enabled); - this->SetWidgetLoweredState(WID_AID_MATCH_CASE_BTN, this->case_sensitive_break_check); - - this->SetWidgetDisabledState(WID_AID_SETTINGS, ai_debug_company == INVALID_COMPANY); - extern CompanyID _local_company; - this->SetWidgetDisabledState(WID_AID_RELOAD_TOGGLE, ai_debug_company == INVALID_COMPANY || ai_debug_company == OWNER_DEITY || ai_debug_company == _local_company); - this->SetWidgetDisabledState(WID_AID_CONTINUE_BTN, ai_debug_company == INVALID_COMPANY || - (ai_debug_company == OWNER_DEITY ? !Game::IsPaused() : !AI::IsPaused(ai_debug_company))); - } - - void OnResize() override - { - this->vscroll->SetCapacityFromWidget(this, WID_AID_LOG_PANEL, WidgetDimensions::scaled.framerect.Vertical()); - } - - static HotkeyList hotkeys; -}; - -CompanyID AIDebugWindow::ai_debug_company = INVALID_COMPANY; -char AIDebugWindow::break_string[MAX_BREAK_STR_STRING_LENGTH] = ""; -bool AIDebugWindow::break_check_enabled = true; -bool AIDebugWindow::case_sensitive_break_check = false; -StringFilter AIDebugWindow::break_string_filter(&AIDebugWindow::case_sensitive_break_check); - -/** Make a number of rows with buttons for each company for the AI debug window. */ -NWidgetBase *MakeCompanyButtonRowsAIDebug(int *biggest_index) -{ - return MakeCompanyButtonRows(biggest_index, WID_AID_COMPANY_BUTTON_START, WID_AID_COMPANY_BUTTON_END, COLOUR_GREY, 8, STR_AI_DEBUG_SELECT_AI_TOOLTIP); -} - -/** - * Handler for global hotkeys of the AIDebugWindow. - * @param hotkey Hotkey - * @return ES_HANDLED if hotkey was accepted. - */ -static EventState AIDebugGlobalHotkeys(int hotkey) -{ - if (_game_mode != GM_NORMAL) return ES_NOT_HANDLED; - Window *w = ShowAIDebugWindow(INVALID_COMPANY); - if (w == nullptr) return ES_NOT_HANDLED; - return w->OnHotkey(hotkey); -} - -static Hotkey aidebug_hotkeys[] = { - Hotkey('1', "company_1", WID_AID_COMPANY_BUTTON_START), - Hotkey('2', "company_2", WID_AID_COMPANY_BUTTON_START + 1), - Hotkey('3', "company_3", WID_AID_COMPANY_BUTTON_START + 2), - Hotkey('4', "company_4", WID_AID_COMPANY_BUTTON_START + 3), - Hotkey('5', "company_5", WID_AID_COMPANY_BUTTON_START + 4), - Hotkey('6', "company_6", WID_AID_COMPANY_BUTTON_START + 5), - Hotkey('7', "company_7", WID_AID_COMPANY_BUTTON_START + 6), - Hotkey('8', "company_8", WID_AID_COMPANY_BUTTON_START + 7), - Hotkey('9', "company_9", WID_AID_COMPANY_BUTTON_START + 8), - Hotkey((uint16)0, "company_10", WID_AID_COMPANY_BUTTON_START + 9), - Hotkey((uint16)0, "company_11", WID_AID_COMPANY_BUTTON_START + 10), - Hotkey((uint16)0, "company_12", WID_AID_COMPANY_BUTTON_START + 11), - Hotkey((uint16)0, "company_13", WID_AID_COMPANY_BUTTON_START + 12), - Hotkey((uint16)0, "company_14", WID_AID_COMPANY_BUTTON_START + 13), - Hotkey((uint16)0, "company_15", WID_AID_COMPANY_BUTTON_START + 14), - Hotkey('S', "settings", WID_AID_SETTINGS), - Hotkey('0', "game_script", WID_AID_SCRIPT_GAME), - Hotkey((uint16)0, "reload", WID_AID_RELOAD_TOGGLE), - Hotkey('B', "break_toggle", WID_AID_BREAK_STR_ON_OFF_BTN), - Hotkey('F', "break_string", WID_AID_BREAK_STR_EDIT_BOX), - Hotkey('C', "match_case", WID_AID_MATCH_CASE_BTN), - Hotkey(WKC_RETURN, "continue", WID_AID_CONTINUE_BTN), - HOTKEY_LIST_END -}; -HotkeyList AIDebugWindow::hotkeys("aidebug", aidebug_hotkeys, AIDebugGlobalHotkeys); - -/** Widgets for the AI debug window. */ -static const NWidgetPart _nested_ai_debug_widgets[] = { - NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_AI_DEBUG, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_SHADEBOX, COLOUR_GREY), - NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), - NWidget(WWT_STICKYBOX, COLOUR_GREY), - EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, WID_AID_VIEW), - NWidgetFunction(MakeCompanyButtonRowsAIDebug), SetPadding(0, 2, 1, 2), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_AID_SCRIPT_GAME), SetMinimalSize(100, 20), SetResize(1, 0), SetDataTip(STR_AI_GAME_SCRIPT, STR_AI_GAME_SCRIPT_TOOLTIP), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_AID_NAME_TEXT), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_STRING, STR_AI_DEBUG_NAME_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_AID_SETTINGS), SetMinimalSize(100, 20), SetDataTip(STR_AI_DEBUG_SETTINGS, STR_AI_DEBUG_SETTINGS_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_AID_RELOAD_TOGGLE), SetMinimalSize(100, 20), SetDataTip(STR_AI_DEBUG_RELOAD, STR_AI_DEBUG_RELOAD_TOOLTIP), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(NWID_VERTICAL), - /* Log panel */ - NWidget(WWT_PANEL, COLOUR_GREY, WID_AID_LOG_PANEL), SetMinimalSize(287, 180), SetResize(1, 1), SetScrollbar(WID_AID_SCROLLBAR), - EndContainer(), - /* Break string widgets */ - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_AID_BREAK_STRING_WIDGETS), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_AID_BREAK_STR_ON_OFF_BTN), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP), - NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_LABEL, COLOUR_GREY), SetPadding(2, 2, 2, 4), SetDataTip(STR_AI_DEBUG_BREAK_ON_LABEL, 0x0), - NWidget(WWT_EDITBOX, COLOUR_GREY, WID_AID_BREAK_STR_EDIT_BOX), SetFill(1, 1), SetResize(1, 0), SetPadding(2, 2, 2, 2), SetDataTip(STR_AI_DEBUG_BREAK_STR_OSKTITLE, STR_AI_DEBUG_BREAK_STR_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_AID_MATCH_CASE_BTN), SetMinimalSize(100, 0), SetFill(0, 1), SetDataTip(STR_AI_DEBUG_MATCH_CASE, STR_AI_DEBUG_MATCH_CASE_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_AID_CONTINUE_BTN), SetMinimalSize(100, 0), SetFill(0, 1), SetDataTip(STR_AI_DEBUG_CONTINUE, STR_AI_DEBUG_CONTINUE_TOOLTIP), - EndContainer(), - EndContainer(), - EndContainer(), - NWidget(NWID_VERTICAL), - NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_AID_SCROLLBAR), - NWidget(WWT_RESIZEBOX, COLOUR_GREY), - EndContainer(), - EndContainer(), -}; - -/** Window definition for the AI debug window. */ -static WindowDesc _ai_debug_desc( - WDP_AUTO, "script_debug", 600, 450, - WC_AI_DEBUG, WC_NONE, - 0, - _nested_ai_debug_widgets, lengthof(_nested_ai_debug_widgets), - &AIDebugWindow::hotkeys -); - -/** - * Open the AI debug window and select the given company. - * @param show_company Display debug information about this AI company. - */ -Window *ShowAIDebugWindow(CompanyID show_company) -{ - if (!_networking || _network_server) { - AIDebugWindow *w = (AIDebugWindow *)BringWindowToFrontById(WC_AI_DEBUG, 0); - if (w == nullptr) w = new AIDebugWindow(&_ai_debug_desc, 0); - if (show_company != INVALID_COMPANY) w->ChangeToAI(show_company); - return w; - } else { - ShowErrorMessage(STR_ERROR_AI_DEBUG_SERVER_ONLY, INVALID_STRING_ID, WL_INFO); - } - - return nullptr; -} - -/** - * Reset the AI windows to their initial state. - */ -void InitializeAIGui() -{ - AIDebugWindow::ai_debug_company = INVALID_COMPANY; -} - -/** Open the AI debug window if one of the AI scripts has crashed. */ -void ShowAIDebugWindowIfAIError() -{ - /* Network clients can't debug AIs. */ - if (_networking && !_network_server) return; - - for (const Company *c : Company::Iterate()) { - if (c->is_ai && c->ai_instance->IsDead()) { - ShowAIDebugWindow(c->index); - break; - } - } - - GameInstance *g = Game::GetGameInstance(); - if (g != nullptr && g->IsDead()) { - ShowAIDebugWindow(OWNER_DEITY); - } -} diff --git a/src/ai/ai_gui.hpp b/src/ai/ai_gui.hpp index be6263ddd5..6eb28c3841 100644 --- a/src/ai/ai_gui.hpp +++ b/src/ai/ai_gui.hpp @@ -10,13 +10,6 @@ #ifndef AI_GUI_HPP #define AI_GUI_HPP -#include "../company_type.h" - -void ShowAIListWindow(CompanyID slot); -Window* ShowAIDebugWindow(CompanyID show_company = INVALID_COMPANY); void ShowAIConfigWindow(); -void ShowScriptTextfileWindow(TextfileType file_type, CompanyID slot); -void ShowAIDebugWindowIfAIError(); -void InitializeAIGui(); #endif /* AI_GUI_HPP */ diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index 4ffb10f8d0..57528f2877 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -14,11 +14,11 @@ #include "../script/squirrel_class.hpp" #include "ai_config.hpp" -#include "ai_gui.hpp" #include "ai.hpp" #include "../script/script_storage.hpp" #include "../script/script_cmd.h" +#include "../script/script_gui.h" #include "ai_info.hpp" #include "ai_instance.hpp" @@ -64,7 +64,7 @@ void AIInstance::Died() /* Intro is not supposed to use AI, but it may have 'dummy' AI which instant dies. */ if (_game_mode == GM_MENU) return; - ShowAIDebugWindow(_current_company); + ShowScriptDebugWindow(_current_company); const AIInfo *info = AIConfig::GetConfig(_current_company, AIConfig::SSS_FORCE_GAME)->GetInfo(); if (info != nullptr) { diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 182f32a4f0..7432bde65b 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -922,8 +922,8 @@ CommandCost CmdCompanyCtrl(DoCommandFlag flags, CompanyCtrlAction cca, CompanyID } InvalidateWindowClassesData(WC_GAME_OPTIONS); - InvalidateWindowClassesData(WC_AI_SETTINGS); - InvalidateWindowClassesData(WC_AI_LIST); + InvalidateWindowClassesData(WC_SCRIPT_SETTINGS); + InvalidateWindowClassesData(WC_SCRIPT_LIST); return CommandCost(); } diff --git a/src/game/game.hpp b/src/game/game.hpp index 98f436d397..fffa04fa05 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -12,10 +12,6 @@ #include "../core/string_compare_type.hpp" #include "game_scanner.hpp" -#include - -/** A list that maps AI names to their AIInfo object. */ -typedef std::map ScriptInfoList; #include "../script/api/script_event_types.hpp" diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index caa57e1322..a4e1e64ddc 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -96,7 +96,7 @@ cur_company.Restore(); - InvalidateWindowData(WC_AI_DEBUG, 0, -1); + InvalidateWindowData(WC_SCRIPT_DEBUG, 0, -1); } /* static */ void Game::Uninitialize(bool keepConfig) @@ -201,9 +201,9 @@ Game::scanner_library->RescanDir(); ResetConfig(); - InvalidateWindowData(WC_AI_LIST, 0, 1); - SetWindowClassesDirty(WC_AI_DEBUG); - InvalidateWindowClassesData(WC_AI_SETTINGS); + InvalidateWindowData(WC_SCRIPT_LIST, 0, 1); + SetWindowClassesDirty(WC_SCRIPT_DEBUG); + InvalidateWindowClassesData(WC_SCRIPT_SETTINGS); InvalidateWindowClassesData(WC_GAME_OPTIONS); } diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index c5285a7547..ad2248a6f5 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -8,39 +8,20 @@ /** @file game_gui.cpp %Window for configuring the Game Script */ #include "../stdafx.h" -#include "../table/sprites.h" #include "../error.h" #include "../settings_gui.h" #include "../querystring_gui.h" -#include "../stringfilter_type.h" -#include "../company_base.h" -#include "../company_gui.h" -#include "../strings_func.h" #include "../window_func.h" -#include "../window_type.h" -#include "../gfx_func.h" -#include "../command_func.h" #include "../network/network.h" -#include "../settings_func.h" #include "../network/network_content.h" -#include "../textfile_gui.h" -#include "../widgets/dropdown_type.h" #include "../widgets/dropdown_func.h" -#include "../hotkeys.h" -#include "../core/geometry_func.hpp" -#include "../guitimer_func.h" -#include "../company_cmd.h" -#include "../misc_cmd.h" +#include "game.hpp" #include "game_gui.hpp" -#include "../ai/ai_config.hpp" -#include "../ai/ai_gui.hpp" -#include "../widgets/game_widget.h" +#include "game_config.hpp" +#include "game_info.hpp" +#include "../script/script_gui.h" #include "../table/strings.h" -#include "../game/game.hpp" -#include "../game/game_config.hpp" -#include "../game/game_info.hpp" -#include "../game/game_instance.hpp" #include "../safeguards.h" @@ -125,7 +106,7 @@ struct GSConfigWindow : public Window { void Close() override { - CloseWindowByClass(WC_AI_LIST); + CloseWindowByClass(WC_SCRIPT_LIST); this->Window::Close(); } @@ -267,12 +248,12 @@ struct GSConfigWindow : public Window { switch (widget) { case WID_GSC_GSLIST: { this->InvalidateData(); - if (click_count > 1 && _game_mode != GM_NORMAL) ShowAIListWindow((CompanyID)OWNER_DEITY); + if (click_count > 1 && _game_mode != GM_NORMAL) ShowScriptListWindow((CompanyID)OWNER_DEITY); break; } case WID_GSC_CHANGE: // choose other Game Script - ShowAIListWindow((CompanyID)OWNER_DEITY); + ShowScriptListWindow((CompanyID)OWNER_DEITY); break; case WID_GSC_CONTENT_DOWNLOAD: diff --git a/src/game/game_instance.cpp b/src/game/game_instance.cpp index 09bba13345..facb875b43 100644 --- a/src/game/game_instance.cpp +++ b/src/game/game_instance.cpp @@ -14,7 +14,7 @@ #include "../script/script_storage.hpp" #include "../script/script_cmd.h" -#include "../ai/ai_gui.hpp" +#include "../script/script_gui.h" #include "game_config.hpp" #include "game_info.hpp" #include "game_instance.hpp" @@ -67,7 +67,7 @@ void GameInstance::Died() { ScriptInstance::Died(); - ShowAIDebugWindow(OWNER_DEITY); + ShowScriptDebugWindow(OWNER_DEITY); const GameInfo *info = Game::GetInfo(); if (info != nullptr) { diff --git a/src/misc.cpp b/src/misc.cpp index 467c398d66..a9b3e19759 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -11,7 +11,7 @@ #include "landscape.h" #include "news_func.h" #include "ai/ai.hpp" -#include "ai/ai_gui.hpp" +#include "script/script_gui.h" #include "newgrf.h" #include "newgrf_house.h" #include "economy_func.h" @@ -100,7 +100,7 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin InitializeGraphGui(); InitializeObjectGui(); InitializeTownGui(); - InitializeAIGui(); + InitializeScriptGui(); InitializeTrees(); InitializeIndustries(); InitializeObjects(); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index a131e6c635..b22797032e 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -40,7 +40,7 @@ #include "../company_func.h" #include "../road_cmd.h" #include "../ai/ai.hpp" -#include "../ai/ai_gui.hpp" +#include "../script/script_gui.h" #include "../game/game.hpp" #include "../town.h" #include "../economy_base.h" @@ -552,7 +552,7 @@ static void StartScripts() if (Company::IsValidAiID(c->index)) AI::StartNew(c->index, false); } - ShowAIDebugWindowIfAIError(); + ShowScriptDebugWindowIfScriptError(); } /** diff --git a/src/script/CMakeLists.txt b/src/script/CMakeLists.txt index d1054ca5f8..d945e54ab9 100644 --- a/src/script/CMakeLists.txt +++ b/src/script/CMakeLists.txt @@ -9,6 +9,8 @@ add_files( script_config.cpp script_config.hpp script_fatalerror.hpp + script_gui.h + script_gui.cpp script_info.cpp script_info.hpp script_info_dummy.cpp diff --git a/src/script/api/script_controller.cpp b/src/script/api/script_controller.cpp index 232ce5a3b6..44a4b152b8 100644 --- a/src/script/api/script_controller.cpp +++ b/src/script/api/script_controller.cpp @@ -18,7 +18,7 @@ #include "../script_info.hpp" #include "../script_instance.hpp" #include "script_log.hpp" -#include "../../ai/ai_gui.hpp" +#include "../script_gui.h" #include "../../settings_type.h" #include "../../network/network.h" #include "../../misc_cmd.h" @@ -57,7 +57,7 @@ /* Inform script developer that their script has been paused and * needs manual action to continue. */ - ShowAIDebugWindow(ScriptObject::GetRootCompany()); + ShowScriptDebugWindow(ScriptObject::GetRootCompany()); if ((_pause_mode & PM_PAUSED_NORMAL) == PM_UNPAUSED) { ScriptObject::Command::Do(PM_PAUSED_NORMAL, true); diff --git a/src/script/api/script_log.cpp b/src/script/api/script_log.cpp index 63c4548aaf..12c4533ca2 100644 --- a/src/script/api/script_log.cpp +++ b/src/script/api/script_log.cpp @@ -75,7 +75,7 @@ /* Also still print to debug window */ Debug(script, level, "[{}] [{}] {}", (uint)ScriptObject::GetRootCompany(), logc, log->lines[log->pos]); - InvalidateWindowData(WC_AI_DEBUG, 0, ScriptObject::GetRootCompany()); + InvalidateWindowData(WC_SCRIPT_DEBUG, 0, ScriptObject::GetRootCompany()); } /* static */ void ScriptLog::FreeLogPointer() diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp new file mode 100644 index 0000000000..468cdecf59 --- /dev/null +++ b/src/script/script_gui.cpp @@ -0,0 +1,1256 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + + /** @file script_gui.cpp %Window for configuring the Scripts */ + +#include "../stdafx.h" +#include "../table/sprites.h" +#include "../error.h" +#include "../settings_gui.h" +#include "../querystring_gui.h" +#include "../stringfilter_type.h" +#include "../company_base.h" +#include "../company_gui.h" +#include "../window_func.h" +#include "../network/network.h" +#include "../widgets/dropdown_func.h" +#include "../hotkeys.h" +#include "../company_cmd.h" +#include "../misc_cmd.h" + +#include "script_gui.h" +#include "script_log.hpp" +#include "script_scanner.hpp" +#include "../ai/ai.hpp" +#include "../ai/ai_config.hpp" +#include "../ai/ai_info.hpp" +#include "../ai/ai_instance.hpp" +#include "../game/game.hpp" +#include "../game/game_config.hpp" +#include "../game/game_info.hpp" +#include "../game/game_instance.hpp" +#include "table/strings.h" + +#include "../safeguards.h" + + +static ScriptConfig *GetConfig(CompanyID slot) +{ + if (slot == OWNER_DEITY) return GameConfig::GetConfig(); + return AIConfig::GetConfig(slot); +} + +/** + * Window that let you choose an available Script. + */ +struct ScriptListWindow : public Window { + const ScriptInfoList *info_list; ///< The list of Scripts. + int selected; ///< The currently selected Script. + CompanyID slot; ///< The company we're selecting a new Script for. + int line_height; ///< Height of a row in the matrix widget. + Scrollbar *vscroll; ///< Cache of the vertical scrollbar. + + /** + * Constructor for the window. + * @param desc The description of the window. + * @param slot The company we're changing the Script for. + */ + ScriptListWindow(WindowDesc *desc, CompanyID slot) : Window(desc), + slot(slot) + { + if (slot == OWNER_DEITY) { + this->info_list = Game::GetUniqueInfoList(); + } else { + this->info_list = AI::GetUniqueInfoList(); + } + + this->CreateNestedTree(); + this->vscroll = this->GetScrollbar(WID_SCRL_SCROLLBAR); + this->FinishInitNested(); // Initializes 'this->line_height' as side effect. + + this->vscroll->SetCount((int)this->info_list->size() + 1); + + /* Try if we can find the currently selected AI */ + this->selected = -1; + if (GetConfig(slot)->HasScript()) { + ScriptInfo *info = GetConfig(slot)->GetInfo(); + int i = 0; + for (const auto &item : *this->info_list) { + if (item.second == info) { + this->selected = i; + break; + } + + i++; + } + } + } + + void SetStringParameters(int widget) const override + { + if (widget != WID_SCRL_CAPTION) return; + + SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_LIST_CAPTION_GAMESCRIPT : STR_AI_LIST_CAPTION_AI); + } + + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override + { + if (widget != WID_SCRL_LIST) return; + + this->line_height = FONT_HEIGHT_NORMAL + padding.height; + + resize->width = 1; + resize->height = this->line_height; + size->height = 5 * this->line_height; + } + + void DrawWidget(const Rect &r, int widget) const override + { + switch (widget) { + case WID_SCRL_LIST: { + /* Draw a list of all available Scripts. */ + Rect tr = r.Shrink(WidgetDimensions::scaled.matrix); + /* First AI in the list is hardcoded to random */ + if (this->vscroll->IsVisible(0)) { + DrawString(tr, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE); + tr.top += this->line_height; + } + int i = 0; + for (const auto &item : *this->info_list) { + i++; + if (this->vscroll->IsVisible(i)) { + DrawString(tr, item.second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); + tr.top += this->line_height; + } + } + break; + } + case WID_SCRL_INFO_BG: { + ScriptInfo *selected_info = nullptr; + int i = 0; + for (const auto &item : *this->info_list) { + i++; + if (this->selected == i - 1) selected_info = static_cast(item.second); + } + /* Some info about the currently selected Script. */ + if (selected_info != nullptr) { + Rect tr = r.Shrink(WidgetDimensions::scaled.frametext, WidgetDimensions::scaled.framerect); + SetDParamStr(0, selected_info->GetAuthor()); + DrawString(tr, STR_AI_LIST_AUTHOR); + tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; + SetDParam(0, selected_info->GetVersion()); + DrawString(tr, STR_AI_LIST_VERSION); + tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; + if (selected_info->GetURL() != nullptr) { + SetDParamStr(0, selected_info->GetURL()); + DrawString(tr, STR_AI_LIST_URL); + tr.top += FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; + } + SetDParamStr(0, selected_info->GetDescription()); + DrawStringMultiLine(tr, STR_JUST_RAW_STRING, TC_WHITE); + } + break; + } + } + } + + /** + * Changes the Script of the current slot. + */ + void ChangeScript() + { + if (this->selected == -1) { + GetConfig(slot)->Change(nullptr); + } else { + ScriptInfoList::const_iterator it = this->info_list->begin(); + for (int i = 0; i < this->selected; i++) it++; + GetConfig(slot)->Change((*it).second->GetName(), (*it).second->GetVersion()); + } + InvalidateWindowData(WC_GAME_OPTIONS, slot == OWNER_DEITY ? WN_GAME_OPTIONS_GS : WN_GAME_OPTIONS_AI); + InvalidateWindowClassesData(WC_SCRIPT_SETTINGS); + CloseWindowByClass(WC_QUERY_STRING); + InvalidateWindowClassesData(WC_TEXTFILE); + } + + void OnClick(Point pt, int widget, int click_count) override + { + switch (widget) { + case WID_SCRL_LIST: { // Select one of the Scripts + int sel = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SCRL_LIST) - 1; + if (sel < (int)this->info_list->size()) { + this->selected = sel; + this->SetDirty(); + if (click_count > 1) { + this->ChangeScript(); + this->Close(); + } + } + break; + } + + case WID_SCRL_ACCEPT: { + this->ChangeScript(); + this->Close(); + break; + } + + case WID_SCRL_CANCEL: + this->Close(); + break; + } + } + + void OnResize() override + { + this->vscroll->SetCapacityFromWidget(this, WID_SCRL_LIST); + } + + /** + * Some data on this window has become invalid. + * @param data Information about the changed data. + * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. + */ + void OnInvalidateData(int data = 0, bool gui_scope = true) override + { + if (_game_mode == GM_NORMAL && Company::IsValidID(this->slot)) { + this->Close(); + return; + } + + if (!gui_scope) return; + + this->vscroll->SetCount((int)this->info_list->size() + 1); + + /* selected goes from -1 .. length of ai list - 1. */ + this->selected = std::min(this->selected, this->vscroll->GetCount() - 2); + } +}; + +/** Widgets for the AI list window. */ +static const NWidgetPart _nested_script_list_widgets[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_MAUVE), + NWidget(WWT_CAPTION, COLOUR_MAUVE, WID_SCRL_CAPTION), SetDataTip(STR_AI_LIST_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_DEFSIZEBOX, COLOUR_MAUVE), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_SCRL_LIST), SetMinimalSize(188, 112), SetFill(1, 1), SetResize(1, 1), SetMatrixDataTip(1, 0, STR_AI_LIST_TOOLTIP), SetScrollbar(WID_SCRL_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, WID_SCRL_SCROLLBAR), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_MAUVE, WID_SCRL_INFO_BG), SetMinimalTextLines(8, WidgetDimensions::unscaled.framerect.Vertical() + WidgetDimensions::unscaled.vsep_normal * 3), SetResize(1, 0), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_SCRL_ACCEPT), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_LIST_ACCEPT, STR_AI_LIST_ACCEPT_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_SCRL_CANCEL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_LIST_CANCEL, STR_AI_LIST_CANCEL_TOOLTIP), + EndContainer(), + NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), + EndContainer(), +}; + +/** Window definition for the ai list window. */ +static WindowDesc _script_list_desc( + WDP_CENTER, "settings_script_list", 200, 234, + WC_SCRIPT_LIST, WC_NONE, + 0, + _nested_script_list_widgets, lengthof(_nested_script_list_widgets) +); + +/** + * Open the AI list window to chose an AI for the given company slot. + * @param slot The slot to change the AI of. + */ +void ShowScriptListWindow(CompanyID slot) +{ + CloseWindowByClass(WC_SCRIPT_LIST); + new ScriptListWindow(&_script_list_desc, slot); +} + + +/** + * Window for settings the parameters of an AI. + */ +struct ScriptSettingsWindow : public Window { + CompanyID slot; ///< The currently show company's setting. + ScriptConfig *script_config; ///< The configuration we're modifying. + int clicked_button; ///< The button we clicked. + bool clicked_increase; ///< Whether we clicked the increase or decrease button. + bool clicked_dropdown; ///< Whether the dropdown is open. + bool closing_dropdown; ///< True, if the dropdown list is currently closing. + GUITimer timeout; ///< Timeout for unclicking the button. + int clicked_row; ///< The clicked row of settings. + int line_height; ///< Height of a row in the matrix widget. + Scrollbar *vscroll; ///< Cache of the vertical scrollbar. + typedef std::vector VisibleSettingsList; ///< typdef for a vector of script settings + VisibleSettingsList visible_settings; ///< List of visible AI settings + + /** + * Constructor for the window. + * @param desc The description of the window. + * @param slot The company we're changing the settings for. + */ + ScriptSettingsWindow(WindowDesc *desc, CompanyID slot) : Window(desc), + slot(slot), + clicked_button(-1), + clicked_dropdown(false), + closing_dropdown(false), + timeout(0) + { + this->script_config = GetConfig(slot); + + this->CreateNestedTree(); + this->vscroll = this->GetScrollbar(WID_SCRS_SCROLLBAR); + this->FinishInitNested(slot); // Initializes 'this->line_height' as side effect. + + this->RebuildVisibleSettings(); + } + + /** + * Rebuilds the list of visible settings. AI settings with the flag + * AICONFIG_AI_DEVELOPER set will only be visible if the game setting + * gui.ai_developer_tools is enabled. + */ + void RebuildVisibleSettings() + { + visible_settings.clear(); + + for (const auto &item : *this->script_config->GetConfigList()) { + bool no_hide = (item.flags & SCRIPTCONFIG_DEVELOPER) == 0; + if (no_hide || _settings_client.gui.ai_developer_tools) { + visible_settings.push_back(&item); + } + } + + this->vscroll->SetCount((int)this->visible_settings.size()); + } + + void SetStringParameters(int widget) const override + { + if (widget != WID_SCRS_CAPTION) return; + + SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_SETTINGS_CAPTION_GAMESCRIPT : STR_AI_SETTINGS_CAPTION_AI); + } + + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override + { + if (widget != WID_SCRS_BACKGROUND) return; + + this->line_height = std::max(SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL) + padding.height; + + resize->width = 1; + resize->height = this->line_height; + size->height = 5 * this->line_height; + } + + void DrawWidget(const Rect &r, int widget) const override + { + if (widget != WID_SCRS_BACKGROUND) return; + + ScriptConfig *config = this->script_config; + VisibleSettingsList::const_iterator it = this->visible_settings.begin(); + int i = 0; + for (; !this->vscroll->IsVisible(i); i++) it++; + + Rect ir = r.Shrink(WidgetDimensions::scaled.framerect); + bool rtl = _current_text_dir == TD_RTL; + Rect br = ir.WithWidth(SETTING_BUTTON_WIDTH, rtl); + Rect tr = ir.Indent(SETTING_BUTTON_WIDTH + WidgetDimensions::scaled.hsep_wide, rtl); + + int y = r.top; + int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2; + int text_y_offset = (this->line_height - FONT_HEIGHT_NORMAL) / 2; + for (; this->vscroll->IsVisible(i) && it != visible_settings.end(); i++, it++) { + const ScriptConfigItem &config_item = **it; + int current_value = config->GetSetting((config_item).name); + bool editable = this->IsEditableItem(config_item); + + StringID str; + TextColour colour; + uint idx = 0; + if (StrEmpty(config_item.description)) { + if (this->slot != OWNER_DEITY && !strcmp(config_item.name, "start_date")) { + /* Build-in translation */ + str = STR_AI_SETTINGS_START_DELAY; + colour = TC_LIGHT_BLUE; + } else { + str = STR_JUST_STRING; + colour = TC_ORANGE; + } + } else { + str = STR_AI_SETTINGS_SETTING; + colour = TC_LIGHT_BLUE; + SetDParamStr(idx++, config_item.description); + } + + if ((config_item.flags & SCRIPTCONFIG_BOOLEAN) != 0) { + DrawBoolButton(br.left, y + button_y_offset, current_value != 0, editable); + SetDParam(idx++, current_value == 0 ? STR_CONFIG_SETTING_OFF : STR_CONFIG_SETTING_ON); + } else { + if (config_item.complete_labels) { + DrawDropDownButton(br.left, y + button_y_offset, COLOUR_YELLOW, this->clicked_row == i && clicked_dropdown, editable); + } else { + DrawArrowButtons(br.left, y + button_y_offset, COLOUR_YELLOW, (this->clicked_button == i) ? 1 + (this->clicked_increase != rtl) : 0, editable && current_value > config_item.min_value, editable && current_value < config_item.max_value); + } + if (config_item.labels != nullptr && config_item.labels->Contains(current_value)) { + SetDParam(idx++, STR_JUST_RAW_STRING); + SetDParamStr(idx++, config_item.labels->Find(current_value)->second); + } else { + SetDParam(idx++, STR_JUST_INT); + SetDParam(idx++, current_value); + } + } + + DrawString(tr.left, tr.right, y + text_y_offset, str, colour); + y += this->line_height; + } + } + + void OnPaint() override + { + if (this->closing_dropdown) { + this->closing_dropdown = false; + this->clicked_dropdown = false; + } + this->DrawWidgets(); + } + + void OnClick(Point pt, int widget, int click_count) override + { + switch (widget) { + case WID_SCRS_BACKGROUND: { + Rect r = this->GetWidget(widget)->GetCurrentRect().Shrink(WidgetDimensions::scaled.matrix, RectPadding::zero); + int num = (pt.y - r.top) / this->line_height + this->vscroll->GetPosition(); + if (num >= (int)this->visible_settings.size()) break; + + VisibleSettingsList::const_iterator it = this->visible_settings.begin(); + for (int i = 0; i < num; i++) it++; + const ScriptConfigItem config_item = **it; + if (!this->IsEditableItem(config_item)) return; + + if (this->clicked_row != num) { + this->CloseChildWindows(WC_QUERY_STRING); + HideDropDownMenu(this); + this->clicked_row = num; + this->clicked_dropdown = false; + } + + bool bool_item = (config_item.flags & SCRIPTCONFIG_BOOLEAN) != 0; + + int x = pt.x - r.left; + if (_current_text_dir == TD_RTL) x = r.Width() - 1 - x; + + /* One of the arrows is clicked (or green/red rect in case of bool value) */ + int old_val = this->script_config->GetSetting(config_item.name); + if (!bool_item && IsInsideMM(x, 0, SETTING_BUTTON_WIDTH) && config_item.complete_labels) { + if (this->clicked_dropdown) { + /* unclick the dropdown */ + HideDropDownMenu(this); + this->clicked_dropdown = false; + this->closing_dropdown = false; + } else { + int rel_y = (pt.y - r.top) % this->line_height; + + Rect wi_rect; + wi_rect.left = pt.x - (_current_text_dir == TD_RTL ? SETTING_BUTTON_WIDTH - 1 - x : x); + wi_rect.right = wi_rect.left + SETTING_BUTTON_WIDTH - 1; + wi_rect.top = pt.y - rel_y + (this->line_height - SETTING_BUTTON_HEIGHT) / 2; + wi_rect.bottom = wi_rect.top + SETTING_BUTTON_HEIGHT - 1; + + /* If the mouse is still held but dragged outside of the dropdown list, keep the dropdown open */ + if (pt.y >= wi_rect.top && pt.y <= wi_rect.bottom) { + this->clicked_dropdown = true; + this->closing_dropdown = false; + + DropDownList list; + for (int i = config_item.min_value; i <= config_item.max_value; i++) { + list.emplace_back(new DropDownListCharStringItem(config_item.labels->Find(i)->second, i, false)); + } + + ShowDropDownListAt(this, std::move(list), old_val, -1, wi_rect, COLOUR_ORANGE, true); + } + } + } else if (IsInsideMM(x, 0, SETTING_BUTTON_WIDTH)) { + int new_val = old_val; + if (bool_item) { + new_val = !new_val; + } else if (x >= SETTING_BUTTON_WIDTH / 2) { + /* Increase button clicked */ + new_val += config_item.step_size; + if (new_val > config_item.max_value) new_val = config_item.max_value; + this->clicked_increase = true; + } else { + /* Decrease button clicked */ + new_val -= config_item.step_size; + if (new_val < config_item.min_value) new_val = config_item.min_value; + this->clicked_increase = false; + } + + if (new_val != old_val) { + this->script_config->SetSetting(config_item.name, new_val); + this->clicked_button = num; + this->timeout.SetInterval(150); + } + } else if (!bool_item && !config_item.complete_labels) { + /* Display a query box so users can enter a custom value. */ + SetDParam(0, old_val); + ShowQueryString(STR_JUST_INT, STR_CONFIG_SETTING_QUERY_CAPTION, 10, this, CS_NUMERAL, QSF_NONE); + } + this->SetDirty(); + break; + } + + case WID_SCRS_ACCEPT: + this->Close(); + break; + + case WID_SCRS_RESET: + this->script_config->ResetEditableSettings(_game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot))); + this->SetDirty(); + break; + } + } + + void OnQueryTextFinished(char *str) override + { + if (StrEmpty(str)) return; + int32 value = atoi(str); + + SetValue(value); + } + + void OnDropdownSelect(int widget, int index) override + { + assert(this->clicked_dropdown); + SetValue(index); + } + + void OnDropdownClose(Point pt, int widget, int index, bool instant_close) override + { + /* We cannot raise the dropdown button just yet. OnClick needs some hint, whether + * the same dropdown button was clicked again, and then not open the dropdown again. + * So, we only remember that it was closed, and process it on the next OnPaint, which is + * after OnClick. */ + assert(this->clicked_dropdown); + this->closing_dropdown = true; + this->SetDirty(); + } + + void OnResize() override + { + this->vscroll->SetCapacityFromWidget(this, WID_SCRS_BACKGROUND); + } + + void OnRealtimeTick(uint delta_ms) override + { + if (this->timeout.Elapsed(delta_ms)) { + this->clicked_button = -1; + this->SetDirty(); + } + } + + /** + * Some data on this window has become invalid. + * @param data Information about the changed data. + * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. + */ + void OnInvalidateData(int data = 0, bool gui_scope = true) override + { + this->RebuildVisibleSettings(); + HideDropDownMenu(this); + this->CloseChildWindows(WC_QUERY_STRING); + } + +private: + bool IsEditableItem(const ScriptConfigItem &config_item) const + { + return _game_mode == GM_MENU + || _game_mode == GM_EDITOR + || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) + || (config_item.flags & SCRIPTCONFIG_INGAME) != 0 + || _settings_client.gui.ai_developer_tools; + } + + void SetValue(int value) + { + VisibleSettingsList::const_iterator it = this->visible_settings.begin(); + for (int i = 0; i < this->clicked_row; i++) it++; + const ScriptConfigItem config_item = **it; + if (_game_mode == GM_NORMAL && ((this->slot == OWNER_DEITY) || Company::IsValidID(this->slot)) && (config_item.flags & SCRIPTCONFIG_INGAME) == 0) return; + this->script_config->SetSetting(config_item.name, value); + this->SetDirty(); + } +}; + +/** Widgets for the Script settings window. */ +static const NWidgetPart _nested_script_settings_widgets[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_MAUVE), + NWidget(WWT_CAPTION, COLOUR_MAUVE, WID_SCRS_CAPTION), SetDataTip(STR_AI_SETTINGS_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_DEFSIZEBOX, COLOUR_MAUVE), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_MATRIX, COLOUR_MAUVE, WID_SCRS_BACKGROUND), SetMinimalSize(188, 182), SetResize(1, 1), SetFill(1, 0), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_SCRS_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, COLOUR_MAUVE, WID_SCRS_SCROLLBAR), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_SCRS_ACCEPT), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_SETTINGS_CLOSE, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_MAUVE, WID_SCRS_RESET), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_AI_SETTINGS_RESET, STR_NULL), + EndContainer(), + NWidget(WWT_RESIZEBOX, COLOUR_MAUVE), + EndContainer(), +}; + +/** Window definition for the Script settings window. */ +static WindowDesc _script_settings_desc( + WDP_CENTER, "settings_script", 500, 208, + WC_SCRIPT_SETTINGS, WC_NONE, + 0, + _nested_script_settings_widgets, lengthof(_nested_script_settings_widgets) +); + +/** + * Open the Script settings window to change the Script settings for a Script. + * @param slot The CompanyID of the Script to change the settings. + */ +void ShowScriptSettingsWindow(CompanyID slot) +{ + CloseWindowByClass(WC_SCRIPT_LIST); + CloseWindowByClass(WC_SCRIPT_SETTINGS); + new ScriptSettingsWindow(&_script_settings_desc, slot); +} + + +/** Window for displaying the textfile of a AI. */ +struct ScriptTextfileWindow : public TextfileWindow { + CompanyID slot; ///< View the textfile of this CompanyID slot. + + ScriptTextfileWindow(TextfileType file_type, CompanyID slot) : TextfileWindow(file_type), slot(slot) + { + this->OnInvalidateData(); + } + + void SetStringParameters(int widget) const override + { + if (widget == WID_TF_CAPTION) { + SetDParam(0, (slot == OWNER_DEITY) ? STR_CONTENT_TYPE_GAME_SCRIPT : STR_CONTENT_TYPE_AI); + SetDParamStr(1, GetConfig(slot)->GetInfo()->GetName()); + } + } + + void OnInvalidateData(int data = 0, bool gui_scope = true) override + { + const char *textfile = GetConfig(slot)->GetTextfile(file_type, slot); + if (textfile == nullptr) { + this->Close(); + } else { + this->LoadTextfile(textfile, (slot == OWNER_DEITY) ? GAME_DIR : AI_DIR); + } + } +}; + +/** + * Open the Script version of the textfile window. + * @param file_type The type of textfile to display. + * @param slot The slot the Script is using. + */ +void ShowScriptTextfileWindow(TextfileType file_type, CompanyID slot) +{ + CloseWindowById(WC_TEXTFILE, file_type); + new ScriptTextfileWindow(file_type, slot); +} + + +/** + * Set the widget colour of a button based on the + * state of the script. (dead or alive) + * @param button the button to update. + * @param dead true if the script is dead, otherwise false. + * @param paused true if the script is paused, otherwise false. + * @return true if the colour was changed and the window need to be marked as dirty. + */ +static bool SetScriptButtonColour(NWidgetCore &button, bool dead, bool paused) +{ + /* Dead scripts are indicated with red background and + * paused scripts are indicated with yellow background. */ + Colours colour = dead ? COLOUR_RED : + (paused ? COLOUR_YELLOW : COLOUR_GREY); + if (button.colour != colour) { + button.colour = colour; + return true; + } + return false; +} + +/** + * Window with everything an AI prints via ScriptLog. + */ +struct ScriptDebugWindow : public Window { + static const uint MAX_BREAK_STR_STRING_LENGTH = 256; ///< Maximum length of the break string. + + static CompanyID script_debug_company; ///< The AI that is (was last) being debugged. + int redraw_timer; ///< Timer for redrawing the window, otherwise it'll happen every tick. + int last_vscroll_pos; ///< Last position of the scrolling. + bool autoscroll; ///< Whether automatically scrolling should be enabled or not. + bool show_break_box; ///< Whether the break/debug box is visible. + static bool break_check_enabled; ///< Stop an AI when it prints a matching string + static char break_string[MAX_BREAK_STR_STRING_LENGTH]; ///< The string to match to the AI output + QueryString break_editbox; ///< Break editbox + static StringFilter break_string_filter; ///< Log filter for break. + static bool case_sensitive_break_check; ///< Is the matching done case-sensitive + int highlight_row; ///< The output row that matches the given string, or -1 + Scrollbar *vscroll; ///< Cache of the vertical scrollbar. + + ScriptLog::LogData *GetLogPointer() const + { + if (script_debug_company == OWNER_DEITY) return (ScriptLog::LogData *)Game::GetInstance()->GetLogPointer(); + return (ScriptLog::LogData *)Company::Get(script_debug_company)->ai_instance->GetLogPointer(); + } + + /** + * Check whether the currently selected AI/GS is dead. + * @return true if dead. + */ + bool IsDead() const + { + if (script_debug_company == OWNER_DEITY) { + GameInstance *game = Game::GetInstance(); + return game == nullptr || game->IsDead(); + } + return !Company::IsValidAiID(script_debug_company) || Company::Get(script_debug_company)->ai_instance->IsDead(); + } + + /** + * Check whether a company is a valid AI company or GS. + * @param company Company to check for validity. + * @return true if company is valid for debugging. + */ + bool IsValidDebugCompany(CompanyID company) const + { + switch (company) { + case INVALID_COMPANY: return false; + case OWNER_DEITY: return Game::GetInstance() != nullptr; + default: return Company::IsValidAiID(company); + } + } + + /** + * Ensure that \c script_debug_company refers to a valid AI company or GS, or is set to #INVALID_COMPANY. + * If no valid company is selected, it selects the first valid AI or GS if any. + */ + void SelectValidDebugCompany() + { + /* Check if the currently selected company is still active. */ + if (this->IsValidDebugCompany(script_debug_company)) return; + + script_debug_company = INVALID_COMPANY; + + for (const Company *c : Company::Iterate()) { + if (c->is_ai) { + ChangeToScript(c->index); + return; + } + } + + /* If no AI is available, see if there is a game script. */ + if (Game::GetInstance() != nullptr) ChangeToScript(OWNER_DEITY); + } + + /** + * Constructor for the window. + * @param desc The description of the window. + * @param number The window number (actually unused). + */ + ScriptDebugWindow(WindowDesc *desc, WindowNumber number) : Window(desc), break_editbox(MAX_BREAK_STR_STRING_LENGTH) + { + this->CreateNestedTree(); + this->vscroll = this->GetScrollbar(WID_SCRD_SCROLLBAR); + this->show_break_box = _settings_client.gui.ai_developer_tools; + this->GetWidget(WID_SCRD_BREAK_STRING_WIDGETS)->SetDisplayedPlane(this->show_break_box ? 0 : SZSP_HORIZONTAL); + this->FinishInitNested(number); + + if (!this->show_break_box) break_check_enabled = false; + + this->last_vscroll_pos = 0; + this->autoscroll = true; + this->highlight_row = -1; + + this->querystrings[WID_SCRD_BREAK_STR_EDIT_BOX] = &this->break_editbox; + + SetWidgetsDisabledState(!this->show_break_box, WID_SCRD_BREAK_STR_ON_OFF_BTN, WID_SCRD_BREAK_STR_EDIT_BOX, WID_SCRD_MATCH_CASE_BTN, WIDGET_LIST_END); + + /* Restore the break string value from static variable */ + this->break_editbox.text.Assign(this->break_string); + + this->SelectValidDebugCompany(); + this->InvalidateData(-1); + } + + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override + { + if (widget == WID_SCRD_LOG_PANEL) { + resize->height = FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.vsep_normal; + size->height = 14 * resize->height + WidgetDimensions::scaled.framerect.Vertical(); + } + } + + void OnPaint() override + { + this->SelectValidDebugCompany(); + + /* Draw standard stuff */ + this->DrawWidgets(); + + if (this->IsShaded()) return; // Don't draw anything when the window is shaded. + + bool dirty = false; + + /* Paint the company icons */ + for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { + NWidgetCore *button = this->GetWidget(i + WID_SCRD_COMPANY_BUTTON_START); + + bool valid = Company::IsValidAiID(i); + + /* Check whether the validity of the company changed */ + dirty |= (button->IsDisabled() == valid); + + /* Mark dead/paused AIs by setting the background colour. */ + bool dead = valid && Company::Get(i)->ai_instance->IsDead(); + bool paused = valid && Company::Get(i)->ai_instance->IsPaused(); + /* Re-paint if the button was updated. + * (note that it is intentional that SetScriptButtonColour is always called) */ + dirty |= SetScriptButtonColour(*button, dead, paused); + + /* Draw company icon only for valid AI companies */ + if (!valid) continue; + + byte offset = (i == script_debug_company) ? 1 : 0; + DrawCompanyIcon(i, button->pos_x + button->current_x / 2 - 7 + offset, this->GetWidget(WID_SCRD_COMPANY_BUTTON_START + i)->pos_y + 2 + offset); + } + + /* Set button colour for Game Script. */ + GameInstance *game = Game::GetInstance(); + bool valid = game != nullptr; + bool dead = valid && game->IsDead(); + bool paused = valid && game->IsPaused(); + + NWidgetCore *button = this->GetWidget(WID_SCRD_SCRIPT_GAME); + dirty |= (button->IsDisabled() == valid) || SetScriptButtonColour(*button, dead, paused); + + if (dirty) this->InvalidateData(-1); + + /* If there are no active companies, don't display anything else. */ + if (script_debug_company == INVALID_COMPANY) return; + + ScriptLog::LogData *log = this->GetLogPointer(); + + int scroll_count = (log == nullptr) ? 0 : log->used; + if (this->vscroll->GetCount() != scroll_count) { + this->vscroll->SetCount(scroll_count); + + /* We need a repaint */ + this->SetWidgetDirty(WID_SCRD_SCROLLBAR); + } + + if (log == nullptr) return; + + /* Detect when the user scrolls the window. Enable autoscroll when the + * bottom-most line becomes visible. */ + if (this->last_vscroll_pos != this->vscroll->GetPosition()) { + this->autoscroll = this->vscroll->GetPosition() >= log->used - this->vscroll->GetCapacity(); + } + if (this->autoscroll) { + int scroll_pos = std::max(0, log->used - this->vscroll->GetCapacity()); + if (scroll_pos != this->vscroll->GetPosition()) { + this->vscroll->SetPosition(scroll_pos); + + /* We need a repaint */ + this->SetWidgetDirty(WID_SCRD_SCROLLBAR); + this->SetWidgetDirty(WID_SCRD_LOG_PANEL); + } + } + this->last_vscroll_pos = this->vscroll->GetPosition(); + } + + void SetStringParameters(int widget) const override + { + if (widget != WID_SCRD_NAME_TEXT) return; + + if (script_debug_company == OWNER_DEITY) { + const GameInfo *info = Game::GetInfo(); + assert(info != nullptr); + SetDParam(0, STR_AI_DEBUG_NAME_AND_VERSION); + SetDParamStr(1, info->GetName()); + SetDParam(2, info->GetVersion()); + } else if (script_debug_company == INVALID_COMPANY || !Company::IsValidAiID(script_debug_company)) { + SetDParam(0, STR_EMPTY); + } else { + const AIInfo *info = Company::Get(script_debug_company)->ai_info; + assert(info != nullptr); + SetDParam(0, STR_AI_DEBUG_NAME_AND_VERSION); + SetDParamStr(1, info->GetName()); + SetDParam(2, info->GetVersion()); + } + } + + void DrawWidget(const Rect &r, int widget) const override + { + if (script_debug_company == INVALID_COMPANY) return; + + if (widget != WID_SCRD_LOG_PANEL) return; + + ScriptLog::LogData *log = this->GetLogPointer(); + if (log == nullptr) return; + + Rect br = r.Shrink(WidgetDimensions::scaled.bevel); + Rect tr = r.Shrink(WidgetDimensions::scaled.framerect); + for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < log->used; i++) { + int pos = (i + log->pos + 1 - log->used + log->count) % log->count; + if (log->lines[pos] == nullptr) break; + + TextColour colour; + switch (log->type[pos]) { + case ScriptLog::LOG_SQ_INFO: colour = TC_BLACK; break; + case ScriptLog::LOG_SQ_ERROR: colour = TC_WHITE; break; + case ScriptLog::LOG_INFO: colour = TC_BLACK; break; + case ScriptLog::LOG_WARNING: colour = TC_YELLOW; break; + case ScriptLog::LOG_ERROR: colour = TC_RED; break; + default: colour = TC_BLACK; break; + } + + /* Check if the current line should be highlighted */ + if (pos == this->highlight_row) { + GfxFillRect(br.left, tr.top, br.right, tr.top + this->resize.step_height - 1, PC_BLACK); + if (colour == TC_BLACK) colour = TC_WHITE; // Make black text readable by inverting it to white. + } + + DrawString(tr, log->lines[pos], colour, SA_LEFT | SA_FORCE); + tr.top += this->resize.step_height; + } + } + + /** + * Change all settings to select another Script. + * @param show_ai The new AI to show. + */ + void ChangeToScript(CompanyID show_script) + { + if (!this->IsValidDebugCompany(show_script)) return; + + script_debug_company = show_script; + + this->highlight_row = -1; // The highlight of one Script make little sense for another Script. + + /* Close AI settings window to prevent confusion */ + CloseWindowByClass(WC_SCRIPT_SETTINGS); + + this->InvalidateData(-1); + + this->autoscroll = true; + this->last_vscroll_pos = this->vscroll->GetPosition(); + } + + void OnClick(Point pt, int widget, int click_count) override + { + /* Also called for hotkeys, so check for disabledness */ + if (this->IsWidgetDisabled(widget)) return; + + /* Check which button is clicked */ + if (IsInsideMM(widget, WID_SCRD_COMPANY_BUTTON_START, WID_SCRD_COMPANY_BUTTON_END + 1)) { + ChangeToScript((CompanyID)(widget - WID_SCRD_COMPANY_BUTTON_START)); + } + + switch (widget) { + case WID_SCRD_SCRIPT_GAME: + ChangeToScript(OWNER_DEITY); + break; + + case WID_SCRD_RELOAD_TOGGLE: + if (script_debug_company == OWNER_DEITY) break; + /* First kill the company of the AI, then start a new one. This should start the current AI again */ + Command::Post(CCA_DELETE, script_debug_company, CRR_MANUAL, INVALID_CLIENT_ID); + Command::Post(CCA_NEW_AI, script_debug_company, CRR_NONE, INVALID_CLIENT_ID); + break; + + case WID_SCRD_SETTINGS: + ShowScriptSettingsWindow(script_debug_company); + break; + + case WID_SCRD_BREAK_STR_ON_OFF_BTN: + this->break_check_enabled = !this->break_check_enabled; + this->InvalidateData(-1); + break; + + case WID_SCRD_MATCH_CASE_BTN: + this->case_sensitive_break_check = !this->case_sensitive_break_check; + this->InvalidateData(-1); + break; + + case WID_SCRD_CONTINUE_BTN: + /* Unpause current AI / game script and mark the corresponding script button dirty. */ + if (!this->IsDead()) { + if (script_debug_company == OWNER_DEITY) { + Game::Unpause(); + } else { + AI::Unpause(script_debug_company); + } + } + + /* If the last AI/Game Script is unpaused, unpause the game too. */ + if ((_pause_mode & PM_PAUSED_NORMAL) == PM_PAUSED_NORMAL) { + bool all_unpaused = !Game::IsPaused(); + if (all_unpaused) { + for (const Company *c : Company::Iterate()) { + if (c->is_ai && AI::IsPaused(c->index)) { + all_unpaused = false; + break; + } + } + if (all_unpaused) { + /* All scripts have been unpaused => unpause the game. */ + Command::Post(PM_PAUSED_NORMAL, false); + } + } + } + + this->highlight_row = -1; + this->InvalidateData(-1); + break; + } + } + + void OnEditboxChanged(int wid) override + { + if (wid != WID_SCRD_BREAK_STR_EDIT_BOX) return; + + /* Save the current string to static member so it can be restored next time the window is opened. */ + strecpy(this->break_string, this->break_editbox.text.buf, lastof(this->break_string)); + break_string_filter.SetFilterTerm(this->break_string); + } + + /** + * Some data on this window has become invalid. + * @param data Information about the changed data. + * This is the company ID of the AI/GS which wrote a new log message, or -1 in other cases. + * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. + */ + void OnInvalidateData(int data = 0, bool gui_scope = true) override + { + /* If the log message is related to the active company tab, check the break string. + * This needs to be done in gameloop-scope, so the AI is suspended immediately. */ + if (!gui_scope && data == script_debug_company && this->IsValidDebugCompany(script_debug_company) && this->break_check_enabled && !this->break_string_filter.IsEmpty()) { + /* Get the log instance of the active company */ + ScriptLog::LogData *log = this->GetLogPointer(); + + if (log != nullptr) { + this->break_string_filter.ResetState(); + this->break_string_filter.AddLine(log->lines[log->pos]); + if (this->break_string_filter.GetState()) { + /* Pause execution of script. */ + if (!this->IsDead()) { + if (script_debug_company == OWNER_DEITY) { + Game::Pause(); + } else { + AI::Pause(script_debug_company); + } + } + + /* Pause the game. */ + if ((_pause_mode & PM_PAUSED_NORMAL) == PM_UNPAUSED) { + Command::Post(PM_PAUSED_NORMAL, true); + } + + /* Highlight row that matched */ + this->highlight_row = log->pos; + } + } + } + + if (!gui_scope) return; + + this->SelectValidDebugCompany(); + + ScriptLog::LogData *log = script_debug_company != INVALID_COMPANY ? this->GetLogPointer() : nullptr; + this->vscroll->SetCount((log == nullptr) ? 0 : log->used); + + /* Update company buttons */ + for (CompanyID i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { + this->SetWidgetDisabledState(i + WID_SCRD_COMPANY_BUTTON_START, !Company::IsValidAiID(i)); + this->SetWidgetLoweredState(i + WID_SCRD_COMPANY_BUTTON_START, script_debug_company == i); + } + + this->SetWidgetDisabledState(WID_SCRD_SCRIPT_GAME, Game::GetGameInstance() == nullptr); + this->SetWidgetLoweredState(WID_SCRD_SCRIPT_GAME, script_debug_company == OWNER_DEITY); + + this->SetWidgetLoweredState(WID_SCRD_BREAK_STR_ON_OFF_BTN, this->break_check_enabled); + this->SetWidgetLoweredState(WID_SCRD_MATCH_CASE_BTN, this->case_sensitive_break_check); + + this->SetWidgetDisabledState(WID_SCRD_SETTINGS, script_debug_company == INVALID_COMPANY); + extern CompanyID _local_company; + this->SetWidgetDisabledState(WID_SCRD_RELOAD_TOGGLE, script_debug_company == INVALID_COMPANY || script_debug_company == OWNER_DEITY || script_debug_company == _local_company); + this->SetWidgetDisabledState(WID_SCRD_CONTINUE_BTN, script_debug_company == INVALID_COMPANY || + (script_debug_company == OWNER_DEITY ? !Game::IsPaused() : !AI::IsPaused(script_debug_company))); + } + + void OnResize() override + { + this->vscroll->SetCapacityFromWidget(this, WID_SCRD_LOG_PANEL, WidgetDimensions::scaled.framerect.Vertical()); + } + + static HotkeyList hotkeys; +}; + +CompanyID ScriptDebugWindow::script_debug_company = INVALID_COMPANY; +char ScriptDebugWindow::break_string[MAX_BREAK_STR_STRING_LENGTH] = ""; +bool ScriptDebugWindow::break_check_enabled = true; +bool ScriptDebugWindow::case_sensitive_break_check = false; +StringFilter ScriptDebugWindow::break_string_filter(&ScriptDebugWindow::case_sensitive_break_check); + +/** Make a number of rows with buttons for each company for the Script debug window. */ +NWidgetBase *MakeCompanyButtonRowsScriptDebug(int *biggest_index) +{ + return MakeCompanyButtonRows(biggest_index, WID_SCRD_COMPANY_BUTTON_START, WID_SCRD_COMPANY_BUTTON_END, COLOUR_GREY, 8, STR_AI_DEBUG_SELECT_AI_TOOLTIP); +} + +/** + * Handler for global hotkeys of the ScriptDebugWindow. + * @param hotkey Hotkey + * @return ES_HANDLED if hotkey was accepted. + */ +static EventState ScriptDebugGlobalHotkeys(int hotkey) +{ + if (_game_mode != GM_NORMAL) return ES_NOT_HANDLED; + Window *w = ShowScriptDebugWindow(INVALID_COMPANY); + if (w == nullptr) return ES_NOT_HANDLED; + return w->OnHotkey(hotkey); +} + +static Hotkey scriptdebug_hotkeys[] = { + Hotkey('1', "company_1", WID_SCRD_COMPANY_BUTTON_START), + Hotkey('2', "company_2", WID_SCRD_COMPANY_BUTTON_START + 1), + Hotkey('3', "company_3", WID_SCRD_COMPANY_BUTTON_START + 2), + Hotkey('4', "company_4", WID_SCRD_COMPANY_BUTTON_START + 3), + Hotkey('5', "company_5", WID_SCRD_COMPANY_BUTTON_START + 4), + Hotkey('6', "company_6", WID_SCRD_COMPANY_BUTTON_START + 5), + Hotkey('7', "company_7", WID_SCRD_COMPANY_BUTTON_START + 6), + Hotkey('8', "company_8", WID_SCRD_COMPANY_BUTTON_START + 7), + Hotkey('9', "company_9", WID_SCRD_COMPANY_BUTTON_START + 8), + Hotkey((uint16)0, "company_10", WID_SCRD_COMPANY_BUTTON_START + 9), + Hotkey((uint16)0, "company_11", WID_SCRD_COMPANY_BUTTON_START + 10), + Hotkey((uint16)0, "company_12", WID_SCRD_COMPANY_BUTTON_START + 11), + Hotkey((uint16)0, "company_13", WID_SCRD_COMPANY_BUTTON_START + 12), + Hotkey((uint16)0, "company_14", WID_SCRD_COMPANY_BUTTON_START + 13), + Hotkey((uint16)0, "company_15", WID_SCRD_COMPANY_BUTTON_START + 14), + Hotkey('S', "settings", WID_SCRD_SETTINGS), + Hotkey('0', "game_script", WID_SCRD_SCRIPT_GAME), + Hotkey((uint16)0, "reload", WID_SCRD_RELOAD_TOGGLE), + Hotkey('B', "break_toggle", WID_SCRD_BREAK_STR_ON_OFF_BTN), + Hotkey('F', "break_string", WID_SCRD_BREAK_STR_EDIT_BOX), + Hotkey('C', "match_case", WID_SCRD_MATCH_CASE_BTN), + Hotkey(WKC_RETURN, "continue", WID_SCRD_CONTINUE_BTN), + HOTKEY_LIST_END +}; +HotkeyList ScriptDebugWindow::hotkeys("aidebug", scriptdebug_hotkeys, ScriptDebugGlobalHotkeys); + +/** Widgets for the Script debug window. */ +static const NWidgetPart _nested_script_debug_widgets[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_GREY), + NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_AI_DEBUG, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, COLOUR_GREY), + NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), + NWidget(WWT_STICKYBOX, COLOUR_GREY), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY, WID_SCRD_VIEW), + NWidgetFunction(MakeCompanyButtonRowsScriptDebug), SetPadding(0, 2, 1, 2), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCRD_SCRIPT_GAME), SetMinimalSize(100, 20), SetResize(1, 0), SetDataTip(STR_AI_GAME_SCRIPT, STR_AI_GAME_SCRIPT_TOOLTIP), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCRD_NAME_TEXT), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_JUST_STRING, STR_AI_DEBUG_NAME_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCRD_SETTINGS), SetMinimalSize(100, 20), SetDataTip(STR_AI_DEBUG_SETTINGS, STR_AI_DEBUG_SETTINGS_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCRD_RELOAD_TOGGLE), SetMinimalSize(100, 20), SetDataTip(STR_AI_DEBUG_RELOAD, STR_AI_DEBUG_RELOAD_TOOLTIP), + EndContainer(), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_VERTICAL), + /* Log panel */ + NWidget(WWT_PANEL, COLOUR_GREY, WID_SCRD_LOG_PANEL), SetMinimalSize(287, 180), SetResize(1, 1), SetScrollbar(WID_SCRD_SCROLLBAR), + EndContainer(), + /* Break string widgets */ + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_SCRD_BREAK_STRING_WIDGETS), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_IMGBTN_2, COLOUR_GREY, WID_SCRD_BREAK_STR_ON_OFF_BTN), SetFill(0, 1), SetDataTip(SPR_FLAG_VEH_STOPPED, STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP), + NWidget(WWT_PANEL, COLOUR_GREY), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_LABEL, COLOUR_GREY), SetPadding(2, 2, 2, 4), SetDataTip(STR_AI_DEBUG_BREAK_ON_LABEL, 0x0), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SCRD_BREAK_STR_EDIT_BOX), SetFill(1, 1), SetResize(1, 0), SetPadding(2, 2, 2, 2), SetDataTip(STR_AI_DEBUG_BREAK_STR_OSKTITLE, STR_AI_DEBUG_BREAK_STR_TOOLTIP), + EndContainer(), + EndContainer(), + NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SCRD_MATCH_CASE_BTN), SetMinimalSize(100, 0), SetFill(0, 1), SetDataTip(STR_AI_DEBUG_MATCH_CASE, STR_AI_DEBUG_MATCH_CASE_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SCRD_CONTINUE_BTN), SetMinimalSize(100, 0), SetFill(0, 1), SetDataTip(STR_AI_DEBUG_CONTINUE, STR_AI_DEBUG_CONTINUE_TOOLTIP), + EndContainer(), + EndContainer(), + EndContainer(), + NWidget(NWID_VERTICAL), + NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SCRD_SCROLLBAR), + NWidget(WWT_RESIZEBOX, COLOUR_GREY), + EndContainer(), +EndContainer(), +}; + +/** Window definition for the Script debug window. */ +static WindowDesc _script_debug_desc( + WDP_AUTO, "script_debug", 600, 450, + WC_SCRIPT_DEBUG, WC_NONE, + 0, + _nested_script_debug_widgets, lengthof(_nested_script_debug_widgets), + &ScriptDebugWindow::hotkeys +); + +/** + * Open the Script debug window and select the given company. + * @param show_company Display debug information about this AI company. + */ +Window *ShowScriptDebugWindow(CompanyID show_company) +{ + if (!_networking || _network_server) { + ScriptDebugWindow *w = (ScriptDebugWindow *)BringWindowToFrontById(WC_SCRIPT_DEBUG, 0); + if (w == nullptr) w = new ScriptDebugWindow(&_script_debug_desc, 0); + if (show_company != INVALID_COMPANY) w->ChangeToScript(show_company); + return w; + } else { + ShowErrorMessage(STR_ERROR_AI_DEBUG_SERVER_ONLY, INVALID_STRING_ID, WL_INFO); + } + + return nullptr; +} + +/** + * Reset the Script windows to their initial state. + */ +void InitializeScriptGui() +{ + ScriptDebugWindow::script_debug_company = INVALID_COMPANY; +} + +/** Open the AI debug window if one of the AI scripts has crashed. */ +void ShowScriptDebugWindowIfScriptError() +{ + /* Network clients can't debug AIs. */ + if (_networking && !_network_server) return; + + for (const Company *c : Company::Iterate()) { + if (c->is_ai && c->ai_instance->IsDead()) { + ShowScriptDebugWindow(c->index); + break; + } + } + + GameInstance *g = Game::GetGameInstance(); + if (g != nullptr && g->IsDead()) { + ShowScriptDebugWindow(OWNER_DEITY); + } +} diff --git a/src/script/script_gui.h b/src/script/script_gui.h new file mode 100644 index 0000000000..d892feef3a --- /dev/null +++ b/src/script/script_gui.h @@ -0,0 +1,23 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + + /** @file script_gui.hpp %Window for configuring the scripts */ + +#ifndef SCRIPT_GUI_HPP +#define SCRIPT_GUI_HPP + +#include "../company_type.h" +#include "../textfile_type.h" + +void ShowScriptListWindow(CompanyID slot); +Window *ShowScriptDebugWindow(CompanyID show_company = INVALID_COMPANY); +void ShowScriptSettingsWindow(CompanyID slot); +void ShowScriptTextfileWindow(TextfileType file_type, CompanyID slot); +void ShowScriptDebugWindowIfScriptError(); +void InitializeScriptGui(); + +#endif /* SCRIPT_GUI_HPP */ diff --git a/src/table/settings/gui_settings.ini b/src/table/settings/gui_settings.ini index a521408be7..7abeed9809 100644 --- a/src/table/settings/gui_settings.ini +++ b/src/table/settings/gui_settings.ini @@ -779,7 +779,7 @@ cat = SC_EXPERT var = gui.ai_developer_tools flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC def = false -post_cb = [](auto) { InvalidateWindowClassesData(WC_AI_SETTINGS); } +post_cb = [](auto) { InvalidateWindowClassesData(WC_SCRIPT_SETTINGS); } cat = SC_EXPERT [SDTC_BOOL] diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 9d1aad649a..d03371d428 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -34,6 +34,7 @@ #include "news_gui.h" #include "ai/ai_gui.hpp" #include "game/game_gui.hpp" +#include "script/script_gui.h" #include "tilehighlight_func.h" #include "smallmap_gui.h" #include "graph_gui.h" @@ -1163,7 +1164,7 @@ static CallBackFunction MenuClickHelp(int index) switch (index) { case 0: return PlaceLandBlockInfo(); case 2: IConsoleSwitch(); break; - case 3: ShowAIDebugWindow(); break; + case 3: ShowScriptDebugWindow(); break; case 4: ShowScreenshotWindow(); break; case 5: ShowFramerateWindow(); break; case 6: ShowAboutWindow(); break; @@ -2073,7 +2074,7 @@ struct MainToolbarWindow : Window { case MTHK_BUILD_AIRPORT: ShowBuildAirToolbar(); break; case MTHK_BUILD_TREES: ShowBuildTreesToolbar(); break; case MTHK_MUSIC: ShowMusicWindow(); break; - case MTHK_AI_DEBUG: ShowAIDebugWindow(); break; + case MTHK_SCRIPT_DEBUG: ShowScriptDebugWindow(); break; case MTHK_SMALL_SCREENSHOT: MakeScreenshotWithConfirm(SC_VIEWPORT); break; case MTHK_ZOOMEDIN_SCREENSHOT: MakeScreenshotWithConfirm(SC_ZOOMEDIN); break; case MTHK_DEFAULTZOOM_SCREENSHOT: MakeScreenshotWithConfirm(SC_DEFAULTZOOM); break; @@ -2187,7 +2188,7 @@ static Hotkey maintoolbar_hotkeys[] = { Hotkey(WKC_SHIFT | WKC_F10, "build_airport", MTHK_BUILD_AIRPORT), Hotkey(WKC_SHIFT | WKC_F11, "build_trees", MTHK_BUILD_TREES), Hotkey(WKC_SHIFT | WKC_F12, "music", MTHK_MUSIC), - Hotkey((uint16)0, "ai_debug", MTHK_AI_DEBUG), + Hotkey((uint16)0, "ai_debug", MTHK_SCRIPT_DEBUG), Hotkey(WKC_CTRL | 'S', "small_screenshot", MTHK_SMALL_SCREENSHOT), Hotkey(WKC_CTRL | 'P', "zoomedin_screenshot", MTHK_ZOOMEDIN_SCREENSHOT), Hotkey(WKC_CTRL | 'D', "defaultzoom_screenshot", MTHK_DEFAULTZOOM_SCREENSHOT), diff --git a/src/toolbar_gui.h b/src/toolbar_gui.h index 5b8000f0c1..cede0a7c19 100644 --- a/src/toolbar_gui.h +++ b/src/toolbar_gui.h @@ -41,7 +41,7 @@ enum MainToolbarHotkeys { MTHK_BUILD_TREES, MTHK_MUSIC, MTHK_LANDINFO, - MTHK_AI_DEBUG, + MTHK_SCRIPT_DEBUG, MTHK_SMALL_SCREENSHOT, MTHK_ZOOMEDIN_SCREENSHOT, MTHK_DEFAULTZOOM_SCREENSHOT, diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index f766d1cff7..33e46b6db5 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -44,6 +44,7 @@ add_files( rail_widget.h road_widget.h screenshot_widget.h + script_widget.h settings_widget.h sign_widget.h slider.cpp diff --git a/src/widgets/ai_widget.h b/src/widgets/ai_widget.h index f09ab21210..f50b6632c8 100644 --- a/src/widgets/ai_widget.h +++ b/src/widgets/ai_widget.h @@ -10,28 +10,8 @@ #ifndef WIDGETS_AI_WIDGET_H #define WIDGETS_AI_WIDGET_H -#include "../company_type.h" #include "../textfile_type.h" -/** Widgets of the #AIListWindow class. */ -enum AIListWidgets { - WID_AIL_CAPTION, ///< Caption of the window. - WID_AIL_LIST, ///< The matrix with all available AIs. - WID_AIL_SCROLLBAR, ///< Scrollbar next to the AI list. - WID_AIL_INFO_BG, ///< Panel to draw some AI information on. - WID_AIL_ACCEPT, ///< Accept button. - WID_AIL_CANCEL, ///< Cancel button. -}; - -/** Widgets of the #AISettingsWindow class. */ -enum AISettingsWidgets { - WID_AIS_CAPTION, ///< Caption of the window. - WID_AIS_BACKGROUND, ///< Panel to draw the settings on. - WID_AIS_SCROLLBAR, ///< Scrollbar to scroll through all settings. - WID_AIS_ACCEPT, ///< Accept button. - WID_AIS_RESET, ///< Reset button. -}; - /** Widgets of the #AIConfigWindow class. */ enum AIConfigWidgets { WID_AIC_BACKGROUND, ///< Window background. @@ -49,22 +29,4 @@ enum AIConfigWidgets { WID_AIC_CONTENT_DOWNLOAD = WID_AIC_TEXTFILE + TFT_END, ///< Download content button. }; -/** Widgets of the #AIDebugWindow class. */ -enum AIDebugWidgets { - WID_AID_VIEW, ///< The row of company buttons. - WID_AID_NAME_TEXT, ///< Name of the current selected. - WID_AID_SETTINGS, ///< Settings button. - WID_AID_SCRIPT_GAME, ///< Game Script button. - WID_AID_RELOAD_TOGGLE, ///< Reload button. - WID_AID_LOG_PANEL, ///< Panel where the log is in. - WID_AID_SCROLLBAR, ///< Scrollbar of the log panel. - WID_AID_COMPANY_BUTTON_START, ///< Buttons in the VIEW. - WID_AID_COMPANY_BUTTON_END = WID_AID_COMPANY_BUTTON_START + MAX_COMPANIES - 1, ///< Last possible button in the VIEW. - WID_AID_BREAK_STRING_WIDGETS, ///< The panel to handle the breaking on string. - WID_AID_BREAK_STR_ON_OFF_BTN, ///< Enable breaking on string. - WID_AID_BREAK_STR_EDIT_BOX, ///< Edit box for the string to break on. - WID_AID_MATCH_CASE_BTN, ///< Checkbox to use match caching or not. - WID_AID_CONTINUE_BTN, ///< Continue button. -}; - #endif /* WIDGETS_AI_WIDGET_H */ diff --git a/src/widgets/game_widget.h b/src/widgets/game_widget.h index 0d2d0950b3..f791a43749 100644 --- a/src/widgets/game_widget.h +++ b/src/widgets/game_widget.h @@ -5,7 +5,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 . */ -/** @file ai_widget.h Types related to the ai widgets. */ +/** @file game_widget.h Types related to the GS widgets. */ #ifndef WIDGETS_GS_WIDGET_H #define WIDGETS_GS_WIDGET_H diff --git a/src/widgets/script_widget.h b/src/widgets/script_widget.h new file mode 100644 index 0000000000..9c757e12fa --- /dev/null +++ b/src/widgets/script_widget.h @@ -0,0 +1,52 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file script_widget.h Types related to the script widgets. */ + +#ifndef WIDGETS_SCRIPT_WIDGET_H +#define WIDGETS_SCRIPT_WIDGET_H + +#include "../company_type.h" + +/** Widgets of the #ScriptListWindow class. */ +enum ScriptListWidgets { + WID_SCRL_CAPTION, ///< Caption of the window. + WID_SCRL_LIST, ///< The matrix with all available Scripts. + WID_SCRL_SCROLLBAR, ///< Scrollbar next to the Script list. + WID_SCRL_INFO_BG, ///< Panel to draw some Script information on. + WID_SCRL_ACCEPT, ///< Accept button. + WID_SCRL_CANCEL, ///< Cancel button. +}; + +/** Widgets of the #ScriptSettingsWindow class. */ +enum ScriptSettingsWidgets { + WID_SCRS_CAPTION, ///< Caption of the window. + WID_SCRS_BACKGROUND, ///< Panel to draw the settings on. + WID_SCRS_SCROLLBAR, ///< Scrollbar to scroll through all settings. + WID_SCRS_ACCEPT, ///< Accept button. + WID_SCRS_RESET, ///< Reset button. +}; + +/** Widgets of the #ScriptDebugWindow class. */ +enum ScriptDebugWidgets { + WID_SCRD_VIEW, ///< The row of company buttons. + WID_SCRD_NAME_TEXT, ///< Name of the current selected. + WID_SCRD_SETTINGS, ///< Settings button. + WID_SCRD_SCRIPT_GAME, ///< Game Script button. + WID_SCRD_RELOAD_TOGGLE, ///< Reload button. + WID_SCRD_LOG_PANEL, ///< Panel where the log is in. + WID_SCRD_SCROLLBAR, ///< Scrollbar of the log panel. + WID_SCRD_COMPANY_BUTTON_START, ///< Buttons in the VIEW. + WID_SCRD_COMPANY_BUTTON_END = WID_SCRD_COMPANY_BUTTON_START + MAX_COMPANIES - 1, ///< Last possible button in the VIEW. + WID_SCRD_BREAK_STRING_WIDGETS, ///< The panel to handle the breaking on string. + WID_SCRD_BREAK_STR_ON_OFF_BTN, ///< Enable breaking on string. + WID_SCRD_BREAK_STR_EDIT_BOX, ///< Edit box for the string to break on. + WID_SCRD_MATCH_CASE_BTN, ///< Checkbox to use match caching or not. + WID_SCRD_CONTINUE_BTN, ///< Continue button. +}; + +#endif /* WIDGETS_SCRIPT_WIDGET_H */ diff --git a/src/window.cpp b/src/window.cpp index 0adcef17be..00ed25c7dc 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1367,8 +1367,8 @@ static uint GetWindowZPriority(WindowClass wc) case WC_CUSTOM_CURRENCY: case WC_NETWORK_WINDOW: case WC_GRF_PARAMETERS: - case WC_AI_LIST: - case WC_AI_SETTINGS: + case WC_SCRIPT_LIST: + case WC_SCRIPT_SETTINGS: case WC_TEXTFILE: ++z_priority; FALLTHROUGH; diff --git a/src/window_type.h b/src/window_type.h index 8b1c0cd80a..a31150f21d 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -162,10 +162,10 @@ enum WindowClass { /** - * AI settings; %Window numbers: - * - 0 = #AISettingsWidgets + * Script settings; %Window numbers: + * - 0 = #ScriptSettingsWidgets */ - WC_AI_SETTINGS, + WC_SCRIPT_SETTINGS, /** * NewGRF parameters; %Window numbers: @@ -271,10 +271,10 @@ enum WindowClass { WC_SIGN_LIST, /** - * AI list; %Window numbers: - * - 0 = #AIListWidgets + * Scripts list; %Window numbers: + * - 0 = #ScriptListWidgets */ - WC_AI_LIST, + WC_SCRIPT_LIST, /** * Goals list; %Window numbers: @@ -650,10 +650,10 @@ enum WindowClass { /** - * AI debug window; %Window numbers: - * - 0 = #AIDebugWidgets + * Script debug window; %Window numbers: + * - 0 = #ScriptDebugWidgets */ - WC_AI_DEBUG, + WC_SCRIPT_DEBUG, /** * NewGRF inspect (debug); %Window numbers: From 7c998d46bd41af8d7d728f8aabd089e59d27c517 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 5 Feb 2023 18:43:07 +0000 Subject: [PATCH 26/42] Update: Translations from eints spanish (mexican): 22 changes by VMMF chinese (simplified): 2 changes by XiaoJi-Game turkish: 2 changes by EndChapter --- src/lang/afrikaans.txt | 2 +- src/lang/arabic_egypt.txt | 2 +- src/lang/basque.txt | 2 +- src/lang/belarusian.txt | 2 +- src/lang/brazilian_portuguese.txt | 2 +- src/lang/bulgarian.txt | 2 +- src/lang/catalan.txt | 2 +- src/lang/chuvash.txt | 2 +- src/lang/croatian.txt | 2 +- src/lang/czech.txt | 2 +- src/lang/danish.txt | 2 +- src/lang/dutch.txt | 2 +- src/lang/english_AU.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/esperanto.txt | 2 +- src/lang/estonian.txt | 2 +- src/lang/faroese.txt | 2 +- src/lang/finnish.txt | 2 +- src/lang/french.txt | 2 +- src/lang/frisian.txt | 2 +- src/lang/gaelic.txt | 2 +- src/lang/galician.txt | 2 +- src/lang/german.txt | 2 +- src/lang/greek.txt | 2 +- src/lang/hebrew.txt | 2 +- src/lang/hindi.txt | 2 +- src/lang/hungarian.txt | 2 +- src/lang/icelandic.txt | 2 +- src/lang/ido.txt | 2 +- src/lang/indonesian.txt | 2 +- src/lang/irish.txt | 2 +- src/lang/italian.txt | 2 +- src/lang/japanese.txt | 2 +- src/lang/korean.txt | 2 +- src/lang/latin.txt | 2 +- src/lang/latvian.txt | 2 +- src/lang/lithuanian.txt | 2 +- src/lang/luxembourgish.txt | 2 +- src/lang/macedonian.txt | 2 +- src/lang/malay.txt | 2 +- src/lang/maltese.txt | 2 +- src/lang/marathi.txt | 2 +- src/lang/norwegian_bokmal.txt | 2 +- src/lang/norwegian_nynorsk.txt | 2 +- src/lang/persian.txt | 2 +- src/lang/polish.txt | 2 +- src/lang/portuguese.txt | 2 +- src/lang/romanian.txt | 2 +- src/lang/russian.txt | 2 +- src/lang/serbian.txt | 2 +- src/lang/simplified_chinese.txt | 4 +++- src/lang/slovak.txt | 2 +- src/lang/slovenian.txt | 2 +- src/lang/spanish.txt | 2 +- src/lang/spanish_MX.txt | 35 ++++++++++++++++++++----------- src/lang/swedish.txt | 2 +- src/lang/tamil.txt | 2 +- src/lang/thai.txt | 2 +- src/lang/traditional_chinese.txt | 2 +- src/lang/turkish.txt | 4 +++- src/lang/ukrainian.txt | 2 +- src/lang/urdu.txt | 2 +- src/lang/vietnamese.txt | 2 +- src/lang/welsh.txt | 2 +- 64 files changed, 90 insertions(+), 75 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index e144cd38e4..93d91609d2 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -4286,7 +4286,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Volledig STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Hoogtekaart-skermkiekie STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap-skermkiekie -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Maak toe STR_AI_SETTINGS_RESET :{BLACK}Herstel diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index a979257798..27421a80dc 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -3971,7 +3971,7 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا ت STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}التقط لقطة شاشة كاملة STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}صور الخاريطة الكاملة -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CLOSE :{BLACK} اغلاق STR_AI_SETTINGS_RESET :{BLACK} اعادة ضبط STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 32b4333ae3..ead3a77312 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -4031,7 +4031,7 @@ STR_AI_LIST_CANCEL :{BLACK}Ezeztatu STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ez aldatu script-a -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :IA STR_AI_SETTINGS_CLOSE :{BLACK}Itxi STR_AI_SETTINGS_RESET :{BLACK}Berrabiarazi diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 275f958967..3dc6a38a51 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -4643,7 +4643,7 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не з STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Бачная вобласць у максімальным набліжэнні -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :ШI STR_AI_SETTINGS_CLOSE :{BLACK}Закрыць STR_AI_SETTINGS_RESET :{BLACK}Ськід diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index f7ebcc59c8..e69ce042d3 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -4622,7 +4622,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de tela do mapa topográfico STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de tela do minimapa -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parâmetros de IA STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Resetar diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index cf14e81673..da80276a61 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -4110,7 +4110,7 @@ STR_AI_LIST_CANCEL :{BLACK}Отме STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не променяй AI -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Затвори STR_AI_SETTINGS_RESET :{BLACK}Рестартиране diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 5804ee9cb2..1129dc0c8e 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -4624,7 +4624,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de pantalla del mapa d'alçades STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de pantalla del minimapa -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Paràmetres de la IA STR_AI_SETTINGS_CLOSE :{BLACK}Tanca STR_AI_SETTINGS_RESET :{BLACK}Restableix diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 1f18546230..01db89e7c0 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -1592,7 +1592,7 @@ STR_AI_LIST_VERSION :{LTBLUE}Вер -# AI Parameters +# Script Parameters STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 3e5a8beb48..0e0cc36c80 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -4472,7 +4472,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Slika ci STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Slika visinske mape STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Slika mini-mape -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :UI STR_AI_SETTINGS_CLOSE :{BLACK}Zatvori STR_AI_SETTINGS_RESET :{BLACK}Resetiraj diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 4903cf4dcf..0994ce52d6 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -4717,7 +4717,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Snímek STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Snímek výškové mapy STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Snímek (náhledové) mapy světa -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametry AI STR_AI_SETTINGS_CLOSE :{BLACK}Zavřít STR_AI_SETTINGS_RESET :{BLACK}Obnovit nastavení diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 60d334d9c9..8ac85293e5 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -4543,7 +4543,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Fuldt ko STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Højdekort skærmbillede STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minikort skærmbillede -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Luk STR_AI_SETTINGS_RESET :{BLACK}Nulstil diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 49e4fa07db..8bbc07d1bd 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -4623,7 +4623,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Schermaf STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Schermafbeelding van de hoogtekaart STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Schermafbeelding van de minikaart -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI-parameters STR_AI_SETTINGS_CLOSE :{BLACK}Sluiten STR_AI_SETTINGS_RESET :{BLACK}Terugstellen diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 935c2d48ff..5e5cefeea3 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -4621,7 +4621,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Whole ma STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Heightmap screenshot STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI Parameters STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 9244642cf9..36ab7e87c1 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4623,7 +4623,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Whole ma STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Heightmap screenshot STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI Parameters STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 786a7c5ba1..e355d66441 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -3543,7 +3543,7 @@ STR_AI_LIST_CANCEL :{BLACK}Nuligi STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne ŝanĝu AI-on -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Fermi STR_AI_SETTINGS_RESET :{BLACK}Reŝargo diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 7eb26fe4bc..00ffdf9c10 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -4543,7 +4543,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Terve ka STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Kõrguskaardi ekraanipilt STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pisikaardi ekraanipilt -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Sulge STR_AI_SETTINGS_RESET :{BLACK}Nulli diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 431b18d703..fd00ab146b 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -3684,7 +3684,7 @@ STR_AI_LIST_CANCEL :{BLACK}Angra STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikki broyta scripti -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Lat aftur STR_AI_SETTINGS_RESET :{BLACK}Endurstilla diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index ee4bf404b1..88c1506467 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -4623,7 +4623,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Koko kar STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Korkeuskartan kuvakaappaus STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pienoiskartan kuvakaappaus -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Tekoälyn parametrit STR_AI_SETTINGS_CLOSE :{BLACK}Sulje STR_AI_SETTINGS_RESET :{BLACK}Palauta diff --git a/src/lang/french.txt b/src/lang/french.txt index 7f0ffa521f..7dfe7e8515 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4622,7 +4622,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Capture STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Capture d'écran de la carte d'altitude STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Capture d'écran de la mini-carte -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Paramètres de l'IA STR_AI_SETTINGS_CLOSE :{BLACK}Fermer STR_AI_SETTINGS_RESET :{BLACK}Réinitialiser diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index ad62b9ec50..478aec1dd6 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -3882,7 +3882,7 @@ STR_AI_LIST_CANCEL :{BLACK}Annulear STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Skript net feroare -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Slúte STR_AI_SETTINGS_RESET :{BLACK}Weromsette diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index bcfed5811e..67f7ee642a 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -4427,7 +4427,7 @@ STR_AI_LIST_CANCEL :{BLACK}Sguir dh STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Na atharraich an sgriobt -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :IF STR_AI_SETTINGS_CLOSE :{BLACK}Dùin STR_AI_SETTINGS_RESET :{BLACK}Ath-shuidhich diff --git a/src/lang/galician.txt b/src/lang/galician.txt index b574786b3f..9c588f87b2 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -4618,7 +4618,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captura STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura de pantalla do mapa de alturas STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de pantalla do minimapa -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parámetros da IA STR_AI_SETTINGS_CLOSE :{BLACK}Pechar STR_AI_SETTINGS_RESET :{BLACK}Restablecer diff --git a/src/lang/german.txt b/src/lang/german.txt index 165938590c..48de04a7e4 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -4618,7 +4618,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Screensh STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Reliefkartenscreenshot STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Übersichtskartenscreenshot -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}KI-Parameter STR_AI_SETTINGS_CLOSE :{BLACK}Schließen STR_AI_SETTINGS_RESET :{BLACK}Zurücksetzen diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 7d7e5e468c..181413d9fb 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -4730,7 +4730,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Στιγ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Στιγμιότυπο χάρτη υψομετρίας STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Στιγμιότυπο μίνι χάρτη -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Κλείσιμο STR_AI_SETTINGS_RESET :{BLACK}Επαναφορά diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index f16c68e7cd..97fba122a3 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -4328,7 +4328,7 @@ STR_SCREENSHOT_SCREENSHOT :תמונת מס STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}זום ברירת מחדל לצילום מסך STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}צילום מסך של כל המפה -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :שחקן מחשב STR_AI_SETTINGS_CLOSE :{BLACK}סגור STR_AI_SETTINGS_RESET :{BLACK}אתחל diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 7d78dd3402..e141ae8939 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -1259,7 +1259,7 @@ STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} -# AI Parameters +# Script Parameters # Textfile window diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index bd8f71c88b..25583d8796 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -4681,7 +4681,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Teljes t STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Magasságtérkép mentése STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minitérkép mentése -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}MI paraméterei STR_AI_SETTINGS_CLOSE :{BLACK}Bezárás STR_AI_SETTINGS_RESET :{BLACK}Visszaállítás diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 50f820575b..714124708a 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -3918,7 +3918,7 @@ STR_AI_LIST_CANCEL :{BLACK}Hætta v STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Hætta við breytingar forskriftar -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :Gervigreindar STR_AI_SETTINGS_CLOSE :{BLACK}Loka STR_AI_SETTINGS_RESET :{BLACK}Frumstilla diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 3cc90bdcb2..863ac1e0a6 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -1453,7 +1453,7 @@ STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} -# AI Parameters +# Script Parameters STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index ceea4ed657..ca8ff68ae9 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -4617,7 +4617,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK} Tangkap STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Tangkapan layar Peta Ketinggian STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Tangkapan layar minimap -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parameter AI STR_AI_SETTINGS_CLOSE :{BLACK}Tutup STR_AI_SETTINGS_RESET :{BLACK}Reset diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 507329e0d7..d41bc3235a 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -4533,7 +4533,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Seat sc STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Seat scáileáin den mhapa airde STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Seat scáileáin den mhion-léarscáil -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Dún STR_AI_SETTINGS_RESET :{BLACK}Athshocraigh diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 38441f794c..d0e63f52ba 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -4658,7 +4658,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Screensh STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Screenshot della heightmap STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Screenshot della minimappa -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametri IA STR_AI_SETTINGS_CLOSE :{BLACK}Chiudi STR_AI_SETTINGS_RESET :{BLACK}Reimposta diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 422c0e0aca..bc95fa4c93 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -4581,7 +4581,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}地図 STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}ハイトマップスクリーンショット STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}ミニマップのスクリーンショット -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}閉じる STR_AI_SETTINGS_RESET :{BLACK}リセット diff --git a/src/lang/korean.txt b/src/lang/korean.txt index bd35070cd1..8336aa12a1 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -4624,7 +4624,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}지도 STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}높이맵 스크린 샷 STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}미니맵 스크린 샷 -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}인공지능 매개 변수 STR_AI_SETTINGS_CLOSE :{BLACK}닫기 STR_AI_SETTINGS_RESET :{BLACK}초기화 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index d898808b07..0b0af7b5df 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -4420,7 +4420,7 @@ STR_AI_LIST_CANCEL :{BLACK}Cancella STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Non scriptum mutare -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :IA STR_AI_SETTINGS_CLOSE :{BLACK}Claudere STR_AI_SETTINGS_RESET :{BLACK}Revertere diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 7638db7955..0bbe5eaf1e 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -4628,7 +4628,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Visas ka STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Augstumkartes ekrānuzņēmums STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minikartes ekrānuzņēmums -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}MI Parametri STR_AI_SETTINGS_CLOSE :{BLACK}Aizvērt STR_AI_SETTINGS_RESET :{BLACK}Atiestatīt diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 67f3992091..b3432ec87c 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -4826,7 +4826,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Viso pas STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Teminio žemėlapio kopija STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Mini žemėlapio kopija -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :DI STR_AI_SETTINGS_CLOSE :{BLACK}Uždaryti STR_AI_SETTINGS_RESET :{BLACK}Atstatyti diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 16f5b9ab5d..5d8493d637 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -4621,7 +4621,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Screensh STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Héichtekaartscreenshot STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap-Screenshot -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}KI Parameter STR_AI_SETTINGS_CLOSE :{BLACK}Zoumaachen STR_AI_SETTINGS_RESET :{BLACK}Reset diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 27b403ce2e..1a6be013af 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -1960,7 +1960,7 @@ STR_AI_LIST_CAPTION_GAMESCRIPT :GameScripts -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :АИ STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} STR_AI_SETTINGS_START_DELAY :Број на денови за да започнете оваа Пи по претходниот (се дава или зема): {ORANGE}{STRING} diff --git a/src/lang/malay.txt b/src/lang/malay.txt index e63b065827..bc5233b560 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -3828,7 +3828,7 @@ STR_AI_LIST_CANCEL :{BLACK}Batal STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Jangan ubah skrip -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Tutup STR_AI_SETTINGS_RESET :{BLACK}Semula diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 5765868414..a4941e91f7 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -1323,7 +1323,7 @@ STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Исчи -# AI Parameters +# Script Parameters # Textfile window diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index ff2c89b235..d98d7f43cf 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -1751,7 +1751,7 @@ STR_TIMETABLE_CHANGE_TIME :{BLACK}वे -# AI Parameters +# Script Parameters STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 93dfe5ad59..d4c2924c0f 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -4555,7 +4555,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Skjermbi STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Høydekart skjermbilde STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Oversiktskart skjermbilde -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Lukk STR_AI_SETTINGS_RESET :{BLACK}Tilbakestill diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 101a8fd9c1..f591ac824b 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -4051,7 +4051,7 @@ STR_AI_LIST_CANCEL :{BLACK}Avbryt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikkje endre AI -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Lukk STR_AI_SETTINGS_RESET :{BLACK}Tilbakestill diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 7c7cc26ebf..90144352a1 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -3476,7 +3476,7 @@ STR_AI_LIST_CANCEL :{BLACK}لغو STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}کد را تغییر نده -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :هوش مصنوعی(AI) STR_AI_SETTINGS_CLOSE :{BLACK}بستن STR_AI_SETTINGS_RESET :{BLACK}بازنشاندن diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 66bcaacf15..6315d7284b 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -5007,7 +5007,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Zrzut ek STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Zrzut ekranu mapy wysokościowej STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Zrzut ekranu minimapy -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametry SI STR_AI_SETTINGS_CLOSE :{BLACK}Zamknij STR_AI_SETTINGS_RESET :{BLACK}Resetuj diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index e70dfbe4c5..d582c8d514 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -4624,7 +4624,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Mapa com STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Mapa de alturas STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parâmetros de IA STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Repor diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 77edcc4f81..bc0763ae7b 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -4621,7 +4621,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Captură STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captură de hartă topografică STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captură de hartă a lumii -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametrii IA STR_AI_SETTINGS_CLOSE :{BLACK}Închide STR_AI_SETTINGS_RESET :{BLACK}Resetează diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 15448daf9d..639951ebf3 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -4808,7 +4808,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Сним STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Снимок карты высот STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Снимок миникарты -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Параметры ИИ STR_AI_SETTINGS_CLOSE :{BLACK}Закрыть STR_AI_SETTINGS_RESET :{BLACK}Сброс diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index c7e5dd05a3..145a352e06 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -4828,7 +4828,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Slika ek STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Slika ekrana sa elevacionom kartom STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Slika umanjene mape -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametri VI STR_AI_SETTINGS_CLOSE :{BLACK}Zatvori STR_AI_SETTINGS_RESET :{BLACK}Poništi diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index dc54b7a4ea..f2c16bb7a0 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1206,7 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右侧 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大初始贷款: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :无贷款 {RED}需要有游戏脚本以提供初始资金 STR_CONFIG_SETTING_INTEREST_RATE :贷款利率: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :贷款利率;如果通货膨胀启用,将同时影响通货膨胀率。 @@ -4621,7 +4623,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}全地 STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}高度图截图 STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}小地图截图 -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI参数 STR_AI_SETTINGS_CLOSE :{BLACK}关闭 STR_AI_SETTINGS_RESET :{BLACK}重设 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 023ae5a0f1..40bef87f07 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -4689,7 +4689,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Snímka STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Snímka výškovej mapy STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Snímka minimapy -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametre AI STR_AI_SETTINGS_CLOSE :{BLACK}Zavrieť STR_AI_SETTINGS_RESET :{BLACK}Resetovať diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 98b73aeddc..8c2a3a3a17 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -4309,7 +4309,7 @@ STR_AI_LIST_CANCEL :{BLACK}Preklič STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne spremeni skripte -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :UI STR_AI_SETTINGS_CLOSE :{BLACK}Zapri STR_AI_SETTINGS_RESET :{BLACK}Resetiraj diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 36ca821e03..5e63b33435 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -4624,7 +4624,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Mapa com STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Mapa de alturas STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimapa -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parámetros de IA STR_AI_SETTINGS_CLOSE :{BLACK}Cerrar STR_AI_SETTINGS_RESET :{BLACK}Reiniciar diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 528b030d9c..1a08751002 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -387,7 +387,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generaci STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generación de industrias STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construcción de carreteras STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construcción de tranvía -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árboles. Mayús muestra un costo estimado +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árboles. Ctrl permite seleccionar un área diagonalmente. Mayús permite mostrar una estimación del precio STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Poner cartel STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objeto. Ctrl para seleccionar un área en diagonal. Mayús muestra un costo estimado @@ -1207,7 +1207,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Derecha STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Máximo préstamo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Máxima cantidad que una empresa puede pedir prestada (sin tener en cuenta la inflación) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Sin préstamo {RED} Se necesita un script de juego para proporcionar fondos iniciales STR_CONFIG_SETTING_INTEREST_RATE :Porcentaje de interés: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Tasa de interés del préstamo; controla también la inflación, en caso de estar activada @@ -1927,13 +1929,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Usar {STRING}{N STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Tiempo requerido en el cálculo de cada uno de los componentes de la gráfica de distribución. Cuanto menor sea este valor, más probable es que el juego sea más lento. Cuanto mayor sea, más tiempo tardará la distribución en actualizarse cuando se produzcan cambios en las rutas STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribución para pasajeros: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :En una distribución "Simétrica" se envía la misma cantidad de pasajeros entre dos estaciones. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de pasajeros en ambas direcciones. "Manual" significa que no hay distribución automática para los pasajeros. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :En una distribución "Simétrica", se envía la misma cantidad de pasajeros de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de pasajeros en cualquier direccion. "Manual" significa que no se realiza una distribución automática para los pasajeros. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribución para el correo: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :En una distribución "Simétrica" se envía la misma cantidad de correo entre dos estaciones. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de correo en ambas direcciones. "Manual" significa que no hay distribución automática para el correo +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :En una distribución "Simétrica", se envía la misma cantidad de carga de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no se realiza una distribución automática para el correo. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribución para cargamento de valores: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :El cargamento de valores contiene objetos de valor en el ambiente Templado, diamantes en el Subtropical y oro en el Subártico. Algún NewGRF puede modificar esto. En una distribución "Simétrica", se envía la misma cantidad de carga entre dos estaciones. En una distribución "Asimétrica", se envían cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no hay distribución automática para esta carga. Se recomienda la distribución "Asimétrica" o "Manual" al jugar en ambiente Subártico, ya que los bancos no regresan oro a las minas. En los ambiente Templado y Subtropical se puede escoger "Simétrica", ya que los bancos pueden regresar algunos objetos de valor a su banco de origen. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La clase carga BLINDADA contiene objetos de valor en el clima templado, diamantes en el clima subtropical y oro en el clima subártico. Nuevos escenarios puedieran modificar esto. En una distribución "Simétrica", se envía la misma cantidad de carga de la estación A a la B que de la B a la A. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no se realiza una distribución automática para esta carga. Se recomienda fijar esta distribución en "Asimétrica" o en "Manual" al jugar en los clima subártico y subtropical, ya que los bancos sólo reciben carga en esos climas. En el clima templado es factible escoger "Simétrica" ya que los bancos pueden enviar objetos de valor de vuelta al banco de origen. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribución para otra carga: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimétrica" significa que se pueden enviar cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no habrá distribución automática para esta clase de carga. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimétrico" significa que cantidades arbitrarias de carga pueden ser enviadas en cualquier direccion. "Manual" significa que no ocurrira distribución automática para estas cargas. ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Asimétrica @@ -2700,6 +2702,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selección de puente de ferrocarril STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Selección de puente de carretera STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Selección de puente. Clic para construir +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Colgante (acero) STR_BRIDGE_NAME_GIRDER_STEEL :Vigas (acero) STR_BRIDGE_NAME_CANTILEVER_STEEL :Voladizo (acero) @@ -2819,7 +2825,7 @@ STR_OBJECT_CLASS_TRNS :Torres de trans STR_PLANT_TREE_CAPTION :{WHITE}Árboles STR_PLANT_TREE_TOOLTIP :{BLACK}Elegir el tipo de árboles a plantar. Si la casilla ya tiene un árbol, se añadirán más árboles de distintos tipos sin importar el tipo elegido STR_TREES_RANDOM_TYPE :{BLACK}Tipo aleatorio -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Colocar árboles de distinto tipo al azar. Mayús muestra un costo estimado +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Coloca árboles de tipo aleatorio. Ctrl permite seleccionar un área diagonalmente. Mayús permite mostrar una estimación del precio STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Árboles al azar STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Planta árboles al azar sobre el terreno STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal @@ -2852,6 +2858,7 @@ STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar l STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Muchas localidades aleatorias STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cubrir el mapa con localidades colocadas al azar STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandir todas las localidades +STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Hacer que todos los pueblos crezcan lentamente STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nombre de la localidad: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Ingresar el nombre de la localidad @@ -3327,7 +3334,10 @@ STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Represen STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mover el sprite cambiando los valores X y Y. Ctrl+Clic mueve el sprite ocho unidades de una sola vez ###length 2 +STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Desfasaje reiniciado al centro +STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite centrado +STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Punto de mira STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Restaurar coordenadas relativas STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Restaurar las coordenadas relativas @@ -4508,22 +4518,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Fecha de STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Elegir una fecha de inicio del itinerario. Ctrl+Clic para distribuir uniformemente todos los demás vehículos que lo compartan, siempre y cuando esté programado completamente STR_TIMETABLE_CHANGE_TIME :{BLACK}Cambiar tiempo -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Cambiar cuánto debe tardar el recorrido resaltado +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Modifica la cantidad de tiempo que la orden seleccionada debe tomar. Ctrl+clic modifica la duración para todas las órdenes STR_TIMETABLE_CLEAR_TIME :{BLACK}Borrar tiempo -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Anula el tiempo en el recorrido resaltado +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Borra la cantidad de tiempo para la orden resaltada.Ctrl+clic elimina el tiempo para todas las órdenes STR_TIMETABLE_CHANGE_SPEED :{BLACK}Cambiar límite de velocidad -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Cambiar el límite de velocidad en el recorrido resaltado +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Cambia el límite máximo de velocidad de la orden resaltada. Ctrl+clic cambia el límite para todas las órdenes STR_TIMETABLE_CLEAR_SPEED :{BLACK}Borrar límite de velocidad -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Anular el límite de velocidad en el recorrido resaltado +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Borra el límite máximo de velocidad de la orden resaltada. Ctrl+clic elimina la velocidad para todas las órdenes STR_TIMETABLE_RESET_LATENESS :{BLACK}Reiniciar retrasos STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reiniciar el contador del retraso para que el vehículo vaya a tiempo STR_TIMETABLE_AUTOFILL :{BLACK}Llenar automáticamente -STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Llenar la tabla de itinerarios automáticamente con los valores del siguiente recorrido (Ctrl+Clic para intentar mantener los tiempos de espera) +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Rellena el horario automáticamente con los valores del siguiente recorrido. Ctrl+clic para intentar mantener los tiempos de espera en estación STR_TIMETABLE_EXPECTED :{BLACK}Esperado STR_TIMETABLE_SCHEDULED :{BLACK}Programado @@ -4614,7 +4624,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Mapa com STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Mapa de alturas STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de minimapa -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parámetros de IA STR_AI_SETTINGS_CLOSE :{BLACK}Cerrar STR_AI_SETTINGS_RESET :{BLACK}Reiniciar @@ -4794,6 +4804,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... los STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... solo se puede construir por encima del nivel de nieve STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... solo se puede construir por debajo del nivel de nieve +STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Mala suerte, la financiación no fructificó; inténtentelo de nuevo STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}No se encontraron lugares aptos para hacer prospección de esta industria STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}No hubo espacio para industrias de tipo "{STRING}" STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Cambia las opciones de generación para crear un mejor mapa diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index c6ecec245e..76824aa0db 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -4617,7 +4617,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Skärmdu STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Skärmdump av höjdkarta STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Skärmdump av miniatyrkartan -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Datorspelarens parametrar STR_AI_SETTINGS_CLOSE :{BLACK}Stäng STR_AI_SETTINGS_RESET :{BLACK}Återställ diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index eb82e80c5d..edf3934a97 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -4125,7 +4125,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}மு STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}உயர்படத்தின் திரைப்பிடிப்பு STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}சிறிய வரைபட திரைபிடிப்பு -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}மூடு STR_AI_SETTINGS_RESET :{BLACK}முன்னிருந்தமாதிரி மாற்று diff --git a/src/lang/thai.txt b/src/lang/thai.txt index e551f3e119..56d755cb64 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -4271,7 +4271,7 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}ไม STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}บันทึกหน้าจอของ Heightmap STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}จับภาพหน้าจอ มินิแมพ -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}ปิด STR_AI_SETTINGS_RESET :{BLACK}เริ่มใหม่ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index fe647d978e..7963e9b2e2 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -4621,7 +4621,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}截圖 STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}高度圖截圖 STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}小地圖截圖 -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI參數 STR_AI_SETTINGS_CLOSE :{BLACK}關閉 STR_AI_SETTINGS_RESET :{BLACK}重設 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index d1d82287a6..aa5c63fa2a 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1207,7 +1207,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Sağ STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :En yüsek açılış borcu: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Bir şirketin alabileceği en fazla borç (enflasyon hesaba katılmadan) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Borç yok seçeneği, başlangıç fonunu sağlamak için oyun betiği {RED}gerektirir. STR_CONFIG_SETTING_INTEREST_RATE :Faiz oranı: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Borç faiz oranı; eğer aktifse aynı zamanda enflasyonu da belirler @@ -4622,7 +4624,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Tüm har STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Yükseklik haritası ekran görüntüsü STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Küçük harita ekran görüntüsü -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}YZ Parametreleri STR_AI_SETTINGS_CLOSE :{BLACK}Kapat STR_AI_SETTINGS_RESET :{BLACK}Yeniden başlat diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 09b89dd3a2..fae2ac24ee 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -4748,7 +4748,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Знят STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Зняток мапи висот STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Зняток мінімапи -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Параметри ШІ STR_AI_SETTINGS_CLOSE :{BLACK}Закрити STR_AI_SETTINGS_RESET :{BLACK}Скидання diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 3abf30218e..fda81659be 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -2727,7 +2727,7 @@ STR_AI_CONFIG_GAMESCRIPT :{SILVER}کھی -# AI Parameters +# Script Parameters # Textfile window diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 0bb236a3c2..2508b0149e 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -4621,7 +4621,7 @@ STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Chụp t STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Chụp bản đồ địa hình STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Chụp màn hình bản đồ nhỏ -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}Tham số AI STR_AI_SETTINGS_CLOSE :{BLACK}Đóng STR_AI_SETTINGS_RESET :{BLACK}Thiết Lập Lại diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 0260137973..d1c566ebfc 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -4176,7 +4176,7 @@ STR_AI_LIST_CANCEL :{BLACK}Canslo STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Peidio newid y sgript -# AI Parameters +# Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Cau STR_AI_SETTINGS_RESET :{BLACK}Ailosod From cb2944205c9943266d7675994ee48f665f44057a Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 6 Feb 2023 18:44:47 +0000 Subject: [PATCH 27/42] Update: Translations from eints english (au): 4 changes by krysclarke swedish: 16 changes by joeax910 english (us): 2 changes by 2TallTyler chinese (simplified): 2 changes by XiaoJi-Game hebrew: 3 changes by Boltyansky romanian: 10 changes by kneekoo russian: 5 changes by Ln-Wolf portuguese: 2 changes by azulcosta polish: 4 changes by pAter-exe --- src/lang/english_AU.txt | 4 ++++ src/lang/english_US.txt | 2 ++ src/lang/hebrew.txt | 3 +++ src/lang/polish.txt | 4 ++++ src/lang/portuguese.txt | 2 ++ src/lang/romanian.txt | 16 ++++++++++------ src/lang/russian.txt | 6 +++++- src/lang/simplified_chinese.txt | 2 ++ src/lang/swedish.txt | 24 ++++++++++++++++-------- 9 files changed, 48 insertions(+), 15 deletions(-) diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 5e5cefeea3..e2cd5df32a 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1206,7 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :No loan {RED}Requires Game Script to provide initial funds STR_CONFIG_SETTING_INTEREST_RATE :Interest rate: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Loan interest rate; also controls inflation, if enabled @@ -4622,7 +4624,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Heightma STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI Parameters +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 36ab7e87c1..01c963269d 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4624,7 +4624,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Heightma STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI Parameters +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 97fba122a3..ffe0a23f4f 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -3590,6 +3590,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}קבוצ STR_GROUP_CREATE_TOOLTIP :{BLACK}לחץ ליצירת קבוצה חדשה STR_GROUP_DELETE_TOOLTIP :{BLACK}מחק את הקבוצה שנבחרה STR_GROUP_RENAME_TOOLTIP :{BLACK}שנה את שם הקבוצה +STR_GROUP_LIVERY_TOOLTIP :{BLACK}שינוי צבע הקבוצה שנבחרה STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}לחץ על מנת להגן על הכלים בקבוצה בפני החלפה אוטומטית STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}מחק קבוצה @@ -3668,6 +3669,7 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}רכוש STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}רכוש את כלי הטייס שמודגש. Shift+לחיצה מציג הערכת עלות ללא רכישה ###length VEHICLE_TYPES +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}לרכוש ולאבזר את הרכבת הנבחרת. לחיצה+מקש Shift תציג עלות משוערת מבלי לבצע רכישה בפועל ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}שנה שם @@ -4287,6 +4289,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}חלו # AI configuration window STR_AI_CONFIG_CAPTION_AI :{WHITE} הגדרת בינה מלאכותית +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}הגדרות סקריפטי משחק STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}סקריפט המשחק אשר יטען במשחק הבא STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}שחקני המחשב אשר יטענו במשחק הבא STR_AI_CONFIG_HUMAN_PLAYER :שחקן אנושי diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 6315d7284b..41058ab63e 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1586,7 +1586,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :z prawej strony STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksymalna wysokość początkowej pożyczki: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksymalna wysokość pożyczki, jaką firma może zaciągnąć (bez uwzględnienia inflacji) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Brak pożyczki {RED}Wymagany Game Script, aby zapewnić początkowe fundusze STR_CONFIG_SETTING_INTEREST_RATE :Oprocentowanie: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Oprocentowanie pożyczki; kontroluje też inflację, jeśli jest włączona @@ -5008,7 +5010,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Zrzut ek STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Zrzut ekranu minimapy # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametry STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametry SI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Zamknij STR_AI_SETTINGS_RESET :{BLACK}Resetuj STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index d582c8d514..b38ab7f869 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -4625,7 +4625,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Mapa de STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parâmetros de IA +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Jogo STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Repor STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index bc0763ae7b..41fa15b29b 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1204,9 +1204,11 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :stânga STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :centru STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :dreapta -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valoarea maximă a împrumutului initial: {STRING} +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valoarea maximă a împrumutului inițial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valoarea maximă pe care o companie o poate împrumuta (fără a ține cont de inflație) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Niciun împrumut {RED}Necesită un script de joc pentru oferirea fondurilor inițiale STR_CONFIG_SETTING_INTEREST_RATE :Rata dobânzii: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Rata dobânzii; de asemenea controlează inflația dacă este activată @@ -4550,7 +4552,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Alege an # AI debug window -STR_AI_DEBUG :{WHITE}Depanare IA / Script Joc +STR_AI_DEBUG :{WHITE}Depanare IA / Script de joc STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Numele scriptului STR_AI_DEBUG_SETTINGS :{BLACK}Setări @@ -4576,7 +4578,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Fereast # AI configuration window STR_AI_CONFIG_CAPTION_AI :{WHITE}Configurație AI STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Configurarea scriptului de joc -STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Script Joc încărcat în jocul următor +STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Scriptul care va fi încărcat în jocul următor STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Modulul de IA care va fi încărcat în jocul următor STR_AI_CONFIG_HUMAN_PLAYER :Jucator uman STR_AI_CONFIG_RANDOM_AI :IA aleator @@ -4588,12 +4590,12 @@ STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Mută IA STR_AI_CONFIG_MOVE_DOWN :{BLACK}În jos STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Mută IA selectată jos în listă -STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script Joc +STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script de joc STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parametri STR_AI_CONFIG_AI :{SILVER}IA STR_AI_CONFIG_CHANGE_AI :{BLACK}Selectați IA -STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Selectați Scriptul jocului +STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Selectați scriptul jocului STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Încarcă un alt script STR_AI_CONFIG_CONFIGURE :{BLACK}Configurază STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configurează parametrii scriptului @@ -4622,7 +4624,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captură STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captură de hartă a lumii # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametrii IA +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametri +STR_AI_SETTINGS_CAPTION_AI :{WHITE}IA +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de joc STR_AI_SETTINGS_CLOSE :{BLACK}Închide STR_AI_SETTINGS_RESET :{BLACK}Resetează STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 639951ebf3..4ed83ac516 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1357,7 +1357,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :справа STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимальная сумма кредита: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальная сумма кредита для компании (без учета инфляции) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :нет {RED}(необходим игровой скрипт, предоставляющий начальные средства) STR_CONFIG_SETTING_INTEREST_RATE :Процентная ставка: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Процентная ставка по кредитам; также устанавливает уровень инфляции, если та включена. @@ -4809,7 +4811,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Сним STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Снимок миникарты # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Параметры ИИ +STR_AI_SETTINGS_CAPTION :{WHITE}Параметры {STRING} +STR_AI_SETTINGS_CAPTION_AI :ИИ +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :игровых скриптов STR_AI_SETTINGS_CLOSE :{BLACK}Закрыть STR_AI_SETTINGS_RESET :{BLACK}Сброс STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index f2c16bb7a0..792ceaeda8 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -4624,7 +4624,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}高度 STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}小地图截图 # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} 参数 STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI参数 +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :游戏脚本 STR_AI_SETTINGS_CLOSE :{BLACK}关闭 STR_AI_SETTINGS_RESET :{BLACK}重设 STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 76824aa0db..bf9b33366a 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -386,7 +386,7 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Generera STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Generera industrier STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Bygg vägar STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Spårvägskonstruktion -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantera träd. Shift växlar mellan att bygga/visa beräknad kostnad +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantera träd. Ctrl väljer ytan diagonalt. Shift växlar mellan att bygga/visa beräknad kostnad STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Placera skylt STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Placera objekt. Ctrl väljer ytan diagonalt. Shift växlar mellan att bygga/visa beräknad kostnad @@ -1206,7 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Höger STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximalt startlån: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalt belopp ett företag kan låna (där inflationen inte tas med i beräkningen) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Inget lån {RED}Kräver spelskript som sätter startkapital STR_CONFIG_SETTING_INTEREST_RATE :Räntenivå: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Räntenivå för lån; styr även inflationen om sådan är aktiverad @@ -1926,13 +1928,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Avsätt {STRING STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Den tid varje omberäkning av en länkgrafkomponent tillåts ta. När en omberäkning startas skapas en tråd som tillåts löpa detta antal dagar. Ju kortare du sätter denna, desto mer troligt är det att tråden inte är hinner bli färdig i tid. Då kommer spelet att stanna tills den är klar (vilket gör att det laggar). Ju längre du sätter denna, desto längre tid tar det för distributionen att uppdateras när rutter ändras. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributionssätt för passagerare: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetriskt" innebär att ungefär samma antal passagerare färdas från station A till station B som från B till A. "asymmetriskt" innebär att en godtycklig mängd passagerare kan färdas i vardera riktningen. "manuellt" innebär att ingen automatisk distribution av passagerare sker. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Symmetriskt" innebär att ungefär samma antal passagerare färdas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd passagerare kan färdas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av passagerare sker. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distributionssätt för post: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetriskt" innebär att ungefär samma mängd post skickas från station A till station B som från B till A. "asymmetriskt" innebär att en godtycklig mängd post kan skickas i vardera riktningen. "manuellt" innebär att ingen automatisk distribution av post sker. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"Symmetriskt" innebär att ungefär samma mängd post skickas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd post kan skickas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av post sker. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distributionssätt för den BEPANSRADE godsklassen: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Den BEPANSRADE godsklassen innehåller värdesaker i det tempererade, diamanter i det subtropiska eller guld i det subarktiska klimatet. NewGRFer kan ändra detta. "symmetriskt" innebär att ungefär samma mängd av detta gods skickas från station A till station B som från B till A. "asymmetriskt" innebär att en godtycklig mängd av detta gods kan skickas i vardera riktningen. "manuellt" innebär att ingen automatisk distribution av denna godstyp sker. Det är rekommenderat att välja "asymmetriskt" eller "manuellt" vid subarktiskt klimat, då banker inte skickar tillbaka guld till guldgruvor. Vid tempererat och subtropiskt klimat kan även "symmetriskt" väljas, då banker kan skicka tillbaka värdesaker till den bank en viss last av värdesaker kom ifrån. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Den BEPANSRADE godsklassen innehåller värdesaker i det tempererade, diamanter i det subtropiska eller guld i det subarktiska klimatet. NewGRFer kan ändra detta. "Symmetriskt" innebär att ungefär samma mängd av detta gods skickas från station A till station B som från B till A. "Asymmetriskt" innebär att en godtycklig mängd av detta gods kan skickas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av denna godstyp sker. Det är rekommenderat att välja "asymmetriskt" eller "manuellt" vid subarktiskt eller subtropiskt klimat, då banker endast tar emot gods i dessa klimat. Vid tempererat klimat kan även "symmetriskt" väljas, då banker kan skicka tillbaka värdesaker till den bank de kom ifrån. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distributionssätt för övriga godsklasser: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"asymmetriskt" innebär att en godtycklig mängd gods kan skickas i vardera riktningen. "manuellt" innebär att ingen automatisk distribution av dessa godstyper sker. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asymmetriskt" innebär att en godtycklig mängd gods kan skickas i vardera riktningen. "Manuellt" innebär att ingen automatisk distribution av dessa godstyper sker. ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuellt STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetriskt @@ -2699,6 +2701,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Öka avs STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Välj järnvägsbro STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Välj vägbro STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Välj bro - klicka på önskad bro för att bygga den +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Hängbro, Stål STR_BRIDGE_NAME_GIRDER_STEEL :Balkbro, Stål STR_BRIDGE_NAME_CANTILEVER_STEEL :Konsolbro, Stål @@ -2818,7 +2824,7 @@ STR_OBJECT_CLASS_TRNS :Sändare STR_PLANT_TREE_CAPTION :{WHITE}Träd STR_PLANT_TREE_TOOLTIP :{BLACK}Välj trädtyp att plantera. Om rutan redan har ett träd, kommer ytterliggare träd att vara av slumpmässig typ oberoende av vilken trädtyp som valts STR_TREES_RANDOM_TYPE :{BLACK}Träd av slumpvald typ -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Placera träd av slumpvald typ. Shift växlar mellan att placera träd/visa beräknad kostnad +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Placera träd av slumpvald typ. Ctrl väljer ytan diagonalt. Shift växlar mellan att placera träd/visa beräknad kostnad STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Slumpmässigt träd STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantera träd slumpmässigt över landskapet STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal @@ -3296,7 +3302,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Spara STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Spara den inställda till den nuvarande valda namnet # NewGRF parameters window -STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Ändra NewGRF parametrar +STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Ändra NewGRF-parametrar STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Stäng STR_NEWGRF_PARAMETERS_RESET :{BLACK}Återställ STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Återställ alla parametrar till deras standardvärden @@ -4618,7 +4624,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Skärmdu STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Skärmdump av miniatyrkartan # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Datorspelarens parametrar +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrar +STR_AI_SETTINGS_CAPTION_AI :Datorspelare +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spelskript STR_AI_SETTINGS_CLOSE :{BLACK}Stäng STR_AI_SETTINGS_RESET :{BLACK}Återställ STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} From f951ce6931ff8d395bb82657d1a7d25e233259d5 Mon Sep 17 00:00:00 2001 From: Owen Rudge Date: Mon, 6 Feb 2023 11:14:07 +0000 Subject: [PATCH 28/42] Fix: Ensure logo for Windows Store common assets package is named correctly --- os/windows/winstore/generate-assets.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/windows/winstore/generate-assets.ps1 b/os/windows/winstore/generate-assets.ps1 index 89c48e6ecf..bd12caf80a 100644 --- a/os/windows/winstore/generate-assets.ps1 +++ b/os/windows/winstore/generate-assets.ps1 @@ -45,4 +45,4 @@ ResizeImage $logoPath 1240 600 "assets\Wide310x150Logo.png" # Copy the logo for the store for the common package New-Item -Path "." -Name "assets-common" -ItemType "directory" -Force -Copy-Item "assets\StoreLogo.png" -Destination "assets-common\StoreLogo.png" +Copy-Item "assets\StoreLogo.png" -Destination "assets-common\StoreLogoCommon.png" From b5bc001d4263addbf0736aaf9706d8c2ff1ece84 Mon Sep 17 00:00:00 2001 From: dP Date: Tue, 7 Feb 2023 17:55:46 +0400 Subject: [PATCH 29/42] Codechange: Swap comments for CommandHelper::Post overloads (#10454) --- src/command_func.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/command_func.h b/src/command_func.h index 9ccd384dc9..45eaabfe15 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -450,14 +450,14 @@ struct CommandHelper : CommandHel using CommandHelper::Post; /** - * Shortcut for Post when not using an error message. + * Shortcut for Post when not using a callback. * @param err_message Message prefix to show on error * @param location Tile location for user feedback. * @param args Parameters for the command */ static inline bool Post(StringID err_message, TileIndex location, Targs... args) { return Post(err_message, nullptr, location, std::forward(args)...); } /** - * Shortcut for Post when not using a callback. + * Shortcut for Post when not using an error message. * @param callback A callback function to call after the command is finished * @param location Tile location for user feedback. * @param args Parameters for the command From 0c36e4a7710056f7d892c73fcd4511b32d90f250 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 7 Feb 2023 18:45:46 +0000 Subject: [PATCH 30/42] Update: Translations from eints english (au): 1 change by krysclarke english (us): 1 change by 2TallTyler vietnamese: 2 changes by KhoiCanDev luxembourgish: 5 changes by phreeze83 catalan: 3 changes by J0anJosep french: 11 changes by ZarTek-Creole, 5 changes by glx22 --- src/lang/catalan.txt | 4 +++- src/lang/english_AU.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/french.txt | 28 ++++++++++++++++------------ src/lang/luxembourgish.txt | 6 +++++- src/lang/vietnamese.txt | 3 ++- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 1129dc0c8e..f3ce3e3ceb 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -4625,7 +4625,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Captura STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Captura de pantalla del minimapa # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Paràmetres de la IA +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING}Paràmetres +STR_AI_SETTINGS_CAPTION_AI :IA +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de la partida STR_AI_SETTINGS_CLOSE :{BLACK}Tanca STR_AI_SETTINGS_RESET :{BLACK}Restableix STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index e2cd5df32a..940a070278 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -4625,7 +4625,7 @@ STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap # Script Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI Parameters +STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 01c963269d..dfb65b60a7 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4625,7 +4625,7 @@ STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap # Script Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI Parameters +STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Game Script STR_AI_SETTINGS_CLOSE :{BLACK}Close STR_AI_SETTINGS_RESET :{BLACK}Reset diff --git a/src/lang/french.txt b/src/lang/french.txt index 7dfe7e8515..e0242dd79e 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1207,7 +1207,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :À droite STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Emprunt initial maximum{NBSP}: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Montant maximum qu'une compagnie peut emprunter (sans tenir compte de l'inflation) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Pas d'emprunt {RED}Nécessite un script de jeu qui fournit les fonds initiaux STR_CONFIG_SETTING_INTEREST_RATE :Taux d'intérêt{NBSP}: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Taux d’intérêt de l'emprunt{NBSP}; contrôle également l'inflation si activé @@ -2059,18 +2061,18 @@ STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE} ... auc # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} -STR_INTRO_NEW_GAME :{BLACK}Nouvelle partie +STR_INTRO_NEW_GAME :{BLACK}Jouer une nouvelle partie STR_INTRO_LOAD_GAME :{BLACK}Charger une partie STR_INTRO_PLAY_SCENARIO :{BLACK}Jouer un scénario STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jouer une carte d'altitude STR_INTRO_SCENARIO_EDITOR :{BLACK}Éditeur de scénario -STR_INTRO_MULTIPLAYER :{BLACK}Mode multijoueurs +STR_INTRO_MULTIPLAYER :{BLACK}Jouer en multijoueur -STR_INTRO_GAME_OPTIONS :{BLACK}Options +STR_INTRO_GAME_OPTIONS :{BLACK}Options globales STR_INTRO_HIGHSCORE :{BLACK}Meilleurs scores -STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Paramètres +STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Paramètres de jeu STR_INTRO_NEWGRF_SETTINGS :{BLACK}Paramètres NewGRF -STR_INTRO_ONLINE_CONTENT :{BLACK}Vérifier le contenu en ligne +STR_INTRO_ONLINE_CONTENT :{BLACK}Contenue additionnel en ligne STR_INTRO_AI_SETTINGS :{BLACK}Configuration des IAs STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Configuration du script de jeu STR_INTRO_QUIT :{BLACK}Quitter @@ -2228,18 +2230,18 @@ STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Invitation uniq # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multijoueurs -STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Nom du joueur{NBSP}: +STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Votre nom de joueur : STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Ceci est le nom sous lequel vous serez connu des autres joueurs -STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Nom +STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Nom de la partie STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Nom de la partie STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} -STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Clients +STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Clients - Compagnies STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Clients en ligne / clients max.{}Compagnies en ligne / compagnies max. STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}{NBSP}×{NBSP}{COMMA} STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Taille STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Taille de la carte{}Cliquer pour trier par surface -STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Date +STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Année en jeu STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Date courante STR_NETWORK_SERVER_LIST_YEARS_CAPTION :{BLACK}Années STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP :{BLACK}Nombre d'années{}écoulées dans le jeu @@ -2273,11 +2275,11 @@ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Actualis STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Recherche internet STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Rechercher des serveurs publiés sur internet -STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Recherche LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Recherche sur le réseau local STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Rechercher des serveurs sur le réseau local STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Ajouter un serveur STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Ajouter un serveur à la liste. Ce peut être soit une adresse de serveur, soit un code d'invitation -STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Héberger/créer un serveur de jeu +STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Créer un serveur de jeu STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Démarrer son propre serveur, sur cet ordinateur-ci STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Entrer votre nom @@ -4623,7 +4625,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Capture STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Capture d'écran de la mini-carte # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Paramètres de l'IA +STR_AI_SETTINGS_CAPTION :{WHITE}Paramètres {STRING} +STR_AI_SETTINGS_CAPTION_AI :de l'IA +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :du script de jeu STR_AI_SETTINGS_CLOSE :{BLACK}Fermer STR_AI_SETTINGS_RESET :{BLACK}Réinitialiser STR_AI_SETTINGS_SETTING :{STRING}{NBSP}: {ORANGE}{STRING} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 5d8493d637..b99e1103c2 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1206,7 +1206,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Riets STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximalen Ufanksloun: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalwäert den eng Firma kann léinen (ouni Inflatioun matzerechnen) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Kee Kredit {RED}Spill-Script muss am Ufank e Geldbetrag zur Verfügung ginn STR_CONFIG_SETTING_INTEREST_RATE :Zënssaz: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Zënssaz; kontrolléiert och d'Inflatioun wann ugeschalt @@ -4622,7 +4624,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Héichte STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap-Screenshot # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}KI Parameter +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter +STR_AI_SETTINGS_CAPTION_AI :KI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spill-Script STR_AI_SETTINGS_CLOSE :{BLACK}Zoumaachen STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 2508b0149e..2ff8634523 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -4622,7 +4622,8 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Chụp b STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Chụp màn hình bản đồ nhỏ # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Tham số AI +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Tham số +STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CLOSE :{BLACK}Đóng STR_AI_SETTINGS_RESET :{BLACK}Thiết Lập Lại STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} From f12498b633d14ee2c5b6766bf6af9c37ad84c958 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Tue, 7 Feb 2023 15:13:32 -0500 Subject: [PATCH 31/42] Add: Show NewGRF name in NewGRF-created errors (#10457) --- src/lang/english.txt | 4 ++-- src/newgrf_gui.cpp | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 732f3a6745..4a9786b53a 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3352,8 +3352,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{RAW_ST STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warning: {SILVER}{RAW_STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{RAW_STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{RAW_STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}A fatal NewGRF error has occurred: {}{STRING5} -STR_NEWGRF_ERROR_POPUP :{WHITE}A NewGRF error has occurred: {}{STRING5} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}The NewGRF "{RAW_STRING}" has returned a fatal error: {}{STRING5} +STR_NEWGRF_ERROR_POPUP :{WHITE}The NewGRF "{RAW_STRING}" has returned an error: {}{STRING5} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:RAW_STRING} will not work with the TTDPatch version reported by OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:RAW_STRING} is for the {2:RAW_STRING} version of TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:RAW_STRING} is designed to be used with {2:RAW_STRING} diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index d4f8a8996d..bb671f1e2a 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -50,12 +50,13 @@ void ShowNewGRFError() /* Only show Fatal and Error level messages */ if (c->error == nullptr || (c->error->severity != STR_NEWGRF_ERROR_MSG_FATAL && c->error->severity != STR_NEWGRF_ERROR_MSG_ERROR)) continue; - SetDParam (0, c->error->message != STR_NULL ? c->error->message : STR_JUST_RAW_STRING); - SetDParamStr(1, c->error->custom_message); - SetDParamStr(2, c->filename); - SetDParamStr(3, c->error->data); + SetDParamStr(0, c->GetName()); + SetDParam (1, c->error->message != STR_NULL ? c->error->message : STR_JUST_RAW_STRING); + SetDParamStr(2, c->error->custom_message); + SetDParamStr(3, c->filename); + SetDParamStr(4, c->error->data); for (uint i = 0; i < lengthof(c->error->param_value); i++) { - SetDParam(4 + i, c->error->param_value[i]); + SetDParam(5 + i, c->error->param_value[i]); } if (c->error->severity == STR_NEWGRF_ERROR_MSG_FATAL) { ShowErrorMessage(STR_NEWGRF_ERROR_FATAL_POPUP, INVALID_STRING_ID, WL_CRITICAL); From b083584649b3f4e0dc4188f574253a7789cfe251 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 8 Feb 2023 18:47:55 +0000 Subject: [PATCH 32/42] Update: Translations from eints arabic (egypt): 30 changes by AviationGamerX portuguese: 1 change by azulcosta --- src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 35 ++++++++++++++++++++++++++----- src/lang/basque.txt | 1 - src/lang/belarusian.txt | 2 -- src/lang/brazilian_portuguese.txt | 2 -- src/lang/bulgarian.txt | 1 - src/lang/catalan.txt | 2 -- src/lang/croatian.txt | 1 - src/lang/czech.txt | 2 -- src/lang/danish.txt | 2 -- src/lang/dutch.txt | 2 -- src/lang/english_AU.txt | 2 -- src/lang/english_US.txt | 2 -- src/lang/esperanto.txt | 1 - src/lang/estonian.txt | 2 -- src/lang/finnish.txt | 2 -- src/lang/french.txt | 2 -- src/lang/frisian.txt | 1 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 2 -- src/lang/german.txt | 2 -- src/lang/greek.txt | 2 -- src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 2 -- src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 2 -- src/lang/irish.txt | 2 -- src/lang/italian.txt | 2 -- src/lang/japanese.txt | 2 -- src/lang/korean.txt | 2 -- src/lang/latin.txt | 1 - src/lang/latvian.txt | 2 -- src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 2 -- src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 2 -- src/lang/norwegian_nynorsk.txt | 1 - src/lang/persian.txt | 1 - src/lang/polish.txt | 2 -- src/lang/portuguese.txt | 4 +--- src/lang/romanian.txt | 2 -- src/lang/russian.txt | 2 -- src/lang/serbian.txt | 2 -- src/lang/simplified_chinese.txt | 2 -- src/lang/slovak.txt | 2 -- src/lang/slovenian.txt | 1 - src/lang/spanish.txt | 2 -- src/lang/spanish_MX.txt | 2 -- src/lang/swedish.txt | 2 -- src/lang/tamil.txt | 1 - src/lang/thai.txt | 2 -- src/lang/traditional_chinese.txt | 2 -- src/lang/turkish.txt | 2 -- src/lang/ukrainian.txt | 2 -- src/lang/vietnamese.txt | 2 -- src/lang/welsh.txt | 1 - 56 files changed, 31 insertions(+), 99 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 93d91609d2..b8c0295bfe 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -3070,7 +3070,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Waarskuwing: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fout: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fataal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}'n Fataale NewGRF fout het gebeur:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} sal nie met die TTDPatch uitgawe rapporteer deur OpenTTD werk nie. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is vir die {STRING} uitgawe van TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is onderwerp om saam met {STRING} gebruik te word diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 27421a80dc..c59edd3623 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -222,6 +222,7 @@ STR_UNITS_FORCE_METRIC :{COMMA}{NBSP}ك STR_UNITS_FORCE_SI :{COMMA}{NBSP} كيلو نيوتن STR_UNITS_HEIGHT_IMPERIAL :{COMMA}{NBSP} قدم +STR_UNITS_HEIGHT_METRIC :{COMMA}{NBSP}م STR_UNITS_HEIGHT_SI :{COMMA}{NBSP} متر # Common window strings @@ -930,6 +931,7 @@ STR_GAME_OPTIONS_CURRENCY_KRW :وون كوري STR_GAME_OPTIONS_CURRENCY_ZAR :راند جنوب أفريقيا (ZAR) STR_GAME_OPTIONS_CURRENCY_CUSTOM :مخصص ... STR_GAME_OPTIONS_CURRENCY_GEL :(GEL) لاري جورجي +STR_GAME_OPTIONS_CURRENCY_NTD :الدولار التايواني الجديد (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :(CNY) الرنمينبي الصيني STR_GAME_OPTIONS_CURRENCY_HKD :(HKD) دولار هونج كونج STR_GAME_OPTIONS_CURRENCY_INR :الروبية الهندية (INR) @@ -960,6 +962,7 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}تسري STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}اخترهذا المربع للسماح لـ OpenTTD بمحاولة استخدام تسريع الأجهزة. سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}لن يعمل الإعداد إلا بعد إعادة تشغيل اللعبة +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}حدد هذا المربع لمزامنة الشاشة (v-sync). سيتم تطبيق الإعداد الذي تم تغييره فقط عند إعادة تشغيل اللعبة. يعمل فقط مع تمكين تسريع الأجهزة (hardware acceleration) @@ -1096,6 +1099,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}مدد STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}إسحب الكل STR_CONFIG_SETTING_RESET_ALL :{BLACK}اعادة ضبط جميع القيم STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(لا يوجد تفسير متوفر) +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}تحذير! STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK} فئة: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}نوع: @@ -1137,6 +1141,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :يمين STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :سعر الفائدة على القرض يتحكم أيضًا في التضخم ، إذا تم تمكينه +STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :تحديد مستوى تكاليف الصيانة والتشغيل للمركبات والبنية التحتية STR_CONFIG_SETTING_CONSTRUCTION_SPEED ::سرعة البناء {STRING} @@ -1186,6 +1191,7 @@ STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :السماح ب STR_CONFIG_SETTING_INFLATION :التضخم: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :تمكين التضخم في الاقتصاد ، حيث ترتفع التكاليف بشكل أسرع قليلاً من المدفوعات +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :أقصى طول للجسر: {STRING} STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :الارتفاع الأقصى لبناء الجسور @@ -1382,6 +1388,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_OFF :عدم استخ STR_CONFIG_SETTING_OSK_ACTIVATION :كيبورد على الشاشة: {STRING} ###length 4 STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :غير مفعل +STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :نقرة واحدة (عند التركيز) ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :سماح @@ -1472,6 +1479,7 @@ STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :الحد الأ STR_CONFIG_SETTING_MAX_SHIPS :الحد الأعلى لعدد السفن لكل شركة: {STRING} STR_CONFIG_SETTING_AI_BUILDS_TRAINS :حظر القطارات على الحاسوب: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :يؤدي تمكين هذا الإعداد إلى جعل بناء القطارات مستحيلًا لللاعب الآلي STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :حظر العربات على الكمبيوتر: {STRING} @@ -1648,23 +1656,25 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION :تشبع الم STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :وحدات السرعة: {STRING} ###length 4 -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :(متري (كم / ساعة +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :إمبراطوري (ميل/ساعة) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :متري (كم / ساعة) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :متري (م / ثانية) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :وحدات الطاقة في السيارة: {STRING} ###length 3 ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :(متري (طن +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :متري (طن) ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE ::وحدات جهد الجر {STRING} ###length 3 +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :متري (كغ - قوة) ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :إمبراطوري (قدم) -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :م) متري) +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :متري (م) STR_CONFIG_SETTING_GRAPHICS :رسوميات {ORANGE} STR_CONFIG_SETTING_SOUND :{ORANGE}الصوت @@ -1777,6 +1787,7 @@ STR_CHEAT_CHANGE_COMPANY :{LTBLUE}الع STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}الجرافة السحرية - لازالة المصانع و الاجسام غير القابلة للازالة.{ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}يمكن للانفاق ان تتقاطع: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}الطائرات النفاثه لا تتحطم (كثيراً) فى المطارات الصغيره: {ORANGE}{STRING} +STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}تعدبل أقصى ارتفاع لتضاريس الخريطة STR_CHEAT_CHANGE_DATE :{LTBLUE}عدل التاريخ {ORANGE} {DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}غير السنة الحالية STR_CHEAT_SETUP_PROD :{LTBLUE}تفعيل تغيير قيمة الانتاج: {ORANGE}{STRING} @@ -1973,6 +1984,7 @@ STR_NETWORK_COMPANY_LIST_SPECTATE :شاهد # Network client list STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}اللاعبون عبر الإنترنت STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}الاسم +STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}الاسم STR_NETWORK_CLIENT_LIST_SPECTATORS :المشاهدين STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(شركة جديدة) @@ -2036,6 +2048,7 @@ STR_NETWORK_ERROR_KICKED :{WHITE}لقد STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}السبب: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}الغش ليس مسموحا به في هذه اللعبة STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}أنت تقوم بإرسال العديد من الأوامر للخادم +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}اسم اللاعب الخاص بك غير صالح STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}احتمال فقد الاتصال STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}اخر {NUM} ثواني لم تصل بيانات من السيرفر @@ -2451,6 +2464,7 @@ STR_FUND_INDUSTRY_CAPTION :{WHITE}مول STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}اختر المصنع المناسب من القائمة STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}إنشاء المصانع العشوائية STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}غطي الخريطة عشوائيا بالمصانع +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}إنشاء المصانع العشوائية STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}التكلفة: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK} الاحتمالية STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}بناء @@ -2616,6 +2630,7 @@ STR_FRAMERATE_GAMESCRIPT :{BLACK} مخط STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ###length 15 +STR_FRAMETIME_CAPTION_GAMELOOP :تكرارات اللعبة STR_FRAMETIME_CAPTION_GL_TRAINS : تكتكة القطار STR_FRAMETIME_CAPTION_GL_LINKGRAPH :تأخر ارتباط الرسم البياني STR_FRAMETIME_CAPTION_SOUND :اختلاط الصوت @@ -2833,6 +2848,7 @@ STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}حرك ###length 2 +STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}الخطوت المتقاطعة STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}الازاحة (X): {NUM}، الازاحة (Y): {NUM} (نسبي) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}اختر عفريتة @@ -2845,7 +2861,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED} تحذير: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED} خطأ: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED} خطأ قاتل: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}حدث خظأ في NewGRF لا يمكن اصلاحة:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} لن يعمل مع اصدار الباتش المسجل في النسخة المفتوحة STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} يعمل مع {STRING} اصدار من TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} مصمم ليستخدم مع {STRING} @@ -2999,9 +3014,11 @@ STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}خطا # Goal Question button list ###length 18 +STR_GOAL_QUESTION_BUTTON_OK :موافقة STR_GOAL_QUESTION_BUTTON_NO :لا STR_GOAL_QUESTION_BUTTON_YES :نعم STR_GOAL_QUESTION_BUTTON_RETRY :إعادة المحاولة +STR_GOAL_QUESTION_BUTTON_CONTINUE :الاستمرار STR_GOAL_QUESTION_BUTTON_RESTART :إعادة تشغيل STR_GOAL_QUESTION_BUTTON_POSTPONE :تأجيل STR_GOAL_QUESTION_BUTTON_SURRENDER :استسلام @@ -3202,6 +3219,7 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}وسط الشاشة على المصنع STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}نسبة الانتاج: {YELLOW}{COMMA}% +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}ينتج: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}:يتطلب STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} تنتظر{STRING} @@ -3314,11 +3332,13 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} الع STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}يمكن تعديلها الى: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :جميع انواع الحمولة STR_PURCHASE_INFO_NONE :بدون +STR_PURCHASE_INFO_ENGINES_ONLY :محركات فقط STR_PURCHASE_INFO_ALL_BUT :الكل الا {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}تأثير الجذب القصى: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}نوع الطائرة:{GOLD}{STRING} ###length 3 +STR_CARGO_TYPE_FILTER_NONE :لا شيء ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}قائمة اختيار القطارات - اضغط على العربة لعرض معلوماتها @@ -3520,6 +3540,7 @@ STR_REPLACE_TRAM_VEHICLES :مركبات ا STR_REPLACE_REMOVE_WAGON :{BLACK} إزالة العربة ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK} المحافظة على طول القطار بازالة عربات ابتداء من المقدمة عند التبديل - عندما يكون التبدل ينتج قطارا اطول. +STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl + Click للتطبيق أيضًا على المجموعات الفرعية # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} @@ -3798,6 +3819,7 @@ STR_ORDER_REFIT_STOP_ORDER :هيئت الى STR_ORDER_STOP_ORDER :توقف STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(لا يمكن استخدام المحطة){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :(تلقائى) @@ -3937,7 +3959,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW} شاش # AI configuration window STR_AI_CONFIG_CAPTION_AI :{WHITE}اعدادات االذكاء الاصطناعي STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}تكوين مخطوط اللعبة -STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}مخطوطات اللعبة الذي سيتم تحميله في اللعبة التالية +STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}النص البرمجي الخاص باللعبة الذي سيتم تحميله في اللعبة التالية STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}الذكاء الاصطناعي الذي سيتم تحميله في اللعبة التالية STR_AI_CONFIG_HUMAN_PLAYER :لاعب انساني STR_AI_CONFIG_RANDOM_AI :ذكاء صناعي عشوائي @@ -3953,6 +3975,7 @@ STR_AI_CONFIG_AI :{SILVER} الذ STR_AI_CONFIG_CHANGE_AI :الذكاء الاصطناعي STR_AI_CONFIG_CHANGE_GAMESCRIPT :مخطوط اللعبة +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}تحميل نص برمجي آخر STR_AI_CONFIG_CONFIGURE :{BLACK} اعداد STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK} اعداد خواص الذكاء الصناعي @@ -3968,6 +3991,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK} اخت STR_AI_LIST_CANCEL :{BLACK} الغاء STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا تغير الذكاء الصناعي +STR_SCREENSHOT_SCREENSHOT :{BLACK}لقطة شاشة عادية STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}التقط لقطة شاشة كاملة STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}صور الخاريطة الكاملة @@ -4224,6 +4248,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}تركيبة سكك غير صالحة diff --git a/src/lang/basque.txt b/src/lang/basque.txt index ead3a77312..c6de8b1c3b 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2892,7 +2892,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Kontuz: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Akatsa {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Larria: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF-an akats larria gertatu da:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ez du funtzionatuko OpenTTD-k esandakoTTDPatch bertsioarekin STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} {STRING} TTD bertsioarentzat da STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} {STRING}arekin erabiltzeko diseinatua izan da diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 3dc6a38a51..cb805a887b 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3420,8 +3420,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Увага: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Памылка: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Крытычная памылка: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Памылка пры рабоце з NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Памылка, звязаная з модулем NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ня будзе працаваць з вэрсіяй TTDPatch, паведламленай OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :Файл {1:STRING} патрабуе {STRING}-вэрсію TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} зроблены для выкарыстаньня сумесна з {STRING} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index e69ce042d3..fb63f4762d 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3351,8 +3351,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Atenção: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Erro: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Erro Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Um erro de NewGRF fatal ocorreu:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Um erro NewGRF ocorreu:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} não irá funcionar com a versão do TTDPatch encontrada pelo OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} funciona na versão {STRING} de TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} é projetado para ser usado com {2:STRING} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index da80276a61..61618bc77b 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2949,7 +2949,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Внимание: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Грешка: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Критично: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Настъпи фатална грешка в NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} няма да работи с версията на TTDPatch указана от OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} е за {STRING} версията на TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} е проектиран да работи с {STRING} diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index f3ce3e3ceb..ba125cfc18 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3353,8 +3353,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Alerta: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}S'ha produït un error fatal de NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}S'ha produït un error relacionat amb els NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} no funcionarà amb la versió TTDPatch informada per l'OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} és per a la versió {2:STRING} del TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} està dissenyat per a fer-se servir amb {2:STRING} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 0e0cc36c80..32ffdf4e73 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3240,7 +3240,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Upozorenje: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Greška: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Kobno: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Dogodila se kobna pogreška u NewGRF-u:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} neće raditi sa TTDPatch verzijom prijavljenom u OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je za {STRING} verziju TTD-a. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} je napravljen da se koristi sa {STRING} diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 0994ce52d6..90041f1ba0 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3443,8 +3443,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Varování: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Chyba: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Závažná chyba: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Vyskytla se kritická chyba v NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Došlo k chybě v NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nebude fungovat s verzí TTDPatche, kterou OpenTTD hlásí STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je pro TTD verzi {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} je navržen pro práci s {STRING} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 8ac85293e5..a9452a12e8 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3295,8 +3295,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Advarsel: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fejl: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatalt: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}En fatal NewGRF-fejl er opstået:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Der er opstået en NewGRF-fejl:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} virker ikke med TTDPatch-versionen rapporteret af OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} er beregnet til {STRING}-versionen af TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} er designet til brug sammen med {STRING} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 8bbc07d1bd..fefd6dd7e7 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3352,8 +3352,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Waarschuwing: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fout: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatale fout: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Een fatale NewGRF-fout is ontstaan:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Er is een NewGRF-fout opgetreden:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} werkt niet met de TTDPatch-versie die is opgegeven door OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is voor versie {2:STRING} van TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is ontwikkeld voor {2:STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 940a070278..f9d1771da8 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3352,8 +3352,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warning: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}A fatal NewGRF error has occurred:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}A NewGRF error has occurred:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} will not work with the TTDPatch version reported by OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is for the {2:STRING} version of TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is designed to be used with {2:STRING} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index dfb65b60a7..ecdd79784f 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3352,8 +3352,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warning: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}A fatal NewGRF error has occurred:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}A NewGRF error has occurred:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} will not work with the TTDPatch version reported by OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is for the {2:STRING} version of TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is designed to be used with {2:STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index e355d66441..0849d4c7fa 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2551,7 +2551,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Averto: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Eraro: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatalo: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Neriparebla NewGRF-eraro okazis:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ne funkcios kun la versio de TTDPatch menciata de OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} estas por la {STRING} versio de TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} estas intencita por uzo kun {STRING} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 00ffdf9c10..9711ef5d46 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -3300,8 +3300,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Hoiatus: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Viga: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Saatuslik viga: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Esines raske NewGRF-i tõrge:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Esines viga NewGRF-iga:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :OpenTTD väitel {1:STRING} ei tööta selle TTDPatch versiooniga. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on {STRING} TTD osa jaoks. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} on mõeldud kasutamiseks {STRING} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 88c1506467..86d4049192 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3352,8 +3352,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Varoitus: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Virhe: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Virhe: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Vakava NewGRF-virhe on tapahtunut:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF-virhe on tapahtunut:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ei toimi OpenTTD:n ilmoittaman TTDPatch-version kanssa STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on TTD:n {2:STRING}-versiota varten STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} on suunniteltu toimimaan lisäosan {2:STRING} kanssa diff --git a/src/lang/french.txt b/src/lang/french.txt index e0242dd79e..f8845f85c3 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3353,8 +3353,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Attention{NBSP}: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Erreur{NBSP}: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Erreur fatale{NBSP}: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Une erreur NewGRF fatale est survenue{NBSP}:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Une erreur NewGRF est survenue{NBSP}:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ne fonctionnera pas avec la version de TTDPatch rapportée par OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} est conçu pour la version {2:STRING} de TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} est conçu pour être utilisé avec {2:STRING} diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 478aec1dd6..0c97d4bbf9 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -2871,7 +2871,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warskôging: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Flater: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatale flater: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Der hat in fatale NewGRF-flater plakfûn:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} sil net wurkje kinne mei de TTDPatch-ferzje dy't troch OpenTTD meldt wurdt STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is makke foar de {STRING}-ferzje fan TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} makke om te brûken tegeare my{STRING} diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 67f7ee642a..51b8e801e8 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -3254,7 +3254,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Rabhadh: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Mearachd: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Marbhtach: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Thachair mearachd NewGRF marbhtach:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :Chan obraich {1:STRING} leis an tionndadh aig TTDPatch a chaidh aithris le OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :Tha {1:STRING} airson tionndadh {STRING} aig TTD STR_NEWGRF_ERROR_UNSET_SWITCH :Chaidh {1:STRING} a dhealbhachadh gus cleachdadh le {STRING} diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 9c588f87b2..82a9a16510 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3347,8 +3347,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Coidado: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Erro: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Erro fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ocorreu un erro fatal de NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Ocurriu un erro cun NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} non funcionará coa versión de TTDPatch reportada por OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} é para a versión {2:STRING} de TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} está deseñado para ser usado con {2:STRING} diff --git a/src/lang/german.txt b/src/lang/german.txt index 48de04a7e4..e7229ec163 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3347,8 +3347,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warnung: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fehler: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Schwerer Fehler: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ein schwerer NewGRF-Fehler ist aufgetreten:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Ein NewGRF-Fehler ist aufgetreten:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} funktioniert nicht im Zusammenhang mit der von OpenTTD ermittelten TTDPatch-Version STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} ist für die {2:STRING}-Version von TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ist für die Nutzung mit {2:STRING} vorgesehen diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 181413d9fb..11b3a63f64 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3451,8 +3451,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Προειδοποίηση: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Λάθος: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Καταστροφικό: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ένα καταστροφικό λάθος για τα NewGRF έχει συμβεί:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Ένα NewGRF λάθος έχει συμβεί:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :Το {1:STRING} δεν θα δουλέψει με την έκδοση του TTDPatch όπως αναφέρεται από το OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :Το {1:STRING} είναι για την έκδοση {STRING} του TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} είναι σχεδιασμένο να δουλέψει με το {STRING} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index ffe0a23f4f..0e8765417c 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -3122,7 +3122,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}אזהרה: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{SILVER}{STRING}{RED}: שגיאה STR_NEWGRF_ERROR_MSG_FATAL :{SILVER}{STRING}{RED} :שגיאה חמורה -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}התרחשה שגיאה קריטית ב-NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} לא יעבוד עם גרסת ה-TTDPatch שדווחה ע"י OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} היא עבור גרסת {STRING} של TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} נועד להיות בשימוש יחד עם {STRING} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 25583d8796..c1e84eda9a 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3410,8 +3410,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Figyelmeztetés: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Hiba: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Végzetes hiba: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Egy végzetes NewGRF hiba történt:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF hiba történt:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nem fog működni az OpenTTD által jelentett TTDPatch verzióval STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} a TTD {2:STRING} verziójához van STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} úgy lett tervezve, hogy együtt lesz használva ezzel: {2:STRING} diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 714124708a..f551ffbedc 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2824,7 +2824,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Aðvörun: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Villa: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Banvænt: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Alvarleg NewGRF villa átti sér stað:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} Mun ekki virka með útgáfu TTDPatch sem OpenTTD gefur til kynna. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} er fyrir {STRING} útgáfu af TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} er hannað til að notast með {STRING} diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index ca8ff68ae9..6bdcea6e62 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3346,8 +3346,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Peringatan: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Kesalahan: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Kesalahan fatal NewGRF telah terjadi:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Terjadi galat pada NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} tidak akan bekerja dengan versi TTDPatch yang telah dilaporkan oleh OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} untuk TTD versi {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} didesain untuk digunakan dengan {2:STRING} diff --git a/src/lang/irish.txt b/src/lang/irish.txt index d41bc3235a..e6e990baa5 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3286,8 +3286,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Rabhadh: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Earráid: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Marfach: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Tharla earráid mharfach NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Tharla earráid NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :Ní oibreoidh {1:STRING} leis an leagan de TTDPatch a thuairiscigh OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING}: Is don leagan {STRING} de TTD é STR_NEWGRF_ERROR_UNSET_SWITCH :Tá {1:STRING} deartha le húsáid le {STRING} diff --git a/src/lang/italian.txt b/src/lang/italian.txt index d0e63f52ba..8b0f367b4e 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3387,8 +3387,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Attenzione: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Errore: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Errore irreversibile: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Si è verificato un errore irreversibile nel NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Si è verificato un errore in un NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} non funziona con la versione di TTDPatch riferita da OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} è per la versione {2:STRING} di TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} è progettato per essere usato con {2:STRING} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index bc95fa4c93..7b7e754adb 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -3325,8 +3325,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}警告: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}エラー: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}致命的エラー: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRFに致命的なエラーが発生しました:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRFにエラーが発生しました:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING}はOpenTTDのTTDPatchバージョンには対応していません STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING}はTTDのバージョン{STRING}にのみ対応しています STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING}を使用時には{STRING}を有効にしなければなりません diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 8336aa12a1..d4a0dcf9d6 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3353,8 +3353,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}경고: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}오류: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}치명적 오류: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}치명적인 NewGRF 오류가 발생했습니다:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF 관련 오류가 발생했습니다:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING}{G 1 "은" "는"} OpenTTD에서 보고된 TTDPatch 버전에서 작동하지 않을 것입니다 STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING}{G 1 "은" "는"} {2:STRING} 버전의 TTD를 위한 것입니다 STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING}{G 1 "은" "는"} {2:STRING}{G 1 "와" "과"} 같이 사용해야 합니다 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 0b0af7b5df..9788d880c4 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3223,7 +3223,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Cautio: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Error Fatalis: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Error NewGRF fatalis:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} non operat apud editionem TTDPatch ab OpenTTD dicta STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} spectat ad editionem {STRING} TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} spectat ad {STRING} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 0bbe5eaf1e..c92f1233e3 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3351,8 +3351,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Brīdinājums: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Kļūda: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatāls: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Notikusi fatāla NewGRF kļūda:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Radusies NewGRF kļūda:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nedarbosies kopā ar TTDPatch versiju (par ko ziņoja OpenTTD). STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} ir paredzēts TTD versijai {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ir paredzēts lietošanai ar {2:STRING} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index b3432ec87c..419bf006f8 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3515,7 +3515,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Įspėjimas: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Klaida: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Lemtingoji klaida: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Įvyko lemtingoji plėtinio klaida:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} neveiks su TTDPatch versija nurodyta pagal OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} skirtas {STRING} TTD versijai. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} yra pritaikytas naudojimui su {STRING} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index b99e1103c2..0e5c6e56df 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3352,8 +3352,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warnung: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fehler: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}E fatalen NewGRF Fehler ass geschitt:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}En NewGRF Fehler ass geschitt:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} wärt net mat der TTDPatch Versioun déi vun OpenTTD erkannt gouf funktionéiren STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} ass fir {2:STRING} Versioun vun TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ass designed fir mat {2:STRING} benotzt ze ginn diff --git a/src/lang/malay.txt b/src/lang/malay.txt index bc5233b560..152923dcfb 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2724,7 +2724,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Amaran: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Kesilapan: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Bahaya: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Kesilapan NewGRF yang bahaya telah berlaku:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} tidak akan berfungsi dengan versi TTDPatch seperti yang dilaporkan oleh OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} adalah untuk TTD versi {STRING}. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} direkabentuk untuk digunakan bersama {STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index d4c2924c0f..e2679130f6 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3307,8 +3307,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Advarsel: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Feil: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}En fatal NewGRF-feil har oppstått:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}En NewGRF feil har oppstått:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} virker ikke med TTDPatch-versjonen som er rapportert av OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} er for versjon {STRING} av TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} er laget for bruk med {STRING} diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index f591ac824b..1bdd1b8845 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2899,7 +2899,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Åtvaring: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Feil: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ein fatal NewGRF-feil har oppstått:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} vil ikkje verke med den TTDPatch versjonen som OpenTTD oppgjer STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} er for {STRING} utgåva av TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} er laga for å brukast saman med {STRING} diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 90144352a1..c185b57585 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -2698,7 +2698,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}هشدار: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}خطا: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}خطای وخیم: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}یک خطای وخیم در NewGRF اتفاق افتاده:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} با TTDPatch که ویرایش آن توسط OpenTTD گزارش شده کار نمی کند STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} برای ویرایش {STRING}TTD می باشد STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} طراحی شده برای استفاده با {STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 41058ab63e..b63fd67555 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3732,8 +3732,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Ostrzeżenie: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Błąd: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Błąd krytyczny: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Wystąpił błąd krytyczny NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Wystąpił błąd NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nie zadziała z wersją TTDPatcha zgłoszoną przez OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} jest przeznaczony dla TTD w wersji {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} jest zaprojektowany do użycia z {2:STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index b38ab7f869..a717d6f784 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3353,8 +3353,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Aviso: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Erro: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ocorreu um erro fatal num NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Ocorreu um erro de NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} não funciona com a versão do TTDPatch reportada por OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} é para a versão {2:STRING} do TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} foi concebido para ser usado com {2:STRING} @@ -4626,7 +4624,7 @@ STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap # Script Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parâmetros de IA +STR_AI_SETTINGS_CAPTION_AI :IA STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Jogo STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Repor diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 41fa15b29b..0bfe871258 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3352,8 +3352,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Atenţie: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Eroare: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}O eroare fatală NewGRF a avut loc:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}O eroare NewGRF a avut loc:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nu va funcţiona cu versiunea TTDPatch raportată de OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} este pentru versiunea {2:STRING} a TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} este conceput pentru a fi folosit cu {2:STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 4ed83ac516..0139e931f6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3527,8 +3527,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Внимание: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Ошибка: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Критическая ошибка: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ошибка при работе с NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Ошибка, связанная с модулем NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} не будет работать с версией TTDPatch, сообщенной OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :Файл {1:STRING} требует TTD версии {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} предполагается использовать совместно с {2:STRING} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 145a352e06..fcc09de47f 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3541,8 +3541,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Upozorenje: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Greška: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Kobno: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Došlo je do neotklonljive NewGRF greške:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Dogodila se greška kod NewGRF-a:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} neće raditi sa TTDPatch verzijom prema prijavi OpenTTD-a STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je za {2:STRING} verziju TTD-a STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} je napravljen za korišćenje sa {2:STRING} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 792ceaeda8..e241e3708b 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3352,8 +3352,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}警告:{SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}错误:{SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}严重错误:{SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}发生了一个致命的NewGRF错误:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}发生了一个NewGRF错误:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} 不能与 OpenTTD 报告的 TTDPatch 版本兼容。 STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} 是为 {2:STRING} 版 TTD 开发的。 STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} 应当与 {2:STRING} 配合 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 40bef87f07..b16f52e99b 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3418,8 +3418,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Upozornenie: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Chyba: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Kritická chyba: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Nastala závažná chyba NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Vyskytla sa chyba NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nebude fungovať s TTDPatch verziou nahlásenou OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je pre verziu {2:STRING} TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} je navrhnutý pre použitie s {2:STRING} diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 8c2a3a3a17..31e3626540 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -3149,7 +3149,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Pozor: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Napaka: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Usodno: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Zgodila se je usodna NewGRF napaka:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ne deluje s TTDPatch različico prijavljeno v OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je za {STRING} različico TTD-ja STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} je izdelano za uporabo v {STRING} kombinaciji diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 5e63b33435..8e551b3453 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3353,8 +3353,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Atención: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Error Fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ha ocurrido un error fatal de NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Ha ocurrido un error de NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} no funcionará con la con la versión de TTDPatch informada por OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} es para la versión {2:STRING} of TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} está diseñado para ser usado con {2:STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 1a08751002..d0e9bc0f26 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3353,8 +3353,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Atención: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Error fatal: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ocurrió un error fatal de NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Ocurrió un error de NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} no funcionará con la con la versión de TTDPatch reportada por OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} es la para la versión {2:STRING} de TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} está diseñado para usarse con {2:STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index bf9b33366a..b259149c69 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3352,8 +3352,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Varning: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fel: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatalt: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ett fatalt NewGRF-fel har uppstått:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Ett NewGRF-fel har uppstått:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} kommer inte att fungera med den TTDPatchversion som rapporterades av OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} är för {2:STRING}-versionen av TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} är designat för att användas med {2:STRING} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index edf3934a97..1a710967cb 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2965,7 +2965,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}எச்சரிக்கை: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}பிழை: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}மரணம்: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}மரணமான NewGRF பிழை ஏற்பட்டுள்ளது:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :OpenTTDஆல் தெரிவித்த TTDPatch விருத்துடன் {1:STRING} செயல்படாது STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} ஆனது {STRING} TTD பதிப்பிற்காகவே STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ஆனது {STRING} உடன் இணைந்து பயன்படுத்த வடிவமைக்கப்பட்டுள்ளது diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 56d755cb64..25bf12e085 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -3082,8 +3082,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}อันตราย: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}ร้ายแรง: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}เกิดความผิดพลาดร้ายแรงเกี่ยวกับ NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}มี NewGRF ที่เกิดข้อผิดพลาดขึ้น! :{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING}ไม่สามารถทำงานได้บน TTDPatchเวอร์ชั่นนี่ รายงานโดย OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} สำหรับ {STRING} version of TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} ออกแบบมาสำหรับใช้งานกับ {STRING} diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 7963e9b2e2..73d9aeb11f 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3350,8 +3350,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}警告:{SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}錯誤:{SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}嚴重錯誤:{SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}發生嚴重 NewGRF 錯誤的處理方式:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}發生NewGRF錯誤:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} 跟由 OpenTTD 回報的 TTDPatch 版本不合 STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} 只適合用於 TTD 版本 {2:STRING}。 STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} 必須跟 {2:STRING} 一起使用 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index aa5c63fa2a..19f19110bf 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -3353,8 +3353,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Uyarı: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Hata: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Ölümcül hata: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Ölümcül bir NewGRF hatası oluştu:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF hatası oluştu:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} OpenTTD tarafından belirtilen TTDPatch sürümüyle çalışmayacaktır STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING}, TTD'nin {2:STRING} sürümü içindir STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING}, {2:STRING} ile kullanılmak için tasarlanmıştır diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index fae2ac24ee..226c3037a8 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3477,8 +3477,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Попередження: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Помилка: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Збій: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Фатальна помилка NewGRF:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Помилка NewGRF:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} не буде працювати з версією TTDPatch, вказаною OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} для {2:STRING}-версії TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} розроблено для використання з {2:STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 2ff8634523..07e00c0127 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3350,8 +3350,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Cảnh báo: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Lỗi: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Lỗi nghiêm trọng: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Xảy ra lỗi NewGRF nghiêm trọng:{}{STRING} -STR_NEWGRF_ERROR_POPUP :{WHITE}Có lỗi NewGRF xảy ra:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} sẽ không hoạt động với phiên bản TTDPatch version theo như báo cáo của OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} để dành cho phiên bản {2:STRING} của TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} được thiết kế để dùng với {2:STRING} diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index d1c566ebfc..4d40fdaf2c 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -3000,7 +3000,6 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Rhybudd: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Gwall: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Angheuol: {SILVER}{STRING} -STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Mae gwall angheuol NewGRF wedi digwydd:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :Ni fydd {1:STRING} yn gweithio gyda'r fersiwn o TTDPatch yr adroddir gan OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :Mae {1:STRING} ar gyfer y fersiwn {STRING} o TTD STR_NEWGRF_ERROR_UNSET_SWITCH :Mae {1:STRING} wedi ei gynllunio i gael ei ddefnyddio gyda {STRING} From 59251d3c6b9bf2a0ae85aefc2c9e9f91a46f3031 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 9 Feb 2023 18:45:50 +0000 Subject: [PATCH 33/42] Update: Translations from eints english (us): 2 changes by 2TallTyler estonian: 110 changes by RM87 czech: 5 changes by jacobczsk italian: 11 changes by Rivarossi russian: 2 changes by Ln-Wolf --- src/lang/czech.txt | 5 ++ src/lang/english_US.txt | 2 + src/lang/estonian.txt | 118 +++++++++++++++++++++++++++++++++++++--- src/lang/italian.txt | 12 +++- src/lang/russian.txt | 2 + 5 files changed, 130 insertions(+), 9 deletions(-) diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 90041f1ba0..7f21c6de7d 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1293,6 +1293,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :vpravo STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximální půjčka: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Jak moc si může společnost půjčit (bez ohledu na inflaci) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Výše úroků: {STRING} @@ -3443,6 +3444,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Varování: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Chyba: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Závažná chyba: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}V NewGRF "{STRING}" se vyskytla kritická chyba:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}V NewGRF "{STRING}" došlo k chybě{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nebude fungovat s verzí TTDPatche, kterou OpenTTD hlásí STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} je pro TTD verzi {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} je navržen pro práci s {STRING} @@ -4716,7 +4719,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Snímek STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Snímek (náhledové) mapy světa # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametry STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametry AI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Herní skript STR_AI_SETTINGS_CLOSE :{BLACK}Zavřít STR_AI_SETTINGS_RESET :{BLACK}Obnovit nastavení STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index ecdd79784f..df8c5eada6 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3352,6 +3352,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warning: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}The NewGRF "{STRING}" has returned a fatal error:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}The NewGRF "{STRING}" has returned an error:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} will not work with the TTDPatch version reported by OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is for the {2:STRING} version of TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is designed to be used with {2:STRING} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 9711ef5d46..5f403b72f7 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -257,6 +257,14 @@ STR_UNITS_POWER_IMPERIAL :{COMMA}hj STR_UNITS_POWER_METRIC :{COMMA}hj STR_UNITS_POWER_SI :{COMMA}kW +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hj/t +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hj/t +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hj/t +STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hj/t +STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hj/t +STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hj/t +STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t +STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}t STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}t @@ -384,6 +392,8 @@ STR_GROUP_BY_NONE :Puudub STR_GROUP_BY_SHARED_ORDERS :Jagatud korraldused # Order button in shared orders vehicle list +STR_GOTO_ORDER_VIEW :{BLACK}Korraldused +STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Ava korralduste vaade # Tooltips for the main toolbar ###length 31 @@ -450,6 +460,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Välju ###length 15 STR_SETTINGS_MENU_GAME_OPTIONS :Mängu seadistus STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Seaded +STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :GameScript'i seaded STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-i seadistus STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läbipaistvuse seadistus STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Näidatavad asustuste nimed @@ -849,6 +860,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * S STR_STATUSBAR_AUTOSAVE :{RED}VÄLPSALVESTUS STR_STATUSBAR_SAVING_GAME :{RED}* * MÄNGU SALVESTAMINE * * +STR_STATUSBAR_SPECTATOR :{WHITE}(vaatleja) # News message history STR_MESSAGE_HISTORY :{WHITE}Sõnumite ajalugu @@ -1044,9 +1056,17 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Seade om STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Märgi, et ekraani v-sync sisse lülitada. Seade kohaldub alles pärast mängu taaskäivitust. Töötab vaid, kui riistvarakiirendus on peal +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Hetke draiver: {STRING} +STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Liidese suurus +STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Tuvasta automaatselt suurus +STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Märgi see kast, et tuvastada liidese suurus automaatselt +STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Skaleeri kaldeid liidese suuruse järgi +STR_GAME_OPTIONS_GUI_SCALE_2X :2x +STR_GAME_OPTIONS_GUI_SCALE_3X :3x +STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_GRAPHICS :{BLACK}Graafika @@ -1163,6 +1183,7 @@ STR_TERRAIN_TYPE_CUSTOM :Määratud kõr STR_TERRAIN_TYPE_CUSTOM_VALUE :Määratud kõrgus ({NUM}) ###length 4 +STR_CITY_APPROVAL_LENIENT :Leebe STR_CITY_APPROVAL_TOLERANT :Salliv STR_CITY_APPROVAL_HOSTILE :Vaenulik STR_CITY_APPROVAL_PERMISSIVE :Soodustav @@ -1231,7 +1252,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Paremal STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Stardilaenu ülempiirang: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurim summa, mida ettevõte saab laenata (arvestamata inflatsiooni) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Laenudeta {RED}GameScript peab andma esmase rahastuse STR_CONFIG_SETTING_INTEREST_RATE :Intressimäär: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Laenu intressimäär; ühtlasi juhib inflatsiooni, kui inflatsioon on aktiveeritud @@ -1249,7 +1272,9 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Toetuse kordaja STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Määra ära kui palju makstakse toetatud liinide eest +STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} aasta{P "" d} ###setting-zero-is-special +STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Toetusteta STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Ehituse hinnad: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Määrab ehitus- ja ostukulude hinnataseme @@ -1334,7 +1359,7 @@ STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Tasane ala ümb STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Summa kui palju tasast maad on ümber tehase. See tagab et ruumi jääb saadavale ehitiste jaoks STR_CONFIG_SETTING_MULTIPINDTOWN :Mitu samalaadset tööstust ühe asula piires: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Tavaliselt asula ei taha rohkem kui ühte tööstustharu igast liigist. Selle seadega lubatakse rohkem kui üks samalaadne tööstus ühe asula piires +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Tavaliselt asula ei taha rohkem kui ühte tööstusharu igast liigist. Selle seadega lubatakse rohkem kui üks samalaadne tööstus ühe asula piires STR_CONFIG_SETTING_SIGNALSIDE :Signaale näidatakse: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Vali kummale poole rada signaalid paigutatakse @@ -1538,7 +1563,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Roheline STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Tumeroheline STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violetne +STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Kaubavoo ülekatte värvid: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Vali värvilahendus, mida kasutatakse kaubavoo ülekattel ###length 4 +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Rohelisest punaseni (esialgne) +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Rohelisest siniseni +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Hallist punaseni STR_CONFIG_SETTING_SCROLLMODE :Vaate liigutamine: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Kaardil liikumise viis @@ -1582,7 +1612,11 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Topeltklõpsuga STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Ühe klõpsuga (kui on fookuses) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Ühe klõpsuga (koheselt) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Kasuta releeteenust : {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Kui serveriga ühenduse loomine ebaõnnestub, võib kasutada relee teenust ühenduse loomiseks. "Mitte kunagi" keelab selle, "küsi" küsib esmalt, "luba" lubab selle küsimata ###length 3 +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Mitte kunagi +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Küsi STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Paremklõpsu matkimine: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Vali meetod mille järgi emuleeritakse hiite paremklõpse @@ -1679,8 +1713,8 @@ STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Maastikult, tö STR_CONFIG_SETTING_MAX_TRAINS :Ettevõtte rongide ülempiirang: {STRING} STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Ettevõttele kuuluvate rongide arvu ülempiirang -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Ettevõtte mootorsõidukite ülempiirang: {STRING} -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Ettevõttele kuuluvate mootorsõidukite arvu ülempiirang +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Ettevõtte maanteesõidukite ülempiirang: {STRING} +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Ettevõttele kuuluvate maanteesõidukite arvu ülempiirang STR_CONFIG_SETTING_MAX_AIRCRAFT :Ettevõtte õhusõidukite ülempiirang: {STRING} STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Ettevõttele kuuluvate õhusõidukite arvu ülempiirang @@ -1749,6 +1783,7 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Kui vastasettev STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Õnnetused / katastroofid: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Õnnetusi või katastroofi esinemisel näidatakse seda ajalehes +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Õnnetused konkurentide sõidukitega: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Ettevõtte teave: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Kui uus ettevõte alustab, või ettevõte riskib pankrotiga, näidatakse seda ajalehes @@ -1831,7 +1866,10 @@ STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Muuda saadaval STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Ainult täiustatud STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Kõik +STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Näita signaali tüüpe: {STRING} +STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :Vali milliseid signaale kuvatakse signaalide tööribal ###length 2 +STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :Kõik signaalid STR_CONFIG_SETTING_TOWN_LAYOUT :Uute asulate teeplaneering: {STRING} STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Teedevõrgu paigutus asulates @@ -2017,6 +2055,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Tööst STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Kaubajaotus STR_CONFIG_SETTING_AI :{ORANGE}Konkurendid STR_CONFIG_SETTING_AI_NPC :{ORANGE}Arvuti +STR_CONFIG_SETTING_NETWORK :{ORANGE}Võrk STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Rongide marsruudileidja: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Marsruudileidja rongide jaoks @@ -2071,6 +2110,8 @@ STR_INTRO_HIGHSCORE :{BLACK}Edetabel STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Seaded STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-i seadistus STR_INTRO_ONLINE_CONTENT :{BLACK}Aineste allalaadimine +STR_INTRO_AI_SETTINGS :{BLACK}TI Seaded +STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}GameScript'i seaded STR_INTRO_QUIT :{BLACK}Välju STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Alusta uut mängu. Ctrl+klõps jätab kaardi seadistamise vahele @@ -2090,6 +2131,7 @@ STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Ava edet STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Ava seaded STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Ava NewGRF-i seadistamine STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Otsi allalaadimiseks uusi ja uuendatud aineseid +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Näita TI seadeid STR_INTRO_TOOLTIP_QUIT :{BLACK}Välju 'OpenTTD'st STR_INTRO_BASESET :{BLACK}Hetkel valitud lähtegraafikakogust puudub {NUM} sprite{P "" 'i}. Kontrolli, kas lähtekogule on uuendusi. @@ -2218,7 +2260,9 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Vaheta k # Matches ServerGameType ###length 3 +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Kohalik STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Avalik +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Kutsega # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Mitmikmäng @@ -2249,11 +2293,14 @@ STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Maastik STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Kaardi mõõtmed: {WHITE}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Serveri versioon: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Serveri aadress: {WHITE}{STRING} +STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kutse kood: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Aeg alguses: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Aeg hetkel: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Kaitstud salasõnaga! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER ON MAAS STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVER ON TÄIS +STR_NETWORK_SERVER_LIST_SERVER_BANNED :{SILVER}SERVER BÄNNIS SINU +STR_NETWORK_SERVER_LIST_SERVER_TOO_OLD :SILVER}SERVER ON LIIGA VANA STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}ÜHILDUMATUD VERSIOONID STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF SOBIMATUS @@ -2317,6 +2364,7 @@ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Ettevõt # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Ühendatud mängijad +STR_NETWORK_COMPANY_LIST_SPECTATE :Vaatle # Network client list STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Mitmikmäng @@ -2327,6 +2375,9 @@ STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Muuda om STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Serveri nimi STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Nähtavus STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Kas sinu server on kõikidele teistele avalikult nähtav +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Kutse kood +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Kutse kood, mille abil teised mängijad saavad serveriga liituda +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Ühenduse tüüp STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Mängija STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nimi STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Sinu mängija nimi @@ -2343,9 +2394,13 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Uus ettevõte) STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Loo uus ettevõte ja liitu sellega STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tema oled sina STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Tema on mängu korraldaja +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" i} / {NUM} ettevõt{P e teid} # Matches ConnectionType ###length 5 +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Kohalik +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Välised mängijad ei saa ühenduda +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Avalik STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Viska välja STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Keela @@ -2358,6 +2413,10 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Kas ole STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Kas oled kindel, et tahad kustutada ettevõtte '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Kas oled kindel, et soovid nullida ettevõtte '{COMPANY}' salasõna? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Ühenduse loomine sinu ja serveri '{STRING}' vahel ebaõnnestus .{}Kas sa soovid seda sesiooni vahendada läbi '{STRING}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Ei +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Jah, ainult seekord +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}jah, ära küsi uuesti STR_NETWORK_SPECTATORS :Vaatlejad @@ -2468,6 +2527,9 @@ STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server s STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server restardib...{}Palun oota... STR_NETWORK_MESSAGE_KICKED :*** {STRING} visati välja. Põhjendus: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Serveri registreerimine ebaõnnestus +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Sinu server ei luba väliseid ühendusi +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Teised mängijad ei saa sinu serveriga ühenduda # Content downloading window STR_CONTENT_TITLE :{WHITE}Aineste allalaadimine @@ -2574,6 +2636,7 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}ülekoormatud # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Keskmine sõidukestus: {NUM}{NBSP}päev{P "" a} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Mõjupiirkonna näitamine @@ -2583,6 +2646,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Lülita STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Lülita sisse jaama mõjupiirkonna näitamine STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Võtab vastu: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Tarnib: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Hoolduse maksumus: {GOLD}{CURRENCY_SHORT}/a # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Liida jaamale @@ -2664,6 +2728,9 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenda STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vali raudteesild STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Vali sillatüüp STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Silla valik - ehitamiseks klõpsi sobival sillal +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Rippsild, terasest STR_BRIDGE_NAME_GIRDER_STEEL :Raamistikuga, terasest STR_BRIDGE_NAME_CANTILEVER_STEEL :Konsool, terasest @@ -2815,6 +2882,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Suvaline STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Raja asula suvalisse kohta STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Palju suvalisi asulaid STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Kaardi katmine suvaliselt paigutatud asulatega +STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Laienda kõiki asulaid +STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Kõik asulad kasvavad vaikselt STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Asula nimi: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Sisesta asula nimi @@ -3114,6 +3183,11 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Jõgesid STR_MAPGEN_SMOOTHNESS :{BLACK}Laugus: STR_MAPGEN_VARIETY :{BLACK}Iseärasuste jaotus: STR_MAPGEN_GENERATE :{WHITE}Tekita +STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF-i seadistus +STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :Näita NewGRF-i seadeid +STR_MAPGEN_AI_SETTINGS :{BLACK}TI Seaded +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Näita TI seadeid +STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Näita GameSript'i seadeid ###length 21 STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :Inglise (algne) @@ -3601,24 +3675,37 @@ STR_FINANCES_CAPTION :{WHITE}{COMPANY STR_FINANCES_YEAR :{WHITE}{NUM} ###length 3 +STR_FINANCES_REVENUE_TITLE :{WHITE}Tulu +STR_FINANCES_OPERATING_EXPENSES_TITLE :{WHITE}Opereerimiskulud ###length 13 STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Ehituskulud STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Uus veerem STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Rongide käituskulud -STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Mootorsõidukite käituskulud +STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Maanteesõidukite käituskulud STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Õhusõidukite käituskulud STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Laevade käituskulud +STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Taristu +STR_FINANCES_SECTION_TRAIN_REVENUE :{GOLD}Rongid +STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Maanteesõidukid +STR_FINANCES_SECTION_AIRCRAFT_REVENUE :{GOLD}Õhusõidukid +STR_FINANCES_SECTION_SHIP_REVENUE :{GOLD}Laevad STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Laenuintressid STR_FINANCES_SECTION_OTHER :{GOLD}Muud +STR_FINANCES_TOTAL_CAPTION :{WHITE}Kokku STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} +STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} +STR_FINANCES_PROFIT :{WHITE}Tulu STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Kontojääk +STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Omavahendid STR_FINANCES_LOAN_TITLE :{WHITE}Laen +STR_FINANCES_INTEREST_RATE :{WHITE}Laenuintress: {BLACK}{NUM}% STR_FINANCES_MAX_LOAN :{WHITE}Laenulimiit: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} +STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Laena {CURRENCY_LONG} STR_FINANCES_BORROW_TOOLTIP :{BLACK}Laena raha STR_FINANCES_REPAY_BUTTON :{BLACK}Tagasimakse {CURRENCY_LONG} @@ -3749,6 +3836,8 @@ STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Saada ju STR_VEHICLE_LIST_REPLACE_VEHICLES :Asenda veovahendeid STR_VEHICLE_LIST_SEND_FOR_SERVICING :Saada hooldusesse STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Selle aasta kasum: {CURRENCY_LONG} (eelneval: {CURRENCY_LONG}) +STR_VEHICLE_LIST_CARGO :{TINY_FONT}{BLACK}[{CARGO_LIST}] +STR_VEHICLE_LIST_NAME_AND_CARGO :{TINY_FONT}{BLACK}{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Saada depoose STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Saada depoose @@ -3803,7 +3892,7 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Uus elektriraud STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Uus monorelsssõiduk STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Uus magnethõljuksõiduk -STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Uued mootorsõidukid +STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Uued maanteesõidukid STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Uued trammid # Vehicle availability @@ -3841,6 +3930,9 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Tegevusr STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Õhusõiduki liik: {GOLD}{STRING} ###length 3 +STR_CARGO_TYPE_FILTER_ALL :Kõik veoseliigid +STR_CARGO_TYPE_FILTER_FREIGHT :Kaubad +STR_CARGO_TYPE_FILTER_NONE :Puudub ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Nimekiri raudteesõidukitest - andmete saamiseks klõpsa raudteesõidukile @@ -4065,6 +4157,7 @@ STR_REPLACE_ROAD_VEHICLES :Maanteesõiduki STR_REPLACE_TRAM_VEHICLES :Trammid STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Automaatne asendamine hoiab rongi pikkuse samana, vajadusel kõrvaldab vaguneid (alates esiotsast), kui muidu rongikoosseis suureneks +STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+klõps, et rakendada ka alamgruppidele # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} @@ -4163,6 +4256,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Tühimas STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Tühimass: {LTBLUE}{WEIGHT_SHORT} {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Veojõud: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Kasum sel aastal: {LTBLUE}{CURRENCY_LONG} (eelmisel: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Kasum sellel aastal: {LTBLUE}{CURRENCY_LONG} (eelmisel aastal: {CURRENCY_LONG}) {BLACK}Min. jõudlus: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Tehnoseisund: {LTBLUE}{COMMA}% {BLACK}Rikkeid eelmisest hooldusest: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Valmistatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY_LONG} @@ -4496,6 +4590,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Üks skr STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/GameScripti debugimise akent saab kasutada ainult serveris # AI configuration window +STR_AI_CONFIG_CAPTION_AI :{WHITE}TI Konfiguratsioon +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}GameScript'i Konfiguratsioon STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Järgmises mängus laaditav GameScript STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI-d järgmises mängus STR_AI_CONFIG_HUMAN_PLAYER :Inimene @@ -4509,10 +4605,11 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Langeta STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Langeta valitud AI loendis madalamale STR_AI_CONFIG_GAMESCRIPT :{SILVER}GameScript +STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parameetrid STR_AI_CONFIG_AI :{SILVER}AI-d STR_AI_CONFIG_CHANGE_AI :AI -STR_AI_CONFIG_CHANGE_GAMESCRIPT :GameScript +STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK} Vali GameScript STR_AI_CONFIG_CHANGE_GAMESCRIPT.g :GameScripti STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Lae teine skript STR_AI_CONFIG_CONFIGURE :{BLACK}Seadistamine @@ -4543,6 +4640,7 @@ STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pisikaar # Script Parameters STR_AI_SETTINGS_CAPTION_AI :AI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :GameScript STR_AI_SETTINGS_CLOSE :{BLACK}Sulge STR_AI_SETTINGS_RESET :{BLACK}Nulli STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} @@ -4623,8 +4721,8 @@ STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Kaardi STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Mäng ei leidnud helisid. Helid saad paigaldada Internetisisu laadimise aknast # Screenshot related messages -STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Hiiglaslik kuvapaugutus -STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Kuvapaugutuse mõõtmed saavad olema {COMMA} x {COMMA} pikslit. Kuvapaugutuse tegemine võib võtta tükk aega. Kas sa oled kindel, et sa soovid jätkata? +STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Hiigelsuur ekraanipilt +STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Ekraanipildi mõõtmed saavad olema {COMMA} x {COMMA} pikslit. Ekraanipildi tegemine võib võtta tükk aega. Kas sa oled kindel, et sa soovid jätkata? STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Kõrguskaart edukalt salvestatud, kui '{STRING}'. Kõrgpunkt on {NUM} STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Ekraanipilt on edukalt salvestatud nimega '{STRING}' @@ -4706,6 +4804,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... liig STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Tööstust ei saa tekitada... STR_ERROR_CAN_T_BUILD_HERE :{WHITE}{STRING} ei saa siia ehitada... STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Seda tüüpi tööstust ei saa siia ehitada... +STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Tööstust ei saa rahastada... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... liiga lähedal mõnele teisele tööstusele STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... enne pead asula rajama STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... iga asula kohta lubatud ainult üks @@ -4720,6 +4819,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... mets STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... saab ehitada ainult ülespoole lumepiiri STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... saab ehitada ainult allapoole lumepiiri +STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Antud tööstusele ei leitud perspektiivikat asukohta STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE} '{STRING}' tööstuste jaoks polnud sobivaid asukohti STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Muuda kaardigeneratsiooni parameetreid, et saada parem kaart @@ -4887,6 +4987,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Mingi ob STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... ettevõtte peakorter on ees STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Seda maad ei saa osta... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... see on juba sinu oma! +STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... objekti rajamise limiit täis # Group related errors STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Ei saa jagu luua... @@ -4986,6 +5087,7 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Teisi ko STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}sõiduk ei saa igasse jaama minna STR_ERROR_CAN_T_ADD_ORDER :{WHITE}sõiduk ei saa antud jaama minna STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... seda korraldust jagav sõiduk ei saa sinna jaama minna +STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... kõigil sõidukitel ei ole ühesugused korraldused STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Sihtpunktide nimekirja ei saa jagada... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Korralduste jagamist ei saa peatada... diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 8b0f367b4e..9007516899 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1241,7 +1241,9 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Destra STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Prestito massimo iniziale: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Ammontare massimo di denaro che una compagnia può chiedere in prestito (senza tenere conto dell'inflazione). +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Nessun prestito {RED}Richiede script di gioco per fornire i fondi iniziali STR_CONFIG_SETTING_INTEREST_RATE :Tasso d'interesse: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Tasso d'interesse sul prestito; controlla anche l'abilitazione dell'inflazione. @@ -2740,6 +2742,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumenta STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Seleziona ponte ferroviario STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Seleziona ponte stradale STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Selezione ponte - fare clic sul ponte desiderato per costruirlo +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Sospeso, Acciaio STR_BRIDGE_NAME_GIRDER_STEEL :A travatura, Acciaio STR_BRIDGE_NAME_CANTILEVER_STEEL :A mensola, Acciaio @@ -3387,6 +3393,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Attenzione: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Errore: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Errore irreversibile: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}La NewGRF "{STRING}" ha restituito un errore irreversibile:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}La NewGRF "{STRING}" ha restituito un errore:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} non funziona con la versione di TTDPatch riferita da OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} è per la versione {2:STRING} di TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} è progettato per essere usato con {2:STRING} @@ -4657,7 +4665,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Screensh STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Screenshot della minimappa # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parametri IA +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametri +STR_AI_SETTINGS_CAPTION_AI :IA +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script di gioco STR_AI_SETTINGS_CLOSE :{BLACK}Chiudi STR_AI_SETTINGS_RESET :{BLACK}Reimposta STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 0139e931f6..32349c0374 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3527,6 +3527,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Внимание: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Ошибка: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Критическая ошибка: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}В модуле NewGRF «{STRING}» произошла критическая ошибка:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}В модуле NewGRF «{STRING}» произошла ошибка:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} не будет работать с версией TTDPatch, сообщенной OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :Файл {1:STRING} требует TTD версии {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} предполагается использовать совместно с {2:STRING} From d6aa526b695e17baae7eb3edfd49d257e5adaebf Mon Sep 17 00:00:00 2001 From: glx22 Date: Fri, 10 Feb 2023 02:15:50 +0100 Subject: [PATCH 34/42] Fix #10461, 59645c6: Properly check for _local_company validity --- src/town_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/town_gui.cpp b/src/town_gui.cpp index f13fb19ecb..ea80af3c57 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -229,7 +229,7 @@ public: case WID_TA_ACTION_INFO: if (this->sel_index != -1) { Money action_cost = _price[PR_TOWN_ACTION] * _town_action_costs[this->sel_index] >> 8; - bool affordable = action_cost < Company::GetIfValid(_local_company)->money; + bool affordable = Company::IsValidID(_local_company) && action_cost < Company::Get(_local_company)->money; SetDParam(0, action_cost); DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect), From 3278f4c7bba73e79497cce573228b9bb48cba7b7 Mon Sep 17 00:00:00 2001 From: glx22 Date: Fri, 10 Feb 2023 05:05:16 +0100 Subject: [PATCH 35/42] Fix #10280, 59645c6: Ignore double-click for unavailable town actions --- src/town_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/town_gui.cpp b/src/town_gui.cpp index ea80af3c57..9076b0b56d 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -297,7 +297,7 @@ public: } /* When double-clicking, continue */ - if (click_count == 1 || y < 0) break; + if (click_count == 1 || y < 0 || !HasBit(this->available_actions, y)) break; FALLTHROUGH; } From 7bd475b86c6c9f06a94cf85b3ad46dc538f8c3dd Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 10 Feb 2023 18:48:19 +0000 Subject: [PATCH 36/42] Update: Translations from eints english (au): 2 changes by krysclarke estonian: 107 changes by RM87 romanian: 2 changes by bnegrut finnish: 8 changes by hpiirai dutch: 4 changes by Afoklala portuguese: 2 changes by azulcosta polish: 2 changes by pAter-exe --- src/lang/dutch.txt | 4 + src/lang/english_AU.txt | 2 + src/lang/estonian.txt | 167 +++++++++++++++++++++++++--------------- src/lang/finnish.txt | 12 ++- src/lang/polish.txt | 2 + src/lang/portuguese.txt | 2 + src/lang/romanian.txt | 2 + 7 files changed, 127 insertions(+), 64 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index fefd6dd7e7..57baa224de 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3352,6 +3352,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Waarschuwing: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fout: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatale fout: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}De NewGRF "{STRING}" heeft een fatale fout veroorzaakt:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}De NewGRF "{STRING}" heeft een fout veroorzaakt:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} werkt niet met de TTDPatch-versie die is opgegeven door OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is voor versie {2:STRING} van TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is ontwikkeld voor {2:STRING} @@ -4622,7 +4624,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Schermaf STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Schermafbeelding van de minikaart # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :{WHITE}AI-parameters +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spelscript STR_AI_SETTINGS_CLOSE :{BLACK}Sluiten STR_AI_SETTINGS_RESET :{BLACK}Terugstellen STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index f9d1771da8..a254b2b1af 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3352,6 +3352,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Warning: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Error: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}The NewGRF "{STRING}" has returned a fatal error:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}The NewGRF "{STRING}" has returned an error:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} will not work with the TTDPatch version reported by OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is for the {2:STRING} version of TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is designed to be used with {2:STRING} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 5f403b72f7..1c6d3aaa46 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -264,6 +264,7 @@ STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hj/t STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hj/t STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t +STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}t @@ -292,8 +293,8 @@ STR_UNITS_HEIGHT_SI :{COMMA} m # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Märksõna: -STR_LIST_FILTER_OSKTITLE :{BLACK}Sisesta märksõna -STR_LIST_FILTER_TOOLTIP :{BLACK}Sisesta märksõna mida loendist otsida +STR_LIST_FILTER_OSKTITLE :{BLACK}Sisesta üks või enam märksõna mille järgi nimekirja filtreerida +STR_LIST_FILTER_TOOLTIP :{BLACK}Sisesta üks või enam märksõna mida loendist otsida STR_TOOLTIP_GROUP_ORDER :{BLACK}Vali jaotamise järjestus STR_TOOLTIP_SORT_ORDER :{BLACK}Vali järjestus (kahanev/kasvav) @@ -442,9 +443,9 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Asustust STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Tööstuste tekitamine STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Maanteede ehitamine STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Trammiteede ehitamine -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puid. Shift valib ehitamise/hinna kuvamise režiimi +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puid. Ctrl valib piirkonna diagonaalselt. Shift valib ehitamise/hinna kuvamise režiimi vahel STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Paigalda silt -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Paigalda objekt. Shift valib ehitamise/hinna kuvamise režiimi +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Paigalda objekt. Ctrl valib ala diagonaaliti. Shift valib ehitamise/hinna kuvamise režiimi vahel # Scenario editor file menu ###length 7 @@ -460,6 +461,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Välju ###length 15 STR_SETTINGS_MENU_GAME_OPTIONS :Mängu seadistus STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Seaded +STR_SETTINGS_MENU_AI_SETTINGS :TI seaded STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :GameScript'i seaded STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-i seadistus STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läbipaistvuse seadistus @@ -964,7 +966,12 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}Jaam {ST STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Toetuse pakkumine lõppes:{}{}{STRING.g} kohast {STRING} kohta {STRING} veoste eest ei maksta enam toetusi STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Toetuse maksmise aeg sai läbi:{}{}{STRING}kohast {STRING} kohta {STRING} eest ei maksta enam edaspidi toetust +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Veoteenusele pakutakse toetust:{}{}{STRING.g}veo eest asustusest {STRING} asustusse {STRING}. Esimesele teenusepakkujale makstakse {NUM} aasta{P "" "t" } toetusi! ###length 4 +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmisel {NUM} aastal 50% rohkem! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmisel {NUM} aastal kahekordselt! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmise {NUM} aasta jooksul kolmekordselt! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Teenusetoetust makstakse ettevõttele {STRING}!{}{}{STRING} kohast {STRING} kohta {STRING} teenuse eest makstakse järgmise {NUM} aasta jooksul neljakordselt! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Liikluskaos asustuses {TOWN}!{}{}Ettevõtte {STRING} poolt rahastatud teede ümberehitus tekitab 6 kuu jooksul maanteedel liiklushäireid! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transpordimonopol! @@ -1062,10 +1069,13 @@ STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Liidese STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Tuvasta automaatselt suurus STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Märgi see kast, et tuvastada liidese suurus automaatselt +STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Skaleeri kaldeid STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Skaleeri kaldeid liidese suuruse järgi +STR_GAME_OPTIONS_GUI_SCALE_1X :1x STR_GAME_OPTIONS_GUI_SCALE_2X :2x STR_GAME_OPTIONS_GUI_SCALE_3X :3x +STR_GAME_OPTIONS_GUI_SCALE_4X :4x STR_GAME_OPTIONS_GUI_SCALE_5X :5x STR_GAME_OPTIONS_GRAPHICS :{BLACK}Graafika @@ -1186,7 +1196,7 @@ STR_TERRAIN_TYPE_CUSTOM_VALUE :Määratud kõr STR_CITY_APPROVAL_LENIENT :Leebe STR_CITY_APPROVAL_TOLERANT :Salliv STR_CITY_APPROVAL_HOSTILE :Vaenulik -STR_CITY_APPROVAL_PERMISSIVE :Soodustav +STR_CITY_APPROVAL_PERMISSIVE :Lubav (ei oma mõju firma tegevustele) STR_WARNING_NO_SUITABLE_AI :{WHITE}Sobiv AI puudub...{}Mitmesuguseid AI-sid saab alla laadida 'aineste allalaadimise' kaudu @@ -1271,6 +1281,8 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Muudab hooldama STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Toetuse kordaja: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Määra ära kui palju makstakse toetatud liinide eest +STR_CONFIG_SETTING_SUBSIDY_DURATION :Toetuse kestus: {STRING} +STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Sea aastate arv, kui kaua toetust makstakse STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} aasta{P "" d} ###setting-zero-is-special @@ -1288,8 +1300,8 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Kui on aktiveer STR_CONFIG_SETTING_DISASTERS :Katastroofid: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Lülita sisse/välja katastroofid, mis aeg-ajalt hävitavad sõidukeid ja taristut -STR_CONFIG_SETTING_CITY_APPROVAL :Astuse omavalitsuse suhtumine pinnase restruktureerimisse: {STRING} -STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Vali kui suurt mõju tekitavad müra ning keskkonna muudatused ettevõtte mainele ja edasistele ehitustoimingutele antud piirkonnas +STR_CONFIG_SETTING_CITY_APPROVAL :Kohaliku omavalitsuse suhtumine: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Vali kui suurt mõju tekitavad müra ning keskkonna muudatused ettevõtte mainele ja edasistele ehitustoimingutele asulas STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Kaardi kõrguspiir: {STRING} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Määra ülempiir kaardil oleva maastiku kõrgusele. "(Auto)" leiab sobiva väärtuse pärast, kui maastik on tekitatud @@ -1479,6 +1491,8 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Graafikutes kas STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näita sõidukiehitusaknas NewGRF-i nime: {STRING} STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisa sõidukiehitusaknasse uus rida, mis näitab millisest NewGRF-ist sõiduk on pärit. +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Näita kaupasid, mida sõidukid saavad vedada nimekirja aknas {STRING} +STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Kui aktiveeritud, siis kuvatakse sõidukite nimekirjas sõiduki kohal selle veos STR_CONFIG_SETTING_LANDSCAPE :Maastik: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maastikud määravad põhilised mängustsenaariumid erinevate veoste ja nõuetega asulate kasvamiseks. NewGRF ja GameScript abil saab siiski täpsemalt kontrollida @@ -1569,6 +1583,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Vali värvilahe STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Rohelisest punaseni (esialgne) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Rohelisest siniseni STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Hallist punaseni +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Halltoonides STR_CONFIG_SETTING_SCROLLMODE :Vaate liigutamine: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Kaardil liikumise viis @@ -1612,11 +1627,12 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Topeltklõpsuga STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Ühe klõpsuga (kui on fookuses) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Ühe klõpsuga (koheselt) -STR_CONFIG_SETTING_USE_RELAY_SERVICE :Kasuta releeteenust : {STRING} -STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Kui serveriga ühenduse loomine ebaõnnestub, võib kasutada relee teenust ühenduse loomiseks. "Mitte kunagi" keelab selle, "küsi" küsib esmalt, "luba" lubab selle küsimata +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Kasuta vahendajateenust : {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Kui serveriga ühenduse loomine ebaõnnestub, võib kasutada vahendajateenust ühenduse loomiseks. "Mitte kunagi" keelab selle, "küsi" küsib esmalt, "luba" lubab selle küsimata ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Mitte kunagi STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Küsi +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Luba STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Paremklõpsu matkimine: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Vali meetod mille järgi emuleeritakse hiite paremklõpse @@ -1784,6 +1800,7 @@ STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Õnnetused / ka STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Õnnetusi või katastroofi esinemisel näidatakse seda ajalehes STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Õnnetused konkurentide sõidukitega: {STRING} +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Kuva ajalehe teated konkurentide sõidukitega juhtunud õnnetuste kohta STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Ettevõtte teave: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Kui uus ettevõte alustab, või ettevõte riskib pankrotiga, näidatakse seda ajalehes @@ -1861,14 +1878,15 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Semafore ehitat STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Määra aasta alates millest hakatakse kasutama elektriga foore. Ennem seda aastat kasutatakse semafoore (mis täidavad sama eesmärki, aga näevad teist moodi välja) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Vaheta signaalide liike: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Muuda saadaval signaaliliike, kui «Ctrl»+klõpsu abil muuta signaali liiki +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Muuda valitavaid signaaliliike, kui «Ctrl»+klõpsu abil muudetakse ehitatud signaali liiki ###length 2 STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Ainult täiustatud -STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Kõik +STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Kõik nähtavad STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Näita signaali tüüpe: {STRING} STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :Vali milliseid signaale kuvatakse signaalide tööribal ###length 2 +STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :Rajasignaalid ainult STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :Kõik signaalid STR_CONFIG_SETTING_TOWN_LAYOUT :Uute asulate teeplaneering: {STRING} @@ -1966,13 +1984,13 @@ STR_CONFIG_SETTING_LINKGRAPH_TIME :Jaotusgraafikud STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Aega ahelgraafiku osa koostamiseks. Koostamise algul käivitatakse protsess, mis võib töötada määratud arv päevi. Väiksema väärtusega on suurem võimalus, et protsess lõppe. Kui protsess ei ole lõppenud, siis mäng seisatakse protsessi lõppemiseni (tekib viivitusi). Suurema arvuga läheb kauem, kuni muudetud teel uuendatakse kaubajaotust. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Reisijate jaotuse viis: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Kui jaamast A läheb jaama B umbes sama hulk reisijaid, kui jaamast B jaama A, siis jaotus on «sümeetriline». Kui mõlemas suunas võib liikuda ükskõik, kui palju resijaid, siis jaotus on «asümeetriline». Kui reisijate liikumist ei jaotata, siis jaotus on «väljas». +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :Kui jaamast A läheb jaama B umbes sama hulk reisijaid, kui jaamast B jaama A, siis jaotus on «Sümeetriline». Kui mõlemas suunas võib liikuda ükskõik, kui palju resijaid, siis jaotus on «Asümeetriline». Kui reisijate liikumist ei jaotata, siis jaotus on «Väljas». STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Posti jaotuse viis: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :Kui jaamast A viiakse jaama B umbes sama hulk posti, kui jaamast B jaama A, siis jaotus on «sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju posti, siis jaotus on «asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «väljas». +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :Kui jaamast A viiakse jaama B umbes sama hulk posti, kui jaamast B jaama A, siis jaotus on «Sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju posti, siis jaotus on «Asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «Väljas». STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :SOOMUSTATUD veoseliigi jaotuse viis: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Parasvöötmes on SOOMUSTATUD veoseliik väärisesemed, lähistroopikas teemandid, ning lähisartikas kuld. Neid saab lisada NewGRF-iga. Kui jaamast A viiakse jaama B umbes sama hulk kaupa, kui jaamast B jaama A, siis jaotus on «sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju kaupa, siis jaotus on «asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «väljas». Lähisartikas valida asümeetriline või väljas, sest pankadest kulda tagasi ei tule. Parasvöötmes ja lähistroopikas on võimalik valida ka sümeetriline, sest pangad saadavad lähtepanka väärisesemed tagasi. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Parasvöötmes on SOOMUSTATUD veoseliik väärisesemed, lähistroopikas teemandid, ning lähisartikas kuld. Neid saab lisada NewGRF-iga. Kui jaamast A viiakse jaama B umbes sama hulk kaupa, kui jaamast B jaama A, siis jaotus on «Sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju kaupa, siis jaotus on «Asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «Väljas». Lähisartikas valida asümeetriline või väljas, sest pankadest kulda tagasi ei tule. Parasvöötmes ja lähistroopikas on võimalik valida ka sümeetriline, sest pangad saadavad lähtepanka väärisesemed tagasi. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Teiste veoseliikide jaotuse viis: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Kui jaamast A viiakse jaama B umbes sama hulk kaupa, kui jaamast B jaama A, siis jaotus on «sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju kaupa, siis jaotus on «asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «väljas». Tavaliselt on head valikud «asümeetriline» ja «väljas». +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :Kui jaamast A viiakse jaama B umbes sama hulk kaupa, kui jaamast B jaama A, siis jaotus on «Sümeetriline». Kui mõlemas suunas viiakse ükskõik, kui palju kaupa, siis jaotus on «Asümeetriline». Kui posti liikumist ei jaotata, siis jaotus on «Väljas». Tavaliselt on head valikud «Asümeetriline» ja «Väljas». ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :väljas STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asümeetriline @@ -2132,6 +2150,7 @@ STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Ava sead STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Ava NewGRF-i seadistamine STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Otsi allalaadimiseks uusi ja uuendatud aineseid STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Näita TI seadeid +STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Näita GameSript'i seadeid STR_INTRO_TOOLTIP_QUIT :{BLACK}Välju 'OpenTTD'st STR_INTRO_BASESET :{BLACK}Hetkel valitud lähtegraafikakogust puudub {NUM} sprite{P "" 'i}. Kontrolli, kas lähtekogule on uuendusi. @@ -2296,6 +2315,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Serveri STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kutse kood: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Aeg alguses: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Aeg hetkel: {WHITE}{DATE_SHORT} +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}GameScript: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Kaitstud salasõnaga! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVER ON MAAS STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}SERVER ON TÄIS @@ -2313,7 +2333,7 @@ STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Internet STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Otsing LANis STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Kohtvõrgus serverite otsimine STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Sisesta server -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Sisesta loendisse uus server, milles toimuvaid mänge jälgida +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Lisab loendisse uue serveri. See võib olla kas serveri aadress või kutse kood STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Tee server STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Tee oma server @@ -2367,7 +2387,7 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Ühendatud män STR_NETWORK_COMPANY_LIST_SPECTATE :Vaatle # Network client list -STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Mitmikmäng +STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Võrgumäng STR_NETWORK_CLIENT_LIST_SERVER :{BLACK}Server STR_NETWORK_CLIENT_LIST_SERVER_NAME :{BLACK}Nimi STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Serveri nimi, kus sa mängid @@ -2378,6 +2398,7 @@ STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Kas sinu STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Kutse kood STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Kutse kood, mille abil teised mängijad saavad serveriga liituda STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Ühenduse tüüp +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Kas ja kuidas saavad teised sinu serveriga ühendust STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Mängija STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Nimi STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Sinu mängija nimi @@ -2401,6 +2422,8 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} kl STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Kohalik STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Välised mängijad ei saa ühenduda STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Avalik +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}NAT'i taga +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Läbi vahendaja STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Viska välja STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Keela @@ -2413,6 +2436,7 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Kas ole STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Kas oled kindel, et tahad kustutada ettevõtte '{COMPANY}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_UNLOCK :{YELLOW}Kas oled kindel, et soovid nullida ettevõtte '{COMPANY}' salasõna? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Kasuta vahendajat? STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Ühenduse loomine sinu ja serveri '{STRING}' vahel ebaõnnestus .{}Kas sa soovid seda sesiooni vahendada läbi '{STRING}'? STR_NETWORK_ASK_RELAY_NO :{BLACK}Ei STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Jah, ainult seekord @@ -2445,11 +2469,12 @@ STR_NETWORK_CHAT_TO_COMPANY :[Team] kohta {S STR_NETWORK_CHAT_CLIENT :[Private] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_TO_CLIENT :[Private] kohta {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[All] {STRING}: {WHITE}{STRING} +STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING} STR_NETWORK_CHAT_OSKTITLE :{BLACK}Sisesta tekst võrgus suhtlemiseks # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Võrgukaarti ei leitud või kompileeritud ilma võtmeta ENABLE_NETWORK -STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Server ei vastanud päringule +STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Ühendus serveriga aegus või sellest keelduti STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Ühendus ebaõnnestus NewGRF-i sobimatuse tõttu STR_NETWORK_ERROR_DESYNC :{WHITE}Mitmikmängu sünkroonimine ebaõnnestus STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Mitmikmängu ühendus katkes @@ -2457,6 +2482,7 @@ STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Salvesta STR_NETWORK_ERROR_SERVER_START :{WHITE}Ei saa uut serverit alustada STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Tekkis protokolliviga ja ühendus katkes STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Sinu mängijale ei ole nime määratud. Nime saab määrata mitmikmägu akna ülaosas +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Sinu serverile ei ole nime antud. Nime saab määrata mitmikmägu akna ülaosas STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Kliendi osa ei vasta serveri osaga STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Vale salasõna STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Server on täis @@ -2516,18 +2542,19 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :transpordisõlm STR_NETWORK_MESSAGE_CLIENT_LEAVING :lahkub STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} liitus mänguga -STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} liitus mänguga ({2:NUM}. klient) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} liitus {2:NUM}. ettevõttega +STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} liitus mänguga ({2:NUM}. klient) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} liitus {2:NUM}. ettevõttega STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} liitus vaatlejatega -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} alustas uue ettevõtte (nr {2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} lahkus mängust ({2:STRING}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} alustas uue ettevõtte (nr {2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} lahkus mängust ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} on muutnud oma nimeks {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} saatis {2:CURRENCY_LONG} ettevõttele {1:STRING} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} saatis {2:CURRENCY_LONG} ettevõttele {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Server sulges sessiooni STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Server restardib...{}Palun oota... STR_NETWORK_MESSAGE_KICKED :*** {STRING} visati välja. Põhjendus: ({STRING}) STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Serveri registreerimine ebaõnnestus +STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Teine server registreeris end sama kutse koodiga. "Kohalikule" mängu tüübile lülitumine. STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Sinu server ei luba väliseid ühendusi STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Teised mängijad ei saa sinu serveriga ühenduda @@ -2636,6 +2663,8 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}ülekoormatud # Linkgraph tooltip +STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} transporditud kuus jaamast {STATION} jaama {STATION} ({COMMA}% kogumahust){STRING} +STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} mida transporditakse tagasi ({COMMA}% kogumahust) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Keskmine sõidukestus: {NUM}{NBSP}päev{P "" a} # Base for station construction window(s) @@ -2707,6 +2736,7 @@ STR_STATION_CLASS_WAYP :Meldepunktid # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Signaali valik +STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Lülita sisse keerukate signaalitüüpide näitamine STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Läbisõidusignaal (semafor){}Signaale läheb tarvis vältimaks kokkupõrkeid enam kui ühe rongiga rööbasteedel STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sissesõidusignaal (semafor){}Roheline, kuni vähemalt üks väljasõidusignaal on roheline. Muudel juhtudel näitab punast STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Väljasõidusignaal (semafor){}Käitub samamoodi, nagu läbisõidusignaal, kuid läheb vaja et sissesõidu- ja mitmik-hoiatussignaalid näitaksid õiget värvi @@ -2731,6 +2761,7 @@ STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Silla va STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Rippsild, terasest STR_BRIDGE_NAME_GIRDER_STEEL :Raamistikuga, terasest STR_BRIDGE_NAME_CANTILEVER_STEEL :Konsool, terasest @@ -2833,12 +2864,12 @@ STR_STATION_BUILD_NOISE :{BLACK}Tekitatu STR_LANDSCAPING_TOOLBAR :{WHITE}Maastik STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Maapinna madaldamine. Hiirega lohistades langetatakse esimesena valitud punkt ja ülejäänud ala tasandatakse vastavalt selle kõrgusele. Ctrl valib ala diagonaalselt. Shift valib ehitamise/hinna kuvamise režiimi STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Maapinna kõrgendamine. Hiirega lohistades tõstetakse esimesena valitud punkti ja tasandatakse ülejäänud ala selle järgi. Ctrl valib ala diagonaalselt. Shift valib ehitamise/hinna kuvamise režiimi -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Tasanda maapinda esimesena valitud punkti kõrgusel. Ctrl valib piirkonna diagonaalselt. Shift valib ehitamise/hinna kuvamise režiimi -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Maa ostmine tulevaseks kasutamiseks. Shift valib ehitamise/eeldatava maksumuse kuvamise režiimi +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Tasanda maapinda esimesena valitud punkti kõrgusel. Ctrl valib ala diagonaalselt. Shift valib ehitamise/hinna kuvamise režiimi +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Maa ostmine tulevaseks kasutamiseks. Shift valib ehitamise/eeldatava maksumuse kuvamise režiimi vahel # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objekti valik -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vali ehitatav objekt. Shift valib ehitamise/hinna kuvamise režiimi +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Vali ehitatav objekt. Ctrl valib ala diagonaaliti. Shift valib ehitamise/hinna kuvamise režiimi vahel STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Vali ehitatava objekti järk STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objekti eelvaade STR_OBJECT_BUILD_SIZE :{BLACK}Suurus: {GOLD}{NUM} x {NUM} ruutu @@ -2850,7 +2881,7 @@ STR_OBJECT_CLASS_TRNS :Saatejaamad STR_PLANT_TREE_CAPTION :{WHITE}Puud STR_PLANT_TREE_TOOLTIP :{BLACK}Vali istutatava puu liik. Kui ruudus juba on puu, siis lisatakse rohkem eri liikide puid, olenemata valikust STR_TREES_RANDOM_TYPE :{BLACK}Suvalised puutüübid -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Istutab suvalisi puid. Shift valib ehitamise/hinna kuvamise režiimi +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Istutab suvalisi puid. Ctrl valib ala diagonaaliti. Shift valib ehitamise/hinna kuvamise režiimi vahel STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Suvalised puud STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Istutab puid suvaliselt üle kogu maa-ala STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Tavaline @@ -3187,6 +3218,7 @@ STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF-i STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :Näita NewGRF-i seadeid STR_MAPGEN_AI_SETTINGS :{BLACK}TI Seaded STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Näita TI seadeid +STR_MAPGEN_GS_SETTINGS :{BLACK}GameScript'i Seaded STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Näita GameSript'i seadeid ###length 21 @@ -3358,7 +3390,10 @@ STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Represen STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liiguta spraiti, muutes X ja Y tasakaalu. Ctrl+klõps, et liigutada kaheksa ühiku võrra korraga ###length 2 +STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Kõrvalekalletega tsentreerimine +STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Sprite keskne +STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Rist STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Lähtesta suhteline STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Lähtesta praegused suhtelised kõrvalekalded @@ -3374,16 +3409,18 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Hoiatus: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Viga: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Saatuslik viga: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE} NewGRF "{STRING}" väljastas raske tõrke:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF "{STRING}" on väljastanud tõrke:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :OpenTTD väitel {1:STRING} ei tööta selle TTDPatch versiooniga. -STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on {STRING} TTD osa jaoks. -STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} on mõeldud kasutamiseks {STRING} -STR_NEWGRF_ERROR_INVALID_PARAMETER :kõlbmatu «{1:STRING}» parameeter: parameeter {STRING} ({NUM}) -STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} peab olema laetud enne {STRING} -STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} peab olema laetud pärast {STRING} -STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} nõuab OpenTTD versiooni {STRING} või uuemat +STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on {2:STRING} TTD osa jaoks. +STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} on mõeldud kasutamiseks {2:STRING} +STR_NEWGRF_ERROR_INVALID_PARAMETER :kõlbmatu «{1:STRING}» parameeter: parameeter {2:STRING} ({3:NUM}) +STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} peab olema laetud enne {2:STRING} +STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} peab olema laetud pärast {2:STRING} +STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} nõuab OpenTTD versiooni {2:STRING} või uuemat STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF fail, mis tehti tõlkimiseks, STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Liiga palju NewGRF-e on laaditud -STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Laadides {1:STRING} staatilise NewGRF-na koos {STRING} võib põhjustada sünkrooni katkemist. +STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Laadides {1:STRING} staatilise NewGRF-na koos {2:STRING} võib põhjustada sünkrooni katkemist. STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Ootamatu sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Ootamatu tegevus 0 property {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Kasutati kõlbmatut ID-d («sprite» {3:NUM}) @@ -3515,14 +3552,14 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Osta monopoolse STR_LOCAL_AUTHORITY_ACTION_BRIBE :Paku kohalikule omavalitsusele altkäemaksu ###length 8 -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Pisikese kohaliku reklaamikampaania korraldamine meelitab rohkem reisijaid ja kaupu sinu veoteenuseid kasutama.{}Tõstab asulakeskuse lähiümbruses ajutiselt jaamade tegevushinnanguid.{}Maksumus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Keskmise reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{}Tõstab ajutiselt asulakeskuse ümbruses jaamade tegevushinnanguid.{}Maksumus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Suure reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{}Tõstab asulakeskuse kaugümbruses ajutiselt jaamade tegevushinnanguid.{}Maksumus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Asula teedevõrgu ümberehituse rahastamine.{}Põhjustab liikluses tõsiseid häireid kuni 6 kuuks.{}Maksumus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Oma ettevõtte auks kuju ehitamine.{}Tõstab püsivalt jaamade tegevushinnanguid selles asulas.{}Maksumus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Uute hooneehituste rahastamine selles asulas.{}Tõstab ajutiselt asula kasvutempot selles asulas.{}Maksumus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Üheks aastaks monopoolsete veoõiguste ostmine selles asulas.{}Asula omavalitsus lubab reisijate ja kauba veoks kasutada ainult sinu jaamasid.{}Maksumus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Kohalikule omavalitusele ettevõtte hinnangu tõstmise eesmärgil altkäemaksu pakkumine. Vahele jäädes tuleb trahvi maksta.{}Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Pisikese kohaliku reklaamikampaania korraldamine meelitab rohkem reisijaid ja kaupu sinu veoteenuseid kasutama.{}Tõstab asulakeskuse lähiümbruses ajutiselt jaamade tegevushinnanguid.{}{POP_COLOUR}Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :PUSH_COLOUR}{YELLOW}Keskmise reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{}Tõstab ajutiselt asulakeskuse ümbruses jaamade tegevushinnanguid.{}{POP_COLOUR}Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Suure reklaamikampaania korraldamine, et meelitada rohkem reisijaid ja kaupu sinu teenuste juurede.{}Tõstab asulakeskuse kaugümbruses ajutiselt jaamade tegevushinnanguid.{}{POP_COLOUR}Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Asula teedevõrgu ümberehituse rahastamine.{}Põhjustab liikluses tõsiseid häireid kuni 6 kuuks.{}{POP_COLOUR}Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Oma ettevõtte auks kuju ehitamine.{}Tõstab püsivalt jaamade tegevushinnanguid selles asulas.{}{POP_COLOUR}Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Uute hooneehituste rahastamine selles asulas.{}Tõstab ajutiselt asula kasvutempot selles asulas.{}{POP_COLOUR}Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Üheks aastaks monopoolsete veoõiguste ostmine selles asulas.{}Asula omavalitsus lubab reisijate ja kauba veoks kasutada ainult sinu jaamasid.{}{POP_COLOUR}Maksumus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Kohalikule omavalitusele ettevõtte hinnangu tõstmise eesmärgil altkäemaksu pakkumine. Vahele jäädes tuleb trahvi maksta.{}{POP_COLOUR}Maksumus: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} eesmärgid @@ -3677,15 +3714,16 @@ STR_FINANCES_YEAR :{WHITE}{NUM} ###length 3 STR_FINANCES_REVENUE_TITLE :{WHITE}Tulu STR_FINANCES_OPERATING_EXPENSES_TITLE :{WHITE}Opereerimiskulud +STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Kapitalikulud ###length 13 STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Ehituskulud STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Uus veerem -STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Rongide käituskulud +STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Rongid STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Maanteesõidukite käituskulud -STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Õhusõidukite käituskulud -STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Laevade käituskulud +STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Õhusõidukid +STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Laevad STR_FINANCES_SECTION_INFRASTRUCTURE :{GOLD}Taristu STR_FINANCES_SECTION_TRAIN_REVENUE :{GOLD}Rongid STR_FINANCES_SECTION_ROAD_VEHICLE_REVENUE :{GOLD}Maanteesõidukid @@ -3695,9 +3733,9 @@ STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Laenuintr STR_FINANCES_SECTION_OTHER :{GOLD}Muud STR_FINANCES_TOTAL_CAPTION :{WHITE}Kokku -STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} +STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG} STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} -STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} +STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG} STR_FINANCES_PROFIT :{WHITE}Tulu STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Kontojääk STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Omavahendid @@ -3806,7 +3844,7 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Toodab: STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Nõuab: -STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ootel{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Tootlikuse muutmine (kaheksaga jaguv, kuni 2040) @@ -3870,7 +3908,7 @@ STR_GROUP_CREATE_TOOLTIP :{BLACK}Klõpsa STR_GROUP_DELETE_TOOLTIP :{BLACK}Eemalda valitud jagu STR_GROUP_RENAME_TOOLTIP :{BLACK}Ümbernimeta valitud jagu STR_GROUP_LIVERY_TOOLTIP :{BLACK}Muuda valitud jao värvistikku -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klõpsa, et kaitsta seda jagu globaalse automaatasenduse eest +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klõpsa, et kaitsta seda jagu globaalse automaatasenduse eest. Ctrl+klõps kaitsmaks ka alamkategooriaid. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Kõrvalda jagu STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Kas oled kindel, et tahad kustutada selle grupi ja kõik järglased? @@ -4102,7 +4140,7 @@ STR_ENGINE_PREVIEW_AIRCRAFT :õhusõiduki STR_ENGINE_PREVIEW_SHIP :laeva STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Hind: {CURRENCY_LONG} Tühimass: {WEIGHT_SHORT}{}Tippkiirus: {VELOCITY} Võimsus: {POWER}{}Käituskulud: {CURRENCY_LONG}/aastas{}Kandevõime: {CARGO_LONG} -STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Hind: {CURRENCY_LONG} Tühimass: {WEIGHT_SHORT}{}Kiirus: {VELOCITY} Võimsus: {POWER} Veojõud: {6:FORCE}{}Käituskulud: {4:CURRENCY_LONG}/aasta{}Mahutavus: {5:CARGO_LONG} +STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Hind: {0:CURRENCY_LONG} Tühimass: {1:WEIGHT_SHORT}{}Kiirus: {2:VELOCITY} Võimsus: {3:POWER} Veojõud: {6:FORCE}{}Käituskulud: {4:CURRENCY_LONG}/aasta{}Mahutavus: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Kandevõime: {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Maksumus: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Õhusõiduki liik: {STRING}{}Mahutavus: {CARGO_LONG}, {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/aasta STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Õhusõiduki liik: {STRING}{}kandevõime: {CARGO_LONG}{}Käitluskulud: {CURRENCY_LONG}/a @@ -4156,6 +4194,7 @@ STR_REPLACE_MAGLEV_VEHICLES :Magnethõljukve STR_REPLACE_ROAD_VEHICLES :Maanteesõidukid STR_REPLACE_TRAM_VEHICLES :Trammid +STR_REPLACE_REMOVE_WAGON :{BLACK}Vagunite kõrvaldamine ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Automaatne asendamine hoiab rongi pikkuse samana, vajadusel kõrvaldab vaguneid (alates esiotsast), kui muidu rongikoosseis suureneks STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+klõps, et rakendada ka alamgruppidele @@ -4226,6 +4265,10 @@ STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Suundub STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Suundub {DEPOT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Järelevaatus: {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Ei leita teed jaama {STATION}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Ei leita teed sihtkohta {WAYPOINT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Ei leita teed sihtkohta {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Ei leia teed sihtkohta {DEPOT}, {VELOCITY} # Vehicle stopped/started animations ###length 2 @@ -4261,8 +4304,8 @@ STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Tehnosei STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Valmistatud: {LTBLUE}{NUM}{BLACK} Väärtus: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Mahutavus: {LTBLUE}Pole{STRING} -STR_VEHICLE_INFO_CAPACITY :{BLACK}Kandevõime: {LTBLUE}{CARGO_LONG}{3:STRING} -STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kandevõime: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) +STR_VEHICLE_INFO_CAPACITY :{BLACK}Kandevõime: {LTBLUE}{0:CARGO_LONG}{3:STRING} +STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kandevõime: {LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM}) STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kandevõime: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING} STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Ülekantud tulu: {LTBLUE}{CURRENCY_LONG} @@ -4288,8 +4331,8 @@ STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE}{BLACK} Väärtus: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Selle rongi kandevõime: -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) STR_VEHICLE_DETAILS_CARGO_EMPTY :{LTBLUE}Tühi STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_LONG} jaamast {STATION} @@ -4531,22 +4574,22 @@ STR_TIMETABLE_STARTING_DATE :{BLACK}Alguskuu STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Vali graafiku alguskuupäev. Ctrl-klõps määrab graafiku alguskuupäeva ja jaotab sõidukid ühtlaselt, kasutades järjestust, kui sihid on planeeritud STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuda aega -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuda märgitud korraldusele määratud aega +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muuda märgitud korraldusele määratud aega. Ctrl+klõps seab aja kõigile korraldustele STR_TIMETABLE_CLEAR_TIME :{BLACK}Tühista aeg -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Tühista korralduse täitmiseks määratud aeg +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Tühista korralduse täitmiseks määratud aeg. Ctrl+klõps tühistab kõik korraldustele määratud ajad STR_TIMETABLE_CHANGE_SPEED :{BLACK}Muuda kiiruspiirangut -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Muuda märgitud korralduse kiiruspiirangut +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Muuda märgitud korralduse kiiruspiirangut. Ctrl+klõps seab kiiruspiirangu kõigile korraldustele STR_TIMETABLE_CLEAR_SPEED :{BLACK}Kustuta kiiruspiirang -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Eemalda märgitud korralduse kiiruspiirang +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Eemalda märgitud korralduse kiiruspiirang. Ctrl+klõps tühistab kõik korraldustele määratud kiiruspiirangud STR_TIMETABLE_RESET_LATENESS :{BLACK}Nulli hilinemisarvesti STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Nulli hilinemisarvesti, nii et sõiduk oleks graafikus STR_TIMETABLE_AUTOFILL :{BLACK}Isetäituv -STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Kasuta liiniplaani täitmiseks järgmise sõidu andmeid (Ctrl+klõps säilitab ooteajad) +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Kasuta liiniplaani täitmiseks järgmise sõidu andmeid. Ctrl+klõps proovib säilitab ooteajad STR_TIMETABLE_EXPECTED :{BLACK}Eeldatav STR_TIMETABLE_SCHEDULED :{BLACK}Plaanis @@ -4608,7 +4651,7 @@ STR_AI_CONFIG_GAMESCRIPT :{SILVER}GameScr STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Parameetrid STR_AI_CONFIG_AI :{SILVER}AI-d -STR_AI_CONFIG_CHANGE_AI :AI +STR_AI_CONFIG_CHANGE_AI :{BLACK} Vali TI STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK} Vali GameScript STR_AI_CONFIG_CHANGE_GAMESCRIPT.g :GameScripti STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Lae teine skript @@ -4639,6 +4682,7 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Kõrgusk STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pisikaardi ekraanipilt # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameetrid STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CAPTION_GAMESCRIPT :GameScript STR_AI_SETTINGS_CLOSE :{BLACK}Sulge @@ -4819,6 +4863,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... mets STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... saab ehitada ainult ülespoole lumepiiri STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... saab ehitada ainult allapoole lumepiiri +STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Halva õnne tõttu ei viinud rahastus tööstuse rajamiseni; proovi uuesti STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Antud tööstusele ei leitud perspektiivikat asukohta STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE} '{STRING}' tööstuste jaoks polnud sobivaid asukohti STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Muuda kaardigeneratsiooni parameetreid, et saada parem kaart @@ -5060,6 +5105,7 @@ STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Hooldusv STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... sõiduk hävitatud +STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... kõik sõidukid ei ole identsed STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Ühtegi sõidukit ei ole saadaval STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuda NewGRF-i seadistust @@ -5088,6 +5134,7 @@ STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}sõiduk STR_ERROR_CAN_T_ADD_ORDER :{WHITE}sõiduk ei saa antud jaama minna STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... seda korraldust jagav sõiduk ei saa sinna jaama minna STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... kõigil sõidukitel ei ole ühesugused korraldused +STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... mitte kõik sõidukid ei jaga korraldusi STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Sihtpunktide nimekirja ei saa jagada... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Korralduste jagamist ei saa peatada... diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 86d4049192..3e32292780 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3352,6 +3352,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Varoitus: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Virhe: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Virhe: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF ”{STRING}” on kohdannut vakavan virheen:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF ”{STRING}” on kohdannut virheen:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ei toimi OpenTTD:n ilmoittaman TTDPatch-version kanssa STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} on TTD:n {2:STRING}-versiota varten STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} on suunniteltu toimimaan lisäosan {2:STRING} kanssa @@ -4599,9 +4601,9 @@ STR_AI_CONFIG_CONFIGURE :{BLACK}Määrit STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Määritä skriptin parametrit # Available AIs window -STR_AI_LIST_CAPTION :{WHITE}Saatavilla {STRING} -STR_AI_LIST_CAPTION_AI :Tekoälyt -STR_AI_LIST_CAPTION_GAMESCRIPT :Peliskriptit +STR_AI_LIST_CAPTION :{WHITE}Saatavilla olevat {STRING} +STR_AI_LIST_CAPTION_AI :tekoälyt +STR_AI_LIST_CAPTION_GAMESCRIPT :peliskriptit STR_AI_LIST_TOOLTIP :{BLACK}Napsauta valitaksesi skriptin STR_AI_LIST_AUTHOR :{LTBLUE}Tekijä: {ORANGE}{STRING} @@ -4622,7 +4624,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Korkeusk STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pienoiskartan kuvakaappaus # Script Parameters -STR_AI_SETTINGS_CAPTION_AI :{WHITE}Tekoälyn parametrit +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrit +STR_AI_SETTINGS_CAPTION_AI :Tekoäly +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Peliskripti STR_AI_SETTINGS_CLOSE :{BLACK}Sulje STR_AI_SETTINGS_RESET :{BLACK}Palauta STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index b63fd67555..f0ffd90345 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3732,6 +3732,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Ostrzeżenie: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Błąd: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Błąd krytyczny: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF „{STRING}” zwrócił błąd krytyczny:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF „{STRING}” zwrócił błąd:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nie zadziała z wersją TTDPatcha zgłoszoną przez OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} jest przeznaczony dla TTD w wersji {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} jest zaprojektowany do użycia z {2:STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index a717d6f784..1cb674a9e6 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3353,6 +3353,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Aviso: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Erro: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}O NewGRF "{STRING}" retornou um erro fatal:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}O NewGRF "{STRING}" retornou um erro fatal:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} não funciona com a versão do TTDPatch reportada por OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} é para a versão {2:STRING} do TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} foi concebido para ser usado com {2:STRING} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 0bfe871258..1ace894e34 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3352,6 +3352,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Atenţie: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Eroare: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF-ul "{STRING}" a avut o eroare fatală:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF-ul "{STRING}" a avut o eroare:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} nu va funcţiona cu versiunea TTDPatch raportată de OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} este pentru versiunea {2:STRING} a TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} este conceput pentru a fi folosit cu {2:STRING} From 6b99b6672e9f7d2c2edcc002d92834a7395aad01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Fri, 10 Feb 2023 19:55:59 +0100 Subject: [PATCH 37/42] Fix: [Script] ScriptBase::Rand() return value was between -MIN(int32) and MAX(int32) (#10443) Also ensure the parameters for ScriptBase::RandRange() and ScriptBase::Chance() are in [0-MAX(uint32)] range --- regression/regression/result.txt | 150 +++++++++++++++---------------- src/script/api/script_base.cpp | 15 ++-- src/script/api/script_base.hpp | 18 ++-- 3 files changed, 96 insertions(+), 87 deletions(-) diff --git a/regression/regression/result.txt b/regression/regression/result.txt index 7ce9550599..13a770a8aa 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -88,9 +88,9 @@ abs( 21): 21 --AIBase-- - Rand(): -2062310602 - Rand(): -1780331126 - Rand(): -397928569 + Rand(): 2232656694 + Rand(): 2514636170 + Rand(): 3897038727 RandRange(0): 0 RandRange(0): 0 RandRange(0): 0 @@ -421,36 +421,36 @@ 1099 => 46158 Randomize ListDump: 1 => 688298322 - 2 => -1709546982 + 2 => 2585420314 1000 => 1701392078 - 1001 => -1630848421 - 1002 => -886500935 - 1003 => -196324972 - 1004 => -436037402 - 1005 => -520341784 - 1006 => -1485224804 - 1007 => -311036236 - 1008 => -1503442439 - 1009 => -110945695 - 1010 => -82825175 + 1001 => 2664118875 + 1002 => 3408466361 + 1003 => 4098642324 + 1004 => 3858929894 + 1005 => 3774625512 + 1006 => 2809742492 + 1007 => 3983931060 + 1008 => 2791524857 + 1009 => 4184021601 + 1010 => 4212142121 1011 => 46859773 - 1012 => -1199223018 - 1013 => -1190555925 + 1012 => 3095744278 + 1013 => 3104411371 1014 => 326384434 1015 => 1486817960 - 1016 => -1411425597 - 1017 => -508426854 + 1016 => 2883541699 + 1017 => 3786540442 1018 => 820019294 1019 => 710762995 - 1020 => -760867032 - 1021 => -709611146 + 1020 => 3534100264 + 1021 => 3585356150 1022 => 732190215 1023 => 236336673 1024 => 740596257 1025 => 1135321785 1026 => 2067474156 - 1027 => -1395683607 - 1028 => -240528699 + 1027 => 2899283689 + 1028 => 4054438597 1029 => 928616892 1030 => 1712486685 1031 => 1994118287 @@ -462,46 +462,46 @@ 1037 => 1359697121 1038 => 1888433963 1039 => 941623020 - 1040 => -1925663292 - 1041 => -771540264 - 1042 => -1058341359 + 1040 => 2369304004 + 1041 => 3523427032 + 1042 => 3236625937 1043 => 182127597 1044 => 646955927 - 1045 => -1424621714 + 1045 => 2870345582 1046 => 623062612 - 1047 => -1986955586 - 1048 => -1268826980 - 1049 => -456776220 - 1051 => -1112555329 - 1052 => -1532134052 + 1047 => 2308011710 + 1048 => 3026140316 + 1049 => 3838191076 + 1051 => 3182411967 + 1052 => 2762833244 1053 => 1960404034 1054 => 1573325453 - 1055 => -316619303 + 1055 => 3978347993 1056 => 699712177 1057 => 863274966 1058 => 1728276475 - 1059 => -246695889 + 1059 => 4048271407 1060 => 1919485436 1061 => 111273464 1062 => 125435213 1063 => 155132602 - 1064 => -171674076 + 1064 => 4123293220 1065 => 655046914 1066 => 1577399562 1067 => 1028818150 1068 => 447058239 - 1069 => -1057920269 - 1070 => -1326215323 - 1071 => -198688588 + 1069 => 3237047027 + 1070 => 2968751973 + 1071 => 4096278708 1072 => 1523643051 1073 => 231373233 1074 => 1121759962 1075 => 1449439846 - 1076 => -1615270753 - 1077 => -1509293864 + 1076 => 2679696543 + 1077 => 2785673432 1078 => 2116903943 1079 => 672822173 - 1080 => -969573911 + 1080 => 3325393385 1081 => 1589904755 1082 => 1148782015 1083 => 663503316 @@ -510,54 +510,54 @@ 1086 => 402172048 1087 => 1812250453 1088 => 667300501 - 1089 => -1838825777 - 1090 => -856474776 + 1089 => 2456141519 + 1090 => 3438492520 1091 => 420696035 1092 => 2131427774 - 1093 => -435303548 - 1094 => -160883878 + 1093 => 3859663748 + 1094 => 4134083418 1095 => 1969629634 - 1096 => -555794155 - 1097 => -835119691 - 1098 => -1460907909 - 1099 => -1146924084 + 1096 => 3739173141 + 1097 => 3459847605 + 1098 => 2834059387 + 1099 => 3148043212 KeepTop(10): 1 => 688298322 - 2 => -1709546982 + 2 => 2585420314 1000 => 1701392078 - 1001 => -1630848421 - 1002 => -886500935 - 1003 => -196324972 - 1004 => -436037402 - 1005 => -520341784 - 1006 => -1485224804 - 1007 => -311036236 + 1001 => 2664118875 + 1002 => 3408466361 + 1003 => 4098642324 + 1004 => 3858929894 + 1005 => 3774625512 + 1006 => 2809742492 + 1007 => 3983931060 KeepBottom(8): 1000 => 1701392078 - 1001 => -1630848421 - 1002 => -886500935 - 1003 => -196324972 - 1004 => -436037402 - 1005 => -520341784 - 1006 => -1485224804 - 1007 => -311036236 + 1001 => 2664118875 + 1002 => 3408466361 + 1003 => 4098642324 + 1004 => 3858929894 + 1005 => 3774625512 + 1006 => 2809742492 + 1007 => 3983931060 RemoveBottom(2): 1000 => 1701392078 - 1001 => -1630848421 - 1002 => -886500935 - 1003 => -196324972 - 1004 => -436037402 - 1005 => -520341784 + 1001 => 2664118875 + 1002 => 3408466361 + 1003 => 4098642324 + 1004 => 3858929894 + 1005 => 3774625512 RemoveTop(2): - 1002 => -886500935 - 1003 => -196324972 - 1004 => -436037402 - 1005 => -520341784 + 1002 => 3408466361 + 1003 => 4098642324 + 1004 => 3858929894 + 1005 => 3774625512 RemoveList({1003, 1004}): - 1002 => -886500935 - 1005 => -520341784 + 1002 => 3408466361 + 1005 => 3774625512 KeepList({1003, 1004, 1005}): - 1005 => -520341784 + 1005 => 3774625512 AddList({1005, 4000, 4001, 4002}): 1005 => 1005 4000 => 8000 diff --git a/src/script/api/script_base.cpp b/src/script/api/script_base.cpp index 52946520a2..ab5dd848bc 100644 --- a/src/script/api/script_base.cpp +++ b/src/script/api/script_base.cpp @@ -13,33 +13,36 @@ #include "../../safeguards.h" -/* static */ uint32 ScriptBase::Rand() +/* static */ SQInteger ScriptBase::Rand() { return ScriptObject::GetRandomizer().Next(); } -/* static */ uint32 ScriptBase::RandItem(int unused_param) +/* static */ SQInteger ScriptBase::RandItem(SQInteger unused_param) { return ScriptBase::Rand(); } -/* static */ uint ScriptBase::RandRange(uint max) +/* static */ SQInteger ScriptBase::RandRange(SQInteger max) { + max = Clamp(max, 0, UINT32_MAX); return ScriptObject::GetRandomizer().Next(max); } -/* static */ uint32 ScriptBase::RandRangeItem(int unused_param, uint max) +/* static */ SQInteger ScriptBase::RandRangeItem(SQInteger unused_param, SQInteger max) { return ScriptBase::RandRange(max); } -/* static */ bool ScriptBase::Chance(uint out, uint max) +/* static */ bool ScriptBase::Chance(SQInteger out, SQInteger max) { + out = Clamp(out, 0, UINT32_MAX); + max = Clamp(max, 0, UINT32_MAX); EnforcePrecondition(false, out <= max); return ScriptBase::RandRange(max) < out; } -/* static */ bool ScriptBase::ChanceItem(int unused_param, uint out, uint max) +/* static */ bool ScriptBase::ChanceItem(SQInteger unused_param, SQInteger out, SQInteger max) { return ScriptBase::Chance(out, max); } diff --git a/src/script/api/script_base.hpp b/src/script/api/script_base.hpp index 4184e79d69..3b0422a7e2 100644 --- a/src/script/api/script_base.hpp +++ b/src/script/api/script_base.hpp @@ -25,50 +25,56 @@ public: * Get a random value. * @return A random value between 0 and MAX(uint32). */ - static uint32 Rand(); + static SQInteger Rand(); /** * Get a random value. * @param unused_param This parameter is not used, but is needed to work with lists. * @return A random value between 0 and MAX(uint32). */ - static uint32 RandItem(int unused_param); + static SQInteger RandItem(SQInteger unused_param); /** * Get a random value in a range. * @param max The first number this function will never return (the maximum it returns is max - 1). + * The value will be clamped to 0 .. MAX(uint32). * @return A random value between 0 .. max - 1. */ - static uint RandRange(uint max); + static SQInteger RandRange(SQInteger max); /** * Get a random value in a range. * @param unused_param This parameter is not used, but is needed to work with lists. * @param max The first number this function will never return (the maximum it returns is max - 1). + * The value will be clamped to 0 .. MAX(uint32). * @return A random value between 0 .. max - 1. */ - static uint RandRangeItem(int unused_param, uint max); + static SQInteger RandRangeItem(SQInteger unused_param, SQInteger max); /** * Returns approximately 'out' times true when called 'max' times. * After all, it is a random function. * @param out How many times it should return true. + * The value will be clamped to 0 .. MAX(uint32). * @param max Out of this many times. + * The value will be clamped to 0 .. MAX(uint32). * @pre \a out is at most equal to \a max. * @return True if the chance worked out. */ - static bool Chance(uint out, uint max); + static bool Chance(SQInteger out, SQInteger max); /** * Returns approximately 'out' times true when called 'max' times. * After all, it is a random function. * @param unused_param This parameter is not used, but is needed to work with lists. * @param out How many times it should return true. + * The value will be clamped to 0 .. MAX(uint32). * @param max Out of this many times. + * The value will be clamped to 0 .. MAX(uint32). * @pre \a out is at most equal to \a max. * @return True if the chance worked out. */ - static bool ChanceItem(int unused_param, uint out, uint max); + static bool ChanceItem(SQInteger unused_param, SQInteger out, SQInteger max); }; #endif /* SCRIPT_BASE_HPP */ From 43ce73db86fb5995f1c5dca51b94a744f5a6af08 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Thu, 9 Feb 2023 18:51:58 +0000 Subject: [PATCH 38/42] Fix: [Script] Use Money instead of int32 for presenting the value of a company to AIs --- src/company_cmd.cpp | 2 +- src/script/api/script_event_types.hpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 7432bde65b..8e07dd7162 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -703,7 +703,7 @@ static void HandleBankruptcyTakeover(Company *c) c->bankrupt_timeout = TAKE_OVER_TIMEOUT; if (best->is_ai) { - AI::NewEvent(best->index, new ScriptEventCompanyAskMerger(c->index, ClampToI32(c->bankrupt_value))); + AI::NewEvent(best->index, new ScriptEventCompanyAskMerger(c->index, c->bankrupt_value)); } else if (IsInteractiveCompany(best->index)) { ShowBuyCompanyDialog(c->index); } diff --git a/src/script/api/script_event_types.hpp b/src/script/api/script_event_types.hpp index 5431fcf1ee..161ad4d8ae 100644 --- a/src/script/api/script_event_types.hpp +++ b/src/script/api/script_event_types.hpp @@ -381,7 +381,7 @@ public: * @param owner The company that can be bought. * @param value The value/costs of buying the company. */ - ScriptEventCompanyAskMerger(Owner owner, int32 value) : + ScriptEventCompanyAskMerger(Owner owner, Money value) : ScriptEvent(ET_COMPANY_ASK_MERGER), owner((ScriptCompany::CompanyID)owner), value(value) @@ -406,7 +406,7 @@ public: * Get the value of the new company. * @return The value of the new company. */ - int32 GetValue() { return this->value; } + Money GetValue() { return this->value; } /** * Take over the company for this merger. @@ -416,7 +416,7 @@ public: private: ScriptCompany::CompanyID owner; ///< The company that is in trouble. - int32 value; ///< The value of the company, i.e. the amount you would pay. + Money value; ///< The value of the company, i.e. the amount you would pay. }; /** From 231935fccdb28046c5d6b018067e8f4237130a1a Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Fri, 10 Feb 2023 11:31:40 +0000 Subject: [PATCH 39/42] Change: Show buy company dialog window even when playing in the AI company --- src/company_cmd.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 8e07dd7162..3dcc2bd570 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -702,9 +702,9 @@ static void HandleBankruptcyTakeover(Company *c) SetBit(c->bankrupt_asked, best->index); c->bankrupt_timeout = TAKE_OVER_TIMEOUT; - if (best->is_ai) { - AI::NewEvent(best->index, new ScriptEventCompanyAskMerger(c->index, c->bankrupt_value)); - } else if (IsInteractiveCompany(best->index)) { + + AI::NewEvent(best->index, new ScriptEventCompanyAskMerger(c->index, c->bankrupt_value)); + if (IsInteractiveCompany(best->index)) { ShowBuyCompanyDialog(c->index); } } From 35ad964c6bc1164ab9951bd5ac47ba5206cbe9a6 Mon Sep 17 00:00:00 2001 From: "Bilongozhko, Serhii (Contractor)" Date: Fri, 10 Feb 2023 13:29:29 -0500 Subject: [PATCH 40/42] Feature: Ctrl+Click to reset late counter for the entire vehicle group. --- src/lang/english.txt | 2 +- src/timetable_cmd.cpp | 22 +++++++++++++++++++--- src/timetable_cmd.h | 2 +- src/timetable_gui.cpp | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 4a9786b53a..ef80b11ac5 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4529,7 +4529,7 @@ STR_TIMETABLE_CLEAR_SPEED :{BLACK}Clear Sp STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Clear the maximum travel speed of the highlighted order. Ctrl+Click clears the speed for all orders STR_TIMETABLE_RESET_LATENESS :{BLACK}Reset Late Counter -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time. Ctrl+Click will reset the entire group so the latest vehicle will be on time and all others will be early STR_TIMETABLE_AUTOFILL :{BLACK}Autofill STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Fill the timetable automatically with the values from the next journey. Ctrl+Click to try to keep waiting times diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index a1f4ea4ebe..09106c418f 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -211,9 +211,10 @@ CommandCost CmdBulkChangeTimetable(DoCommandFlag flags, VehicleID veh, ModifyTim * Clear the lateness counter to make the vehicle on time. * @param flags Operation to perform. * @param veh Vehicle with the orders to change. + * @param apply_to_group Set to reset the late counter for all vehicles sharing the orders. * @return the cost of this operation or an error */ -CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh) +CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh, bool apply_to_group) { Vehicle *v = Vehicle::GetIfValid(veh); if (v == nullptr || !v->IsPrimaryVehicle() || v->orders == nullptr) return CMD_ERROR; @@ -222,8 +223,23 @@ CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh) if (ret.Failed()) return ret; if (flags & DC_EXEC) { - v->lateness_counter = 0; - SetWindowDirty(WC_VEHICLE_TIMETABLE, v->index); + if (apply_to_group) { + int32 most_late = 0; + for (Vehicle *u = v->FirstShared(); u != nullptr; u = u->NextShared()) { + if (u->lateness_counter > most_late) { + most_late = u->lateness_counter; + } + } + if (most_late > 0) { + for (Vehicle *u = v->FirstShared(); u != nullptr; u = u->NextShared()) { + u->lateness_counter -= most_late; + SetWindowDirty(WC_VEHICLE_TIMETABLE, u->index); + } + } + } else { + v->lateness_counter = 0; + SetWindowDirty(WC_VEHICLE_TIMETABLE, v->index); + } } return CommandCost(); diff --git a/src/timetable_cmd.h b/src/timetable_cmd.h index 7be7982320..73b518f4dd 100644 --- a/src/timetable_cmd.h +++ b/src/timetable_cmd.h @@ -14,7 +14,7 @@ CommandCost CmdChangeTimetable(DoCommandFlag flags, VehicleID veh, VehicleOrderID order_number, ModifyTimetableFlags mtf, uint16 data); CommandCost CmdBulkChangeTimetable(DoCommandFlag flags, VehicleID veh, ModifyTimetableFlags mtf, uint16 data); -CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh); +CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh, bool apply_to_group); CommandCost CmdAutofillTimetable(DoCommandFlag flags, VehicleID veh, bool autofill, bool preserve_wait_time); CommandCost CmdSetTimetableStart(DoCommandFlag flags, VehicleID veh_id, bool timetable_all, Date start_date); diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index c76148dd07..8e0252a333 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -600,7 +600,7 @@ struct TimetableWindow : Window { } case WID_VT_RESET_LATENESS: // Reset the vehicle's late counter. - Command::Post(STR_ERROR_CAN_T_TIMETABLE_VEHICLE, v->index); + Command::Post(STR_ERROR_CAN_T_TIMETABLE_VEHICLE, v->index, _ctrl_pressed); break; case WID_VT_AUTOFILL: { // Autofill the timetable. From a2c8168924e95a142960b16dbbfd4b7a5f2bc045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sat, 11 Feb 2023 12:32:45 +0100 Subject: [PATCH 41/42] Fix #10465: Delay closing of network join progress window (#10466) --- src/network/network_client.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index da434ad952..7abd18d6a1 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -223,7 +223,9 @@ void ClientNetworkGameSocketHandler::ClientError(NetworkRecvStatus res) ClientNetworkEmergencySave(); } - _switch_mode = SM_MENU; + CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); + + if (_game_mode != GM_MENU) _switch_mode = SM_MENU; _networking = false; } @@ -531,7 +533,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *p) { /* We try to join a server which is full */ ShowErrorMessage(STR_NETWORK_ERROR_SERVER_FULL, INVALID_STRING_ID, WL_CRITICAL); - CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); return NETWORK_RECV_STATUS_SERVER_FULL; } @@ -540,7 +541,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet * { /* We try to join a server where we are banned */ ShowErrorMessage(STR_NETWORK_ERROR_SERVER_BANNED, INVALID_STRING_ID, WL_CRITICAL); - CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); return NETWORK_RECV_STATUS_SERVER_BANNED; } @@ -647,8 +647,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p /* Perform an emergency save if we had already entered the game */ if (this->status == STATUS_ACTIVE) ClientNetworkEmergencySave(); - CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); - return NETWORK_RECV_STATUS_SERVER_ERROR; } @@ -817,7 +815,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet this->last_packet = std::chrono::steady_clock::now(); if (!load_success) { - CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); ShowErrorMessage(STR_NETWORK_ERROR_SAVEGAMEERROR, INVALID_STRING_ID, WL_CRITICAL); return NETWORK_RECV_STATUS_SAVEGAME; } From 09f7f32b8d85ea378984908b6a29764d8576284e Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 11 Feb 2023 18:44:57 +0000 Subject: [PATCH 42/42] Update: Translations from eints ukrainian: 2 changes by serg-bloim --- src/lang/ukrainian.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 226c3037a8..eb3aac208b 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -4747,7 +4747,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Знят STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Зняток мінімапи # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Налаштування STR_AI_SETTINGS_CAPTION_AI :{WHITE}Параметри ШІ +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Ігровий Скрипт STR_AI_SETTINGS_CLOSE :{BLACK}Закрити STR_AI_SETTINGS_RESET :{BLACK}Скидання STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}