1
0
Fork 0

Compare commits

..

No commits in common. "e28edf6945ecc3d58803a7f7d2937077566cb603" and "232151788ddf45b55db0f2ea0322e732ddbd31ce" have entirely different histories.

83 changed files with 54 additions and 474 deletions

View File

@ -42,14 +42,14 @@ template <> const char *GetClassName<AIInfo, ScriptType::AI>() { return "AIInfo"
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddSetting, "AddSetting");
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddLabels, "AddLabels");
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_NONE");
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_RANDOM"); // Deprecated, mapped to NONE.
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_RANDOM, "CONFIG_RANDOM");
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_BOOLEAN, "CONFIG_BOOLEAN");
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_INGAME, "CONFIG_INGAME");
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_DEVELOPER, "CONFIG_DEVELOPER");
/* Pre 1.2 had an AI prefix */
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "AICONFIG_NONE");
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "AICONFIG_RANDOM"); // Deprecated, mapped to NONE.
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_RANDOM, "AICONFIG_RANDOM");
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_BOOLEAN, "AICONFIG_BOOLEAN");
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_INGAME, "AICONFIG_INGAME");

View File

@ -836,21 +836,17 @@ static void CompaniesPayInterest()
/* Over a year the paid interest should be "loan * interest percentage",
* but... as that number is likely not dividable by 12 (pay each month),
* one needs to account for that in the monthly fee calculations.
*
* To easily calculate what one should pay "this" month, you calculate
* what (total) should have been paid up to this month and you subtract
* whatever has been paid in the previous months. This will mean one month
* it'll be a bit more and the other it'll be a bit less than the average
* monthly fee, but on average it will be exact.
*
* In order to prevent cheating or abuse (just not paying interest by not
* taking a loan) we make companies pay interest on negative cash as well,
* except if infinite money is enabled.
* taking a loan we make companies pay interest on negative cash as well
*/
Money yearly_fee = c->current_loan * _economy.interest_rate / 100;
Money available_money = GetAvailableMoney(c->index);
if (available_money < 0) {
yearly_fee += -available_money * _economy.interest_rate / 100;
if (c->money < 0) {
yearly_fee += -c->money *_economy.interest_rate / 100;
}
Money up_to_previous_month = yearly_fee * TimerGameEconomy::month / 12;
Money up_to_this_month = yearly_fee * (TimerGameEconomy::month + 1) / 12;

View File

@ -40,7 +40,7 @@ template <> const char *GetClassName<GameInfo, ScriptType::GS>() { return "GSInf
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddSetting, "AddSetting");
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddLabels, "AddLabels");
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_NONE");
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_RANDOM"); // Deprecated, mapped to NONE.
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_RANDOM, "CONFIG_RANDOM");
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_BOOLEAN, "CONFIG_BOOLEAN");
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_INGAME, "CONFIG_INGAME");
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_DEVELOPER, "CONFIG_DEVELOPER");

View File

@ -1334,7 +1334,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :As dit geaktive
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Outohernuwe voertuig as hy oud raak: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :As dit geaktiveer is, word 'n voertuig wat naby die einde van sy werkslewe kom outomaties vervang, wanneer die hernu voorwaardes vervul is.

View File

@ -1269,7 +1269,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :المركبا
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :جدد العربات عندما تصبح قديمة : {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :عند التمكين ، يتم استبدال العربة التي اقتربت من نهاية عمرها عند اكتمال شروط التجديد

View File

@ -1290,7 +1290,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Gaitua dagoenea
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Ibilgailu bat zahartzen denean automatikoki berritu: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Gaitua dagoenean, Ibilgailuek bere lan-bizitza amaitzear dutenean eta beharrezko baldintzak betetzen badira automatikoki berrituko dira

View File

@ -1646,7 +1646,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Калі ўкл
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Аўтазамена старых транспартных сродкаў: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Калі ўключана, транспарт напрыканцы свайго пэўнага тэрміна службы будзе аўтаматычна заменены, калі ўмовы замены будуць выкананыя.

View File

@ -836,7 +836,6 @@ STR_STATUSBAR_AUTOSAVE :{RED}Salvo Auto
STR_STATUSBAR_SAVING_GAME :{RED}* * SALVANDO JOGO * *
STR_STATUSBAR_SPECTATOR :{WHITE}(espectador)
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(dinheiro infinito)
# News message history
STR_MESSAGE_HISTORY :{WHITE}Histórico de Mensagens
@ -1289,8 +1288,6 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}segundo{P 0 "" s}
STR_CONFIG_SETTING_INFINITE_MONEY :Dinheiro infinito: {STRING}
STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Permitir gastos sem limite e desabilitar falência das companhias
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)
@ -1525,7 +1522,6 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tempo do calendário congelado)
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Auto-renovação de veículos quando ficam velhos: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Quando ativado, os veículos próximos do fim da vida útil são automaticamente substituídos quando as condições forem atingidas
@ -1944,7 +1940,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Ao arrastar, co
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Define a distância a cada qual sinais serão construídos até o próximo obstáculo (sinal, intersecção), ao clicar e arrastar sinais
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} quadrado{P "" s}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Ao arrastar, manter distância fixa entre os sinais: {STRING}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecione o comportamento da colocação de sinais ao usar Ctrl+Arrastar. Se desativado, sinais são colocados ao redor de túneis ou pontes para evitar trechos longos sem sinais. Se ativado, sinais são colocados a cada N quadrados, facilitando o alinhamento de sinais em linhas paralelas
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecione o comportamento da construção de sinais ao Ctrl+Arrastar. Se desativado, sinais são colocados ao redor de túneis ou pontes para evitar trechos compridos sem sinalização. Se ativado, sinais são colocados a cada N quadrados, tornando o alinhamento de sinais em trilhos paralelos mais fácil
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Construir sinaleiros até: {STRING}
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Seleciona o ano a partir do qual semáforos substituirão sinais. Antes desse ano, serão utilizados sinais de placa (diferença puramente estética)
@ -2398,7 +2394,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Tamanho
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Tamanho do mapa do jogo{}Clique para exibir por área
STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}Data
STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Data atual
STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}min
STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}m
STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Tempo de jogo
STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Tempo jogando enquanto{}o jogo não estava pausado
STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Idioma, versão do servidor, etc.
@ -2416,7 +2412,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}IP do s
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Código de convite: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Data de inicio: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Data atual: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Tempo de jogo: {WHITE}{NUM}h {NUM}min
STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Tempo de jogo: {WHITE}{NUM}h {NUM}m
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Script de jogo: {WHITE}{STRING} (v{NUM})
STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Protegido por senha!
STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVIDOR DESLIGADO
@ -2809,7 +2805,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construi
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito de trem (para aquisição e manutenção de trens). Pressionar Shift mostra o custo estimado
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir ponto de controle na ferrovia. Ctrl+Clique para selecionar outro ponto de controle e unir com esse. Pressionar Shift mostra o custo estimado
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl+Clique para selecionar outra estação e unir com essa. Pressionar Shift mostra o custo estimado
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinal na ferrovia. Ctrl+Clique para construir o sinal com estilo diferente{}Clique+Arraste para preencher a seção selecionada da ferrovia com os sinais no espaçamento escolhido. Ctrl+Clique+Arraste para colocar sinais até a próxima junção, estação ou sinal. Pressionar Shift mostra o custo estimado
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Cosntruir sinal na ferrovia. Ctrl+Clique para construir o sinal com estilo diferente{}Clique+Arraste para preencher a seção de ferrovia selecionada com os sinais no espaçamento escolhido. Ctrl+Clique+Arraste para colocar sinais até a próxima, junção, estação ou sinal. Pressione Shift para somente mostrar o custo estimado
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Shift alterna construir/mostrar custo estimado
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviário. Pressionar Shift mostra o custo estimado
STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Alternar entre construir/remover linha férrea, sinais, pontos de passagem e estações. Manter Ctrl pressionado também remove a linha férrea de pontos de passagem e estações
@ -5772,7 +5768,6 @@ STR_UNKNOWN_STATION :estação desco
STR_DEFAULT_SIGN_NAME :Placa
STR_COMPANY_SOMEONE :alguém
STR_SAVEGAME_DURATION_REALTIME :{NUM}h {NUM}min
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
STR_SAVEGAME_NAME_SPECTATOR :Espectador, {1:STRING}
@ -5806,10 +5801,6 @@ STR_TOWN_NAME :{TOWN}
STR_VEHICLE_NAME :{VEHICLE}
STR_WAYPOINT_NAME :{WAYPOINT}
STR_CURRENCY_SHORT_KILO :{NBSP}k
STR_CURRENCY_SHORT_MEGA :{NBSP}m
STR_CURRENCY_SHORT_GIGA :{NBSP}bn
STR_CURRENCY_SHORT_TERA :{NBSP}tn
STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}

View File

@ -1313,7 +1313,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ако тази
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автоматично поднови превозното средство, когато остарее: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ако тази опция бъде активирана, дадено превозно средство ще бъде автоматично заменено когато е към края на своя живот, стига условията за това да са налице

View File

@ -1484,7 +1484,6 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Rellotge de par
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenova el vehicle quan sigui vell: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Quan està activat, un vehicle que arriba al final de la seva vida útil és automàticament substituït quan es compleixen les condicions d'autorenovació.

View File

@ -663,7 +663,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аэропор
###setting-zero-is-special
###length 2

View File

@ -1438,7 +1438,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kada je uključ
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatski obnovi vozilo kada postane staro: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Kada je uključeno, vozilo kojem se bliži kraj vijeka trajanja se automatski obnavlja ukoliko su uvjeti za obnavljanje ispunjeni

View File

@ -1504,7 +1504,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Pokud je zapnut
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automaticky nahradit dopravní prostředek, když zestárne: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Pokud je zapnuto, vozidla na konci své plánované životnosti budou automaticky nahrazena, když jsou splněny podmínky pro automatické obnovení.

View File

@ -1471,7 +1471,6 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Vægur
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatisk fornyelse af gamle køretøjer: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Når aktiveret, bliver et køretøjder nærmer sig sin afslutning af livet automatisk udskiftet, når betingelserne er opfyldt

View File

@ -1485,7 +1485,6 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Muurklok
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Voertuig automatisch vernieuwen wanneer dit oud wordt: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Wanneer ingeschakeld, wordt een voertuig dat het einde van zijn levensduur nadert automatisch vervangen als aan de voorwaarden voor vernieuwing wordt voldaan

View File

@ -835,7 +835,6 @@ STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE
STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * *
STR_STATUSBAR_SPECTATOR :{WHITE}(spectator)
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(infinite money)
# News message history
STR_MESSAGE_HISTORY :{WHITE}Message History
@ -1288,8 +1287,6 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}second{P 0 "" s}
STR_CONFIG_SETTING_INFINITE_MONEY :Infinite money: {STRING}
STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Allow unlimited spending and disable bankruptcy of companies
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)
@ -1524,7 +1521,6 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendar time frozen)
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenew vehicle when it gets old: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :When enabled, a vehicle nearing its end of life gets replaced automatically when the renew conditions are fulfilled
@ -1943,7 +1939,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :When dragging,
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Set the distance at which signals will be built on a track up to the next obstacle (signal, junction), if signals are dragged
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} tile{P 0 "" s}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :When dragging, keep fixed distance between signals: {STRING}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Select the behaviour of signal placement when dragging signals. If disabled, signals are placed around tunnels or bridges to avoid long stretches without signals. If enabled, signals are placed every n tiles, making alignment of signals at parallel tracks easier
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Select the behaviour of signal placement when Ctrl+dragging signals. If disabled, signals are placed around tunnels or bridges to avoid long stretches without signals. If enabled, signals are placed every n tiles, making alignment of signals at parallel tracks easier
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automatically build semaphores before: {STRING}
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Set the year when electric signals will be used for tracks. Before this year, non-electric signals will be used (which have the exact same function, but different looks)
@ -2808,7 +2804,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Build ra
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Build train depot (for buying and servicing trains). Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Build waypoint on railway. Ctrl+Click to select another waypoint to join. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Build railway station. Ctrl+Click to select another station to join. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Build signal on railway. Ctrl+Click to build the alternate signal style{}Click+Drag to fill signals up to the next junction, station, or signal. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Build signal on railway. Ctrl+Click to build the alternate signal style{}Click+Drag to fill the selected section of rail with signals at the chosen spacing. Ctrl+Click+Drag to fill signals up to the next junction, station, or signal. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Build railway bridge. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Build railway tunnel. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Toggle build/remove for railway track, signals, waypoints and stations. Ctrl+Click to also remove the rail of waypoints and stations
@ -5771,7 +5767,6 @@ STR_UNKNOWN_STATION :unknown station
STR_DEFAULT_SIGN_NAME :Sign
STR_COMPANY_SOMEONE :someone
STR_SAVEGAME_DURATION_REALTIME :{NUM}h {NUM}m
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
STR_SAVEGAME_NAME_SPECTATOR :Spectator, {1:STRING}
@ -5805,10 +5800,6 @@ STR_TOWN_NAME :{TOWN}
STR_VEHICLE_NAME :{VEHICLE}
STR_WAYPOINT_NAME :{WAYPOINT}
STR_CURRENCY_SHORT_KILO :{NBSP}k
STR_CURRENCY_SHORT_MEGA :{NBSP}m
STR_CURRENCY_SHORT_GIGA :{NBSP}bn
STR_CURRENCY_SHORT_TERA :{NBSP}tn
STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}

View File

@ -835,7 +835,6 @@ STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE
STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * *
STR_STATUSBAR_SPECTATOR :{WHITE}(spectator)
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(infinite money)
# News message history
STR_MESSAGE_HISTORY :{WHITE}Message History
@ -1288,8 +1287,6 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}second{P 0 "" s}
STR_CONFIG_SETTING_INFINITE_MONEY :Infinite money: {STRING}
STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Allow unlimited spending and disable bankruptcy of companies
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)
@ -1524,7 +1521,6 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendar time frozen)
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenew vehicle when it gets old: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :When enabled, a vehicle nearing its end of life gets automatically replaced when the renew conditions are fulfilled
@ -1943,7 +1939,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :When dragging,
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Set the distance at which signals will be built on a track up to the next obstacle (signal, junction), if signals are dragged
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} tile{P 0 "" s}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :When dragging, keep fixed distance between signals: {STRING}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Select the behaviour of signal placement when dragging signals. If disabled, signals are placed around tunnels or bridges to avoid long stretches without signals. If enabled, signals are placed every n tiles, making alignment of signals at parallel tracks easier
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Select the behavior of signal placement when Ctrl+dragging signals. If disabled, signals are placed around tunnels or bridges to avoid long stretches without signals. If enabled, signals are placed every n tiles, making alignment of signals at parallel tracks easier
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automatically build semaphores before: {STRING}
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Set the year when electric signals will be used for tracks. Before this year, non-electric signals will be used (which have the exact same function, but different looks)
@ -2808,7 +2804,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Build ra
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Build train depot (for buying and maintaining trains). Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Build waypoint on railroad. Ctrl+Click to select another waypoint to join. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Build railroad station. Ctrl+Click to select another station to join. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Build signal on railway. Ctrl+Click to build the alternate signal style{}Click+Drag to fill signals up to the next junction, station, or signal. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Build signal on railroad. Ctrl+Click to build the alternate signal style{}Click+Drag to fill the selected section of rail with signals at the chosen spacing. Ctrl+Click+Drag to fill signals up to the next junction, station, or signal. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Build railroad bridge. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Build railroad tunnel. Also press Shift to show cost estimate only
STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Toggle build/remove for railroad track, signals, waypoints and stations. Ctrl+Click to also remove the rail of waypoints and stations
@ -5771,7 +5767,6 @@ STR_UNKNOWN_STATION :unknown station
STR_DEFAULT_SIGN_NAME :Sign
STR_COMPANY_SOMEONE :someone
STR_SAVEGAME_DURATION_REALTIME :{NUM}h {NUM}m
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
STR_SAVEGAME_NAME_SPECTATOR :Spectator, {1:STRING}
@ -5805,10 +5800,6 @@ STR_TOWN_NAME :{TOWN}
STR_VEHICLE_NAME :{VEHICLE}
STR_WAYPOINT_NAME :{WAYPOINT}
STR_CURRENCY_SHORT_KILO :{NBSP}K
STR_CURRENCY_SHORT_MEGA :{NBSP}M
STR_CURRENCY_SHORT_GIGA :{NBSP}B
STR_CURRENCY_SHORT_TERA :{NBSP}T
STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}

View File

@ -1486,7 +1486,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Se tiu ĉi agor
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Aŭtomate anstataŭu veturilon se malnoviĝas: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Se tiu ĉi agordo estas aktiva, veturilo kiu alproksimiĝas al la fino de sia vivdaŭro estos aŭtomate anstataŭigita kiam la renovigkondiĉoj estas plenumitaj

View File

@ -1454,7 +1454,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kui on aktiveer
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Vananenud sõidukite uuendamine: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Kui on sisse lülitatud, siis uuendatalse kõik kasutusaja lõpu lähedal olevad sõidukid automaatselt, järgides uuendamise tingimusi

View File

@ -1269,7 +1269,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Um gilda, eru
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Sjálvendurnýggja flutningstól tá ta gerst gamalt: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Um gilda, verður eitt flutningstól tá tað nærkast endanum á sínum lívi sjálvirkandi umbýtt tá endurnýggjanar treytirnar eru nøktaðar

View File

@ -332,7 +332,6 @@ STR_SORT_BY_TYPE :Tyyppi
STR_SORT_BY_TRANSPORTED :Kuljetettu
STR_SORT_BY_NUMBER :Numero
STR_SORT_BY_PROFIT_LAST_YEAR :Tuotto viime vuonna
STR_SORT_BY_PROFIT_LAST_PERIOD :Tuotto viime jaksolla
STR_SORT_BY_PROFIT_THIS_YEAR :Tuotto tänä vuonna
STR_SORT_BY_PROFIT_THIS_PERIOD :Tuotto tällä jaksolla
STR_SORT_BY_AGE :Ikä
@ -362,7 +361,6 @@ STR_SORT_BY_POPULATION :Asukasluku
STR_SORT_BY_RATING :Arvio
STR_SORT_BY_NUM_VEHICLES :Kulkuneuvojen määrä
STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Kokonaistuotto viime vuonna
STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Kokonaistuotto viime jaksolla
STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Kokonaistuotto tänä vuonna
STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Kokonaistuotto tällä jaksolla
STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Keskimääräinen tuotto viime vuonna
@ -445,7 +443,6 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Asetukset
STR_SETTINGS_MENU_AI_SETTINGS :Tekoälyasetukset
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Peliskriptiasetukset
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-asetukset
STR_SETTINGS_MENU_SANDBOX_OPTIONS :Hiekkalaatikkovalinnat
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läpinäkyvyysasetukset
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kuntien nimet näkyvissä
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Asemien nimet näkyvissä
@ -633,7 +630,6 @@ STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLA
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Rahtitaksat
STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Vuorokausia kuljetuksessa
STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Sekunteja kuljetuksessa
STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Maksu 10 yksikön (tai 10 000 litran) rahdin kuljettamisesta 20 ruudun päähän
STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Ota kaikki käyttöön
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Poista kaikki käytöstä
@ -833,7 +829,6 @@ STR_STATUSBAR_AUTOSAVE :{RED}AUTOMAATTI
STR_STATUSBAR_SAVING_GAME :{RED}* * TALLENNETAAN PELIÄ * *
STR_STATUSBAR_SPECTATOR :{WHITE}(katsoja)
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(rahaa loputtomasti)
# News message history
STR_MESSAGE_HISTORY :{WHITE}Viestihistoria
@ -1108,10 +1103,7 @@ STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Liitänn
STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Käynnissä
STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Alustus epäonnistui
STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} ei ole käynnissä
STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Poistettu käytöstä
STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Liitännäinen kahdesti
STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Versiota ei tueta
STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Allekirjoitus ei kelpaa
STR_BASESET_STATUS :{STRING} {RED}({NUM} puuttuvaa tai vioittunutta tiedosto{P "" a})
@ -1429,7 +1421,6 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Kaikissa näkym
STR_CONFIG_SETTING_BRIBE :Salli viranomaisten lahjominen: {STRING}
###length 2
STR_CONFIG_SETTING_BRIBE_HELPTEXT :Salli yhtiöiden yrittää paikallisviranomaisten lahjontaa. Jos lahjontayritys paljastuu, yhtiö ei voi toimia kunnassa kuuteen kuukauteen
STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Salli yhtiöiden yrittää paikallisviranomaisten lahjontaa. Jos lahjontayritys paljastuu, yhtiö ei voi toimia kunnassa kuuteen minuuttiin
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Salli kuljetusyksinoikeuksien ostaminen: {STRING}
###length 2
@ -1491,8 +1482,7 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :Kaikille kulkun
STR_CONFIG_SETTING_WARN_INCOME_LESS :Varoita, jos kulkuneuvon tulos on negatiivinen: {STRING}
###length 2
STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Mikäli käytössä, uutisviesti lähetetään, jos kulkuneuvo ei ole tuottanut rahaa vuoden aikana
STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Mikäli käytössä, uutisviesti lähetetään, jos kulkuneuvo ei ole tuottanut rahaa jakson aikana
STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Mikäli käytössä, uutisviesti lähetetään, jos kulkuneuvo ei ole tuottanut rahaa viimeisen kalenterivuoden aikana
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kulkuneuvot eivät vanhene: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Mikäli käytössä, kaikki kulkuneuvot ovat saatavilla ikuisesti niiden julkistamisen jälkeen
@ -1504,11 +1494,8 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalenteri
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Seinäkello
STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuuttia vuodessa: {STRING}
STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Valitse minuuttien määrä kalenterivuodessa. Oletusarvo on 12 minuuttia. Aseta arvoksi 0, jos et halua kalenteriajan muuttuvan. Tämä asetus ei vaikuta pelin taloussimulaatioon, ja se on valittavissa vain seinäkelloaikaa käytettäessä.
###setting-zero-is-special
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (kalenteriaika jäädytetty)
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista kulkuneuvo automaattisesti, kun se vanhenee: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Mikäli käytössä, lähellä käyttöikänsä loppua oleva kulkuneuvo korvataan automaattisesti
@ -1767,8 +1754,7 @@ STR_CONFIG_SETTING_SOUND_NEW_YEAR :Vuoden loppu: {
STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Jakson loppu: {STRING}
###length 2
STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Toista ääni vuoden lopussa, kun esitetään yhteenveto yhtiön tuloksesta vuoden aikana verrattuna edelliseen vuoteen
STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Toista ääni jakson lopussa, kun esitetään yhteenveto yhtiön tuloksesta jakson aikana verrattuna edelliseen jaksoon
STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Toista ääni vuoden lopussa verrattaessa yhtiön tulosta edelliseen vuoteen
STR_CONFIG_SETTING_SOUND_CONFIRM :Rakentaminen: {STRING}
STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Toista ääni onnistuneen rakennus- tai muun toiminnon jälkeen
@ -2398,7 +2384,6 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Palveli
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kutsukoodi: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Aloitusvuosi: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Päivämäärä: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Peliaika: {WHITE}{NUM}h {NUM}min
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Peliskripti: {WHITE}{STRING} (v.{NBSP}{NUM})
STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Salasanasuojattu!
STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}PALVELIN KIINNI
@ -2754,8 +2739,7 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}kuormittunut
# Linkgraph tooltip
STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} kuukaudessa kuljetettavana asemalta {STATION} asemalle {STATION} ({COMMA}{NBSP}% kapasiteetista){STRING}
STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} minuutissa kuljetettavana asemalta {STATION} asemalle {STATION} ({COMMA}{NBSP}% kapasiteetista){STRING}
STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} minuutissa kuljetettavana asemalta {STATION} asemalle {STATION} ({COMMA}% kapasiteetista){STRING}
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} kuljetettavana takaisin ({COMMA}{NBSP}% kapasiteetista)
# Base for station construction window(s)
@ -2766,7 +2750,6 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Älä ko
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Korosta ehdotetun tontin vaikutusalue
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Tuottaa: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Ylläpitokustannukset: {GOLD}{CURRENCY_SHORT}/vuosi
STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Ylläpitokustannukset: {GOLD}{CURRENCY_SHORT}/jakso
# Join station window
@ -3922,7 +3905,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Asemat:
STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Asemaruudut
STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Lentokentät
STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/vuosi
STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/jakso
# Industry directory
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Teollisuuslaitokset
@ -4252,16 +4234,11 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :raitiovaunu
STR_ENGINE_PREVIEW_AIRCRAFT :ilma-alus
STR_ENGINE_PREVIEW_SHIP :laiva
STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING}
STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING}
STR_ENGINE_PREVIEW_COST_WEIGHT :Hinta: {CURRENCY_LONG} Paino: {WEIGHT_SHORT}
STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Nopeus: {VELOCITY} Teho: {POWER} Maksimivetovoima: {FORCE}
STR_ENGINE_PREVIEW_TYPE :Ilma-aluksen tyyppi: {STRING}
STR_ENGINE_PREVIEW_TYPE_RANGE :Ilma-alustyyppi: {STRING} Toimintasäde: {COMMA} ruutua
STR_ENGINE_PREVIEW_RUNCOST_YEAR :Käyttökustannukset: {CURRENCY_LONG}/vuosi
STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Käyttökustannukset: {CURRENCY_LONG}/jakso
STR_ENGINE_PREVIEW_CAPACITY :Kapasiteetti: {CARGO_LONG}
STR_ENGINE_PREVIEW_CAPACITY_2 :Kapasiteetti: {CARGO_LONG}, {CARGO_LONG}
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} {STRING}
@ -4417,8 +4394,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG})
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG}) {BLACK}Vähimmäissuorituskyky: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Tuotto tällä jaksolla: {LTBLUE}{CURRENCY_LONG} (viime jaksolla: {CURRENCY_LONG})
STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Tuotto tällä jaksolla: {LTBLUE}{CURRENCY_LONG} (viime jaksolla: {CURRENCY_LONG}) {BLACK}Vähimmäissuorituskyky: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Tuotto tällä jaksolla: {LTBLUE}{CURRENCY_LONG} (viime jakso: {CURRENCY_LONG}) {BLACK}Vähimmäissuorituskyky: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}{NBSP}% {BLACK}Hajoamiset viime huollon jälkeen: {LTBLUE}{COMMA}
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY_LONG}
@ -4434,13 +4410,10 @@ STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Viimeksi huolle
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Viimeksi huollettu: {LTBLUE}{NUM} minuuttia sitten
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Pidennä huoltoväliä 5 minuutilla. Ctrl+napsautus pidentää väliä 1 minuutilla
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Pidennä huoltoväliä 10 prosentilla. Ctrl+napsautus pidentää väliä 5 prosentilla
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Lyhennä huoltoväliä 10 vuorokaudella. Ctrl+napsautus lyhentää väliä 5 vuorokaudella
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Lyhennä huoltoväliä 5 minuutilla. Ctrl+napsautus lyhentää väliä 1 minuutilla
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Lyhennä huoltoväliä 10 prosentilla. Ctrl+napsautus lyhentää väliä 5 prosentilla
STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Muuta huoltovälien tyyppiä
STR_VEHICLE_DETAILS_DEFAULT :Oletus
STR_VEHICLE_DETAILS_DAYS :Päiviä
STR_VEHICLE_DETAILS_MINUTES :Minuutteja
STR_VEHICLE_DETAILS_PERCENT :Prosentteja
@ -5740,7 +5713,6 @@ STR_UNKNOWN_STATION :tuntematon asem
STR_DEFAULT_SIGN_NAME :Kyltti
STR_COMPANY_SOMEONE :joku
STR_SAVEGAME_DURATION_REALTIME :{NUM} h {NUM} min
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
STR_SAVEGAME_NAME_SPECTATOR :Katsoja, {1:STRING}
@ -5774,7 +5746,6 @@ STR_TOWN_NAME :{TOWN}
STR_VEHICLE_NAME :{VEHICLE}
STR_WAYPOINT_NAME :{WAYPOINT}
STR_CURRENCY_SHORT_TERA :{NBSP} t
STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}

View File

@ -1522,7 +1522,6 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendrier gelé)
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renouveler automatiquement les véhicules vieillissants{NBSP}: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Quand il est actif, un véhicule approchant de la fin de sa durée de vie est automatiquement remplacé quand les conditions du renouvellement sont remplies

View File

@ -1325,7 +1325,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :By ynskeakeljen
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Ferfang âlde fiertugen automatysk: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :By ynskeakeljen wurden fiertugen dy't hast op harren ein binne automatyske ferfongen

View File

@ -1516,7 +1516,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ma tha seo air,
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Fèin-nuadhaich carbad nuair a bhios e air fàs aosta: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Nuair a bhios seo air, nuair a bhios carbad air fàs ro aosta, thèid fear ùr a chur na àite gu fèin-obrachail ma dh'fhreagras e ri cumhan an fhèin-nuadhachaidh

View File

@ -1455,7 +1455,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Cando se activa
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenova-los vehículos cando vaian vellos: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Cando se activa, un vehículo que se achega ao fin da súa vida útil é reemprazado automáticamente se se cumplen as condicións de renovación

View File

@ -1454,7 +1454,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Erlauben, dass
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Fahrzeuge automatisch erneuern, wenn sie alt werden: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Erneuere Fahrzeuge automatisch gemäß der Regeln für Erneuerung, wenn sie ihr Maximalalter erreicht haben.

View File

@ -1502,7 +1502,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Όταν είν
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Αυτόματη ανανέωση όταν ένα όχημα παλιώνει: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα που πλησιάζουν το τέλος της ζωής τους αντικαθίσταται αυτόματα όταν πληρούνται οι προϋποθέσεις αντικατάστασής του

View File

@ -1348,7 +1348,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :כאשר מאו
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :חידוש עצמי של רכב כשהוא נהיה ישן: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :כאשר מאופשר, רכב המתקרב לסוף חייו מוחלף אוטומטית כאשר תנאי החידוש מתקיימים

View File

@ -457,7 +457,6 @@ STR_CONFIG_SETTING_ORDER_REVIEW_OFF :नहीं
###setting-zero-is-special
###length 2

View File

@ -1516,7 +1516,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Bekapcsolva min
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatikusan felújítja a járművet ha elöregedik: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Bekapcsolva a jármű élettartamának végén automatikusan cserére kerül, ha a lecserélési feltételek teljesülnek

View File

@ -1268,7 +1268,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ef þessi still
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uppfæra faratæki sjálfvirkt þegar þau eldast: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ef þessi stilling er virk, eru farartæki endurnýjuð sjálfvirkt þegar endingartími þeirra er komin

View File

@ -637,7 +637,6 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normala
###setting-zero-is-special
###length 2

View File

@ -1453,7 +1453,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Jika dinyalakan
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Perbarui otomatis kendaraan yang telah tua: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Jika dinyalakan, kendaraan mendekati akhir usianya akan secara otomatis diperbarui jika masih tersedia kendaraan itu

View File

@ -1372,7 +1372,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Má dhéantar
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Déan uathathnuachan ar an bhfeithicil nuair a éiríonn sé sean: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Má tá sé cumasaithe, déantar feithicil atá ag teacht chuig deireadh a ré a ionadú go huathoibríoch má tá na coinníollacha athnuachana comhlíonta

View File

@ -1492,7 +1492,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Se abilitata, d
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Rinnova un veicolo quando diventa vecchio: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Se abilitata, un veicolo vicino alla sua età massima viene automaticamente sostituito quando si verificano le condizioni richieste per il rinnovo

View File

@ -1417,7 +1417,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :有効にする
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :老朽車両の自動交換: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :有効にすると、耐用年数を越えた輸送機器は自動で更新されるようになります(交換には一度格納施設に戻る必要があります)。具体的な交換時期は下の設定で変更できます。

View File

@ -836,7 +836,6 @@ STR_STATUSBAR_AUTOSAVE :{RED}자동 저
STR_STATUSBAR_SAVING_GAME :{RED}* * 게임 저장 중 * *
STR_STATUSBAR_SPECTATOR :{WHITE}(관전자)
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(돈 무제한)
# News message history
STR_MESSAGE_HISTORY :{WHITE}메시지 기록
@ -1289,8 +1288,6 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :오른쪽
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}초
STR_CONFIG_SETTING_INFINITE_MONEY :돈 무제한: {STRING}
STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :돈을 무제한으로 만들고 회사가 파산하지 않게 만듭니다
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :최대 초기 대출금: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. (여기서 설정한 값은 인플레이션에 의한 효과를 적용하지 않은 값입니다.)
@ -1525,7 +1522,6 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (달력 시간 정지됨)
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :차량이 낡으면 차량을 자동으로 교체: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :이 설정을 켜면, 제한 수명에 다다른 차량이 교체 조건을 만족할 경우 자동으로 차량을 교체할 수 있게 됩니다
@ -1944,7 +1940,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :신호기를
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :신호기를 드래그할 때, 다음 장애물(신호기, 분기점 등)을 만날 때까지 신호기가 설치될 간격을 설정합니다
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA}칸 간격으로 설치
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :드래그할 때, 신호기 사이의 거리를 계속 고정: {STRING}
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :신호기를 드래그 하여 설치할 때의 행동을 선택합니다. 이 설정을 끄면, 신호기가 없는 긴 폐색을 만들지 않기 위해 터널이나 다리 주변에 먼저 신호기가 설치될 것입니다. 이 설정을 켜면, 신호기는 터널/다리와 상관없이 매 n개의 칸마다 설치될 것입니다
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :신호기를 CTRL+드래그 하여 설치할 때의 행동을 선택합니다. 이 설정을 끄면, 신호기가 없는 긴 폐색을 만들지 않기 위해 터널이나 다리 주변에 먼저 신호기가 설치될 것입니다. 이 설정을 켜면, 신호기는 터널/다리와 상관없이 매 n개의 칸마다 설치될 것입니다.
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :전자식 신호기의 사용: {STRING}년 이후에
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :전자식 신호기를 사용할 수 있는 연도를 설정합니다. 이 이전에는 구식 신호기만 사용 가능합니다. (두 신호기는 기능적으로는 동일하고 모습만 다릅니다.)
@ -5772,9 +5768,8 @@ STR_UNKNOWN_STATION :알 수 없는
STR_DEFAULT_SIGN_NAME :팻말
STR_COMPANY_SOMEONE :누군가
STR_SAVEGAME_DURATION_REALTIME :{NUM}시간 {NUM}분
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}의 게임, {STRING}
STR_SAVEGAME_NAME_SPECTATOR :관전자의 게임, {1:STRING}
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}의 게임 ({STRING})
STR_SAVEGAME_NAME_SPECTATOR :관전자의 게임 ({1:STRING})
# Viewport strings
STR_VIEWPORT_TOWN_POP :{WHITE}{TOWN} ({COMMA})
@ -5806,10 +5801,6 @@ STR_TOWN_NAME :{TOWN}
STR_VEHICLE_NAME :{VEHICLE}
STR_WAYPOINT_NAME :{WAYPOINT}
STR_CURRENCY_SHORT_KILO :k
STR_CURRENCY_SHORT_MEGA :m
STR_CURRENCY_SHORT_GIGA :bn
STR_CURRENCY_SHORT_TERA :tn
STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}

View File

@ -1509,7 +1509,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Electa, omnes v
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoredimere vehicula cum veterascunt: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Electa, vehicula veterascentia automatice redimuntur, condicionibus satisfactis

View File

@ -1460,7 +1460,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kad ieslēgts,
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automātiski atjaunot transportlīdzekļus, kad tie ir kļuvuši veci: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ja ieslēgts, kad ir atbilstoši atjaunošanas apstākļi, automātiski tiek nomainīti transportlīdzekļi kuru kalpošanas laiks tuvojas beigām

View File

@ -1589,7 +1589,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kartą atsirad
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatiškai atnaujinti transporto priemonę, kai ji pasensta: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Transporto priemonė, eksploatacijos laikotarpiui artėjant prie pabaigos, bus automatiškai bus atnaujinta, jei tik atnaujinimo sąlygos bus išpildytos

View File

@ -1398,7 +1398,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wann ugeschalt,
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Gefier automatesch erneiere wann et al gëtt: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Wann ugeschalt, gëtt e Gefier wat u säi Lafzäitenn kënnt automatesch ausgetosch

View File

@ -937,7 +937,6 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Инфраст
###setting-zero-is-special
###length 2

View File

@ -1261,7 +1261,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kenderaan tidak
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Gunakan pembaharuan automatik apabila kenderaan usang : {STRING}
###length 2

View File

@ -567,7 +567,6 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avza jekk jinti
###setting-zero-is-special
###length 2

View File

@ -872,7 +872,6 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE : वाहन
###setting-zero-is-special
###length 2

View File

@ -1382,7 +1382,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Når aktivert,
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoforny kjøretøy når det blir gammelt: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Når aktivert, blir et kjøretøy som nærmer seg slutten av sin levetid automatisk erstattet når betingelsene for fornyelse er oppfylt

View File

@ -1293,7 +1293,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Køyretøy utg
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoforny køyretøy når det vert gamalt: {STRING}
STR_CONFIG_SETTING_AUTORENEW_MONTHS :Automatisk fornying når køyretøy er {STRING} maks alder

View File

@ -1229,7 +1229,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :وسایل نق
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :نوکردن خودکار وسایل نقلیه کهنه شده: {STRING}
###length 2

View File

@ -1842,7 +1842,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kiedy włączon
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoodnawianie pojazdów gdy stają się stare: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Kiedy włączone, pojazd zbliżający się do końca swojej żywotności zostaje automatycznie zastąpiony, gdy warunki jego odnowienia są spełnione

View File

@ -1507,7 +1507,6 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tempo do calendário congelado)
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Auto-renovação de veículos quando ficam velhos: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Quando ativo, um veículo a chegar ao fim de vida é automaticamente substituído quando as condições de renovação estão reunidas

View File

@ -1457,7 +1457,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :După activare,
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Înnoire automată pentru vehiculele învechite: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :După activare, orice vehicul care este învechit va fi înnoit automat când condițiile de înlocuire automată sunt îndeplinite

View File

@ -487,7 +487,6 @@ STR_SORT_BY_RATING :Рейтинг
STR_SORT_BY_NUM_VEHICLES :Количество транспортных средств
STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Общая прибыль в прошлом году
STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Общая прибыль в этом году
STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Прибыль в текущем цикле
STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Средняя прибыль в прошлом году
STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Средняя прибыль в этом году
STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Средний доход в текущем периоде
@ -1639,11 +1638,9 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При вклю
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Выбор системы отсчёта времени, используемой в игре. После старта сменить её невозможно.{}{}Календарь - это классическая система, изначально использовавшаяся в OpenTTD: год состоит из 12 месяцев, в каждом из которых 28-31{NBSP}день.{}{}В режиме реального времени расчёты производства, движения транспорта и финансовых показателей основаны на интервалах длительностью в 1{NBSP}минуту, что примерно соответствует 30{NBSP}дням в режиме календаря. Эти интервалы группируются в 12-минутные циклы, соответствующие 1{NBSP}году в классическом режиме.{}{}В любом случае, появление новых транспортных средств, зданий и инфраструктуры будет сопровождаться календарём с понятными датами.
###length 2
STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Выберите, сколько минут реального времени длится год в игре. По умолчанию{NBSP}- 12{NBSP}минут. Установка «0» остановит календарное время. Эта настройка не влияет на расчёт экономической модели в игре, и работает только в режиме реального времени.
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автозамена изношенного транспорта: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Включает автоматическую замену устаревших транспортных средств
@ -4420,7 +4417,6 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED :Цена: {CURR
STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Скорость: {VELOCITY} Мощность: {POWER} Макс. ТУ: {FORCE}
STR_ENGINE_PREVIEW_TYPE_RANGE :Возд. судно: {STRING} Дальность: {COMMA}{NBSP}клет{P ка ки ок}
STR_ENGINE_PREVIEW_CAPACITY :Ёмкость: {CARGO_LONG}
STR_ENGINE_PREVIEW_CAPACITY_2 :Ёмкость: {CARGO_LONG}, {CARGO_LONG}
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}Замена {STRING.gen} - {STRING}
@ -4595,8 +4591,6 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}ТО к
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}ТО при сниж. на {LTBLUE}{COMMA}%{BLACK}. {STRING}
STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :ТО: {LTBLUE}{DATE_LONG}
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :ТО: {LTBLUE}{NUM}{NBSP}мин. назад
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Увеличить интервал ТО на 10%. Ctrl+щелчок - увеличить интервал на 5%.
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Уменьшить интервал ТО на 5{NBSP}минут. Ctrl+щелчок{NBSP}- уменьшить на 1{NBSP}минуту.
STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Изменить тип интервала прохождения технического обслуживания
STR_VEHICLE_DETAILS_DEFAULT :По умолчанию

View File

@ -1605,7 +1605,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ako je omoguće
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatska zamena kada vozilo ostari: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Kada je omogućeno, vozilo blizu kraja života će se automatski zameniti kada su ispunjeni uslovi obnavljanja

View File

@ -334,7 +334,6 @@ STR_SORT_BY_NUMBER :序号
STR_SORT_BY_PROFIT_LAST_YEAR :去年利润
STR_SORT_BY_PROFIT_LAST_PERIOD :上期损益
STR_SORT_BY_PROFIT_THIS_YEAR :今年利润
STR_SORT_BY_PROFIT_THIS_PERIOD :本期损益
STR_SORT_BY_AGE :年龄
STR_SORT_BY_RELIABILITY :可靠性
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :每种货物的总装载能力
@ -362,11 +361,8 @@ STR_SORT_BY_POPULATION :人口
STR_SORT_BY_RATING :评价
STR_SORT_BY_NUM_VEHICLES :载具数量
STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :去年总利润
STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :上期总损益
STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :今年总利润
STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :本期总损益
STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :去年平均利润
STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :上期平均损益
STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :今年平均利润
STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :本周期平均利润
@ -406,7 +402,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}建设
STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}建造电车轨道
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}建设码头
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}建设机场
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}打开景观美化工具栏以修改地形、设置地貌等
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}打开景观美化工具栏{}以修改地形、设置地貌等
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}显示 声音/音乐 控制菜单
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}显示最新消息、新闻,消息历史或删除所有消息
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}查询地块信息、截图、关于 OpenTTD 和开发者工具
@ -422,7 +418,7 @@ STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}点击
STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}显示地图和城镇列表
STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}生成地形
STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}城镇生成
STR_SCENEDIT_TOOLBAR_INDUSTRY_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}植树。按 Ctrl 沿对角线建造,按 Shift 显示预计花费。
@ -633,8 +629,6 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}公司
STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}最后 72 分
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}货物运输价格
STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}运输所用天数
STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}运输所用秒数
STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}将 10 单位 (或 10,000 升) 货物运输 20 个方格
STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}全部启用
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}全部禁用
@ -683,11 +677,7 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}贷款
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}总表现值:
###next-name-looks-similar
STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}去年盈利的载具数量,包括公路载具、列车、船舶和飞机
STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :上期盈利的载具数量,包括公路载具、列车、船舶和飞机
STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}最近仍然使用的车站组件数量。车站的每个组件(火车站、公交站、机场)即使是连接成为一个车站,也会被独立计数。
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}收入最低的载具的利润(只考虑年龄超过两年的载具)
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}收入最低的载具的损益(只计算年龄超过两年的载具)
STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}在过去 12 个季度中{}利润最少的季度的现金收入
STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}在过去 12 个季度中{}利润最多的季度的现金收入
STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}在过去 4 个季度中运输的货物总数
@ -835,7 +825,6 @@ STR_STATUSBAR_AUTOSAVE :{RED}自动保
STR_STATUSBAR_SAVING_GAME :{RED}* * 保存游戏中 * *
STR_STATUSBAR_SPECTATOR :{WHITE}(旁观者)
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(无限)
# News message history
STR_MESSAGE_HISTORY :{WHITE}消息历史
@ -920,7 +909,6 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE
STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} 已经达到报废年限,必须马上更新!
STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} 无法找到道路
STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} 无法找到路线.
STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :{WHITE}{VEHICLE} 的去年损益为 {CURRENCY_LONG}
STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE} 的上周期损益为 {CURRENCY_LONG}
STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} 由于航程过远,航班无法到达。
@ -945,8 +933,6 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLAC
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}{STRING} 获得财政补贴!{}{}今后 {4:UNITS_YEARS_OR_MINUTES} 中将 {1:STRING} 从 {2:STRING} 运送到 {3:STRING} 将获得三倍的报酬!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}{STRING} 获得财政补贴!{}{}今后 {4:UNITS_YEARS_OR_MINUTES} 中将 {1:STRING} 从 {2:STRING} 运送到 {3:STRING} 将获得四倍的报酬!
STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}{TOWN}的混乱交通!{}{}由{STRING}资助的道路重建计划将给驾车者带来长达 6 个月的堵塞!
STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}{TOWN}的混乱交通!{}{}由{STRING}资助的道路重建计划将给驾车者带来长达 6 分钟的堵塞!
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}垄断运输!
STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}{TOWN} 地方当局与 {STRING} 签订了长为一年的独家运输合同!
STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}{TOWN} 地方当局与 {STRING} 签订了 12 分钟独家运输合同!
@ -1288,8 +1274,6 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右侧
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}秒
STR_CONFIG_SETTING_INFINITE_MONEY :无限资金: {STRING}
STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :允许无限制的支出并禁止公司破产
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大初始贷款: {STRING}
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响)
@ -1315,7 +1299,6 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :设置获得财
STR_CONFIG_SETTING_SUBSIDY_DURATION :财政补贴尺度:{STRING}
###length 2
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :设置发放财政补贴的年数
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :设置发放财政补贴的周期数
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS}
###setting-zero-is-special
@ -1415,7 +1398,6 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :右侧
###length 2
STR_CONFIG_SETTING_SHOWFINANCES :在年终显示财务报表:{STRING}
STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :在周期末显示财务报表:{STRING}
###length 2
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :“打开”时,在年底显示财务报表窗口,方便查看公司财务状况
@ -1442,12 +1424,10 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :每个视角
STR_CONFIG_SETTING_BRIBE :允许贿赂地方政府:{STRING}
###length 2
STR_CONFIG_SETTING_BRIBE_HELPTEXT :“打开”时,允许贿赂地方政府,如果被发现,在该城市将被限制经营活动六个月
STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :允许公司尝试贿赂当地镇政府。如果贿赂被发现,公司在该城市将被限制经营活动 6 分钟。
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :允许买断经营权: {STRING}
###length 2
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :如果一家公司购买了城市独家经营权,其它公司的站台将在一年之内不再产生乘客或者货物。
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :如果一家公司购买了城市独家经营权,其它公司的站台将在 12 分钟之内不再产生乘客或者货物。
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :允许资助城镇建设: {STRING}
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :“打开”时,允许公司提供资助新建房屋
@ -1506,13 +1486,12 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :检查 所有
STR_CONFIG_SETTING_WARN_INCOME_LESS :若线路亏损时发出提示: {STRING}
###length 2
STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :“打开”,当一辆车在一年内总体亏损,发出提示
STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :启用时,若某载具在一周期内总体亏损,发出提示
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :载具永不过期:{STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :启用时,所有载具一经面世,就可以永远选择购买使用。
STR_CONFIG_SETTING_TIMEKEEPING_UNITS :时间模式:{STRING}
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :选择游戏的计时模式。 请注意此项无法在游戏进行时更改{}{}日历模式为经典 OpenTTD 体验,在此模式中,一年由 12 个月组成,每个月有 28-31 天。{}{}在挂钟模式中,车辆移动、货物生产和财务计算等都以分钟为单位,一分钟约等于日历模式中的一个月,即 30 天。两种模式都包含一个用来记录载具、房屋与其他基础设施引入日期的计时器。
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :选择游戏的计时单位。 请注意此项无法在游戏进行时更改{}{}日历模式为经典 OpenTTD 体验,在此模式中,一年由 12 个月组成,每个月有 28-31 天。{}{}在挂钟模式中,车辆移动、货物生产和财务计算等都以分钟为单位,一分钟约等于日历模式中的一个月,即 30 天。两种模式都包含一个用来记录载具、房屋与其他基础设施引入日期的计时器。
###length 2
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :日历
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :挂钟
@ -1522,8 +1501,6 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :选择在使用
STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0日期停止
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :当车辆报废时自动更新:{STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :“打开”时,车辆在临近它的报废期限时自动更新
@ -1779,11 +1756,9 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :显示报纸时
###length 2
STR_CONFIG_SETTING_SOUND_NEW_YEAR :年终: {STRING}
STR_CONFIG_SETTING_SOUND_NEW_PERIOD :周期结束:{STRING}
###length 2
STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :在年末弹出报表时,播放相应音效
STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :在经济周期末弹出报表时,播放相应音效
STR_CONFIG_SETTING_SOUND_CONFIRM :建设: {STRING}
STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :播放成功建设或执行其它动作时的音效
@ -2085,7 +2060,6 @@ 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_VELOCITY_GAMEUNITS_DAYS :游戏单位(格/日)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :游戏单位(格/秒)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :节
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :载具功率单位:{STRING}
@ -2398,7 +2372,6 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}游戏
STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}日期
STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}当前日期
STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}{NBSP}时{NBSP}{NUM}{NBSP}分
STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :游戏时间
STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}有戏已进行的时间,不计暂停的时间。
STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}语言,服务器版本和其他信息
@ -2408,13 +2381,13 @@ STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}点击
STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}游戏信息
STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}客户端: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}场景类型{WHITE}{STRING}
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}地图尺寸{WHITE}{COMMA}×{COMMA}
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}游戏版本{WHITE}{STRING}
STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}该服IP {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}场景类型: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}地图尺寸: {WHITE}{COMMA}×{COMMA}
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}游戏版本: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}该服IP: {WHITE}{STRING}
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}邀请代码:{WHITE}{STRING}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}开始日期{WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}当前日期{WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}开始日期: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}当前日期: {WHITE}{DATE_SHORT}
STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}游戏时间:{WHITE}{NUM} 时 {NUM} 分
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}游戏脚本:{WHITE}{STRING} (v{NUM})
STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}有密码保护!
@ -2771,8 +2744,6 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}超载
# Linkgraph tooltip
STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}每月有 {CARGO_LONG} 需从 {STATION} 运至 {STATION} (运载能力的 {COMMA}%{STRING}
STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}每分钟有 {CARGO_LONG} 需从 {STATION} 运至 {STATION} (运载能力的 {COMMA}%{STRING}
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}有{CARGO_LONG}要运回(运载能力的{COMMA}%)
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}平均行驶时间: {UNITS_DAYS_OR_SECONDS}
@ -2784,7 +2755,6 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}不显
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}显示可以覆盖的区域
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}接受:{GOLD}{CARGO_LIST}
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}供给: {GOLD}{CARGO_LIST}
STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}维护成本:{GOLD}{CURRENCY_SHORT}/年
STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}维护成本:{GOLD}{CURRENCY_SHORT}/周期
# Join station window
@ -3087,7 +3057,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}选择
# Land area window
STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}地块信息
STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到地块所在的位置。单击的同时按住 <Ctrl> 会在新视点中显示地块位置
STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到地块所在的位置。单击的同时按住Ctrl会在新视点中显示地块位置
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}清除费用:{LTBLUE}N/A 不能清除
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}清除费用:{RED}{CURRENCY_LONG}
STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}清除收入: {LTBLUE}{CURRENCY_LONG}
@ -3682,11 +3652,9 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{Y
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}进行中型的广告宣传,以吸引更多的旅客和货物选择贵公司的服务。{}为位于该城镇中心中等距离内的车站提供暂时的评分增益。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}进行大型的广告宣传,以吸引更多的旅客和货物选择贵公司的服务。{}为位于该城镇中心较远距离内的车站提供暂时的评分增益。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}资助城镇路网重建。{}这将堵塞城镇交通 6 个月。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}资助城镇路网重建。{}这将堵塞城镇交通 6 个月。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}以公司的名义设立一尊塑像。{}为位于该城镇的车站提供永久的评分增益。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}资助市内建设新的房屋建筑。{}为城镇提供暂时的成长速度增益。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}购买本城镇时长 12 个月的独家运输权。{}本城镇的乘客和货物将不会使用其他公司的车站。若竞争对手贿赂成功则此合同将被取消。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}购买本城镇时长 12 分钟的独家运输权。{}本城镇的乘客和货物将不会使用其他公司的车站。若竞争对手贿赂成功则此合同将被取消。{}{POP_COLOUR}费用:{CURRENCY_LONG}
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}贿赂地方政府以提高评价,并终止竞争者的运输专营权,但有被发现后严厉惩罚的风险。{}{POP_COLOUR}费用:{CURRENCY_LONG}
# Goal window
@ -3782,7 +3750,6 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN
STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}评价
STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}显示车站评价
STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}每月供应数量与本地评价:
STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :每分钟供应量与本地评价:
STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%)
STR_STATION_VIEW_GROUP :{BLACK}群组方式
@ -3843,8 +3810,6 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}编辑
# Finances window
STR_FINANCES_CAPTION :{WHITE}{COMPANY} 财务报表 {BLACK}{COMPANY_NUM}
STR_FINANCES_YEAR :{WHITE}{NUM}
STR_FINANCES_YEAR_CAPTION :年份
STR_FINANCES_PERIOD_CAPTION :{WHITE}周期
###length 3
STR_FINANCES_REVENUE_TITLE :{WHITE}收入
@ -3946,8 +3911,6 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}运河
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}站台:
STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}车站
STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}机场
STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/年
STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/周期
# Industry directory
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}工业设施
@ -3967,7 +3930,6 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :无
# Industry view
STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY}
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}上月产量:
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}上分钟产量:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% 已运输)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到工厂所在的位置. 单击的同时按住Ctrl会在新视点中显示工厂位置
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产等级: {YELLOW}{COMMA}%
@ -4055,7 +4017,6 @@ STR_GROUP_REMOVE_ALL_VEHICLES :移除所有车
STR_GROUP_RENAME_CAPTION :{BLACK}重命名分组
STR_GROUP_PROFIT_THIS_YEAR :今年利润:
STR_GROUP_PROFIT_THIS_PERIOD :本期损益:
STR_GROUP_PROFIT_LAST_YEAR :去年利润
STR_GROUP_PROFIT_LAST_PERIOD :上周期损益:
STR_GROUP_OCCUPANCY :当前使用量:
@ -4085,7 +4046,6 @@ STR_PURCHASE_INFO_SPEED :{BLACK}速度
STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}在海洋上的速度: {GOLD}{VELOCITY}
STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}在河流上的速度: {GOLD}{VELOCITY}
STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}运行费用:{GOLD}{CURRENCY_LONG}/年
STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}运行费用:{GOLD}{CURRENCY_LONG}/周期
STR_PURCHASE_INFO_CAPACITY :{BLACK}运载能力:{GOLD}{CARGO_LONG} {STRING}
STR_PURCHASE_INFO_REFITTABLE :(可改装)
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}设计日期:{GOLD}{NUM}{BLACK} 寿命:{GOLD}{COMMA} 年
@ -4139,7 +4099,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}购买
STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的列车。按住 <Shift> 键单击可以显示所需资金
STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的汽车。按住 Shift 键单击可以显示所需资金
STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的船只。按住 Shift 键单击可以显示所需资金
STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的飞机,按住 Shift 键单击可以显示所需资金
STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :购买并改装选定的飞机,按住 Shift 键单击可以显示所需资金
###length VEHICLE_TYPES
STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}重命名
@ -4278,13 +4238,9 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :电车
STR_ENGINE_PREVIEW_AIRCRAFT :飞机
STR_ENGINE_PREVIEW_SHIP :船只
STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING}
STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING}
STR_ENGINE_PREVIEW_COST_WEIGHT :售价:{CURRENCY_LONG} 重量:{WEIGHT_SHORT}
STR_ENGINE_PREVIEW_COST_MAX_SPEED :售价:{CURRENCY_LONG} 最大速度:{VELOCITY}
STR_ENGINE_PREVIEW_SPEED_POWER :速度:{VELOCITY} 功率:{POWER}
STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :速度:{VELOCITY} 功率:{POWER} 最大牵引力:{FORCE}
STR_ENGINE_PREVIEW_TYPE :飞机类型:{STRING}
STR_ENGINE_PREVIEW_TYPE_RANGE :飞机类别:{STRING} 航程:{COMMA} 格
STR_ENGINE_PREVIEW_RUNCOST_YEAR :运行费用:{CURRENCY_LONG}/年
STR_ENGINE_PREVIEW_RUNCOST_PERIOD :运行费用:{CURRENCY_LONG}/周期
@ -4445,8 +4401,6 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}重量
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年利润:{LTBLUE}{CURRENCY_LONG} (去年利润:{CURRENCY_LONG})
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}今年利润: {LTBLUE}{CURRENCY_LONG} (去年利润: {CURRENCY_LONG}) {BLACK}最小功率: {LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}本期损益:{LTBLUE}{CURRENCY_LONG}(上期损益:{CURRENCY_LONG}
STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}本期损益:{LTBLUE}{CURRENCY_LONG}(上期损益:{CURRENCY_LONG}){BLACK}最小功率:{LTBLUE}{POWER_TO_WEIGHT}
STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}可靠性:{LTBLUE}{COMMA}% {BLACK}上次保养后抛锚的次数:{LTBLUE}{COMMA}
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}建造年份:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY_LONG}
@ -4462,17 +4416,12 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}服务
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}保养周期:{LTBLUE}{COMMA}%{BLACK} 上次保养:{LTBLUE}{STRING}
STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :最近保养:{LTBLUE}{DATE_LONG}
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :最近保养:{LTBLUE}{NUM}{NBSP}分钟前
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :将维修间隔增大 10 天。按住 <Ctrl> 点击可将维修间隔增大 5 天。
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}将维修间隔增大 5 分。按住 <Ctrl> 点击可将维修间隔增大 1 分 。
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}将维修间隔增大 10%。按住 <Ctrl> 点击可将维修间隔增大 5% 。
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}将维修间隔缩短 10 天。按住 <Ctrl> 点击可将维修间隔缩短 5 天。
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}将维修间隔缩短 5 分。按住 <Ctrl> 点击可将维修间隔缩短 1 分 。
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}将维修间隔缩短 10%。按住 <Ctrl> 点击可将维修间隔缩短 5% 。
STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}更改服务时间间隔类型
STR_VEHICLE_DETAILS_DEFAULT :默认
STR_VEHICLE_DETAILS_DAYS :天
STR_VEHICLE_DETAILS_MINUTES :分钟
STR_VEHICLE_DETAILS_PERCENT :百分比
###length VEHICLE_TYPES
@ -5771,7 +5720,6 @@ STR_UNKNOWN_STATION :未知车站(
STR_DEFAULT_SIGN_NAME :标志
STR_COMPANY_SOMEONE :某人
STR_SAVEGAME_DURATION_REALTIME :{NUM} 时 {NUM} 分
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
STR_SAVEGAME_NAME_SPECTATOR :观众, {1:STRING}
@ -5805,10 +5753,6 @@ STR_TOWN_NAME :{TOWN}
STR_VEHICLE_NAME :{VEHICLE}
STR_WAYPOINT_NAME :{WAYPOINT}
STR_CURRENCY_SHORT_KILO :{NBSP}k
STR_CURRENCY_SHORT_MEGA :{NBSP}m
STR_CURRENCY_SHORT_GIGA :b
STR_CURRENCY_SHORT_TERA :t
STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}

View File

@ -1504,7 +1504,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ak je zapnuté,
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatická obnova dopravných prostriedkov, keď sú staré: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ak je zapnuté, vozidlá blížiace sa ku koncu svojej životnosti budú automaticky vymenené ak sú splnené podmienky na výmenu.

View File

@ -1466,7 +1466,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Če je omogoče
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Samoobnovi vozila, ko se postarajo: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Če je omogočeno, se vozila ob koncu življenjske dobe avtomatsko zamenjajo pod pogoji samoobnove.

View File

@ -1522,7 +1522,6 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
###setting-zero-is-special
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tiempo de calendario congelado)
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renovación automática de vehículos cuando se vuelven viejos: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Cuando se activa, los vehículos próximos al final de su vida útil serán reemplazados automáticamente, siempre y cuando se cumplan las condiciones de renovación

View File

@ -1399,7 +1399,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Todos los model
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renovar automáticamente vehículos viejos: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Los vehículos próximos al final de su vida útil serán renovados automáticamente, siempre y cuando se cumplan las condiciones de renovación

View File

@ -1448,7 +1448,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Om det är akti
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Förnya fordon automatiskt när de blir gamla: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Om det är aktiverat kommer ett fordon som närmar sig slutet av sin livslängd automatiskt att bytas ut när villkoren för förnyelse är uppfyllda

View File

@ -1304,7 +1304,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :வாகனங
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :வாகனங்கள் காலாவதியானால் தானாக மாற்றியமை: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :செயலாக்க செய்யப்பட்டால், வாகனங்கள் காலாவதியாவதற்கு முன்னால் தானாக மாற்றியமைக்கப்படும்

View File

@ -1321,7 +1321,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :เมื่อ
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :เปลี่ยนยานพาหนะใหม่โดยอัตโนมัติเมื่อเก่าเกินไป: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :เมื่อเปิดใช้งาน พาหนะที่ใกล้หมดอายุการใช้งาน จะทำการแทนที่ใหม่เอง

View File

@ -1442,7 +1442,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :如啟用此選
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :車輛達到使用年限時自動更新:{STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :如啟用此選項,所有在符合替換條件時進入維修設施的車輛會被替換。

View File

@ -1458,7 +1458,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Etkinleştirild
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Araç eskiyince otomatik olarak yenile: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Etkinleştirildiğinde, yenileme koşulları sağlandığı takdirde ömrünün sonuna yaklaşan bir araç otomatik olarak yenilenir.

View File

@ -1546,7 +1546,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При вклю
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автозаміна зношених транспортних засобів: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :При включенні транспортні засоби з вичерпаним строком служби автоматично замінюються на нові (при виконанні умов автозаміни).

View File

@ -1174,7 +1174,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :گاڑیوں ک
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :گاڑی پرانی ہونے کی صورت میں خودکار طریقے سے بدل دیں: {STRING}
###length 2

View File

@ -261,7 +261,6 @@ STR_UNITS_DAYS :{COMMA}{NBSP}ng
STR_UNITS_SECONDS :{COMMA}{NBSP}giây
STR_UNITS_TICKS :{COMMA}{NBSP}tick
STR_UNITS_MONTHS :{NUM}{NBSP}tháng
# Common window strings
@ -818,7 +817,6 @@ STR_STATUSBAR_AUTOSAVE :{RED}LƯU TỰ
STR_STATUSBAR_SAVING_GAME :{RED}* * ĐANG LƯU GAME * *
STR_STATUSBAR_SPECTATOR :{WHITE}(người xem)
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(tiền vô hạn)
# News message history
STR_MESSAGE_HISTORY :{WHITE}Lịch Sử Thông Điệp
@ -920,10 +918,6 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Lời đề nghị trợ cấp đã hết hạn:{}{}{STRING} từ {STRING} đến {STRING} bây giờ sẽ không có trợ cấp.
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Trợ cấp đã hết:{}{}Dịch vụ vận chuyển {STRING} từ {STRING} đến {STRING} sẽ không được trợ cấp nữa.
###length 4
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Trợ cấp dịch vụ được trao cho {STRING}!{}{}{STRING} từ {STRING} đến {STRING} sẽ thu lợi cao hơn 50% trong vòng {UNITS_YEARS_OR_MINUTES} năm tới!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Trợ cấp dịch vụ được trao cho {STRING}!{}{}{STRING} từ {STRING} đến {STRING} sẽ thu lợi gấp đôi trong vòng {UNITS_YEARS_OR_MINUTES} năm tới!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Trợ cấp dịch vụ được trao cho {STRING}!{}{}{STRING} từ {STRING} đến {STRING} sẽ thu lợi gấp ba trong vòng {UNITS_YEARS_OR_MINUTES}!
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Trợ cấp dịch vụ được trao cho {STRING}!{}{}{STRING} từ {STRING} đến {STRING} sẽ thu lợi gấp tư trong vòng {UNITS_YEARS_OR_MINUTES}!
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Độc quyền vận tải!
@ -1275,7 +1269,6 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION :Thời hạn tr
###length 2
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Đặt số năm được hưởng trợ cấp dịch vụ
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS}
###setting-zero-is-special
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Không có trợ cấp
@ -1465,12 +1458,10 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Phương tiện
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Nếu bật, tất cả các model phương tiện sẽ không bị lỗi thời
###length 2
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Lịch
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Tự thay mới phương tiện nếu hết hạn sử dụng: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Nếu bật, phương tiện gần hết hạn sẽ được tự động thay mới và điều kiện thay mới được thỏa mãn
@ -2699,7 +2690,6 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA
# Linkgraph tooltip
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} sẽ được hoàn chuyển ({COMMA}% dung lượng)
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Thời gian đi lại trung bình: {UNITS_DAYS_OR_SECONDS}
# Base for station construction window(s)
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Hiện rõ vùng phủ ảnh hưởng
@ -4177,7 +4167,6 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :toa xe điện
STR_ENGINE_PREVIEW_AIRCRAFT :máy bay
STR_ENGINE_PREVIEW_SHIP :tàu thuỷ
STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING}
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}Thay thế {STRING} - {STRING}

View File

@ -1347,7 +1347,6 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Pan fo wedi'i a
###setting-zero-is-special
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Awtoadnewyddu cerbyd pan aiff yn hen: {STRING}
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Pan fo wedi'i alluogi, bydd cerbyd sy'n agos at ddiwedd ei oes yn cael ei ddisodli'n ddiofyn pan y caiff yr amodau adnewyddu eu cyflawni

View File

@ -96,7 +96,7 @@ CommandCost CmdDecreaseLoan(DoCommandFlag flags, LoanCommand cmd, Money amount)
loan = std::min(c->current_loan, (Money)LOAN_INTERVAL);
break;
case LoanCommand::Max: // Pay back as much as possible
loan = std::max(std::min(c->current_loan, GetAvailableMoneyForCommand()), (Money)LOAN_INTERVAL);
loan = std::max(std::min(c->current_loan, c->money), (Money)LOAN_INTERVAL);
loan -= loan % LOAN_INTERVAL;
break;
case LoanCommand::Amount: // Repay the given amount of loan
@ -105,7 +105,7 @@ CommandCost CmdDecreaseLoan(DoCommandFlag flags, LoanCommand cmd, Money amount)
break;
}
if (GetAvailableMoneyForCommand() < loan) {
if (c->money < loan) {
SetDParam(0, loan);
return_cmd_error(STR_ERROR_CURRENCY_REQUIRED);
}

View File

@ -633,8 +633,6 @@ public:
void OnFailure() override
{
Debug(net, 9, "Query::OnFailure(): connection_string={}", this->connection_string);
NetworkGameList *item = NetworkGameListAddItem(connection_string);
item->status = NGLS_OFFLINE;
item->refreshing = false;
@ -644,8 +642,6 @@ public:
void OnConnect(SOCKET s) override
{
Debug(net, 9, "Query::OnConnect(): connection_string={}", this->connection_string);
QueryNetworkGameSocketHandler::QueryServer(s, this->connection_string);
}
};
@ -658,8 +654,6 @@ void NetworkQueryServer(const std::string &connection_string)
{
if (!_network_available) return;
Debug(net, 9, "NetworkQueryServer(): connection_string={}", connection_string);
/* Mark the entry as refreshing, so the GUI can show the refresh is pending. */
NetworkGameList *item = NetworkGameListAddItem(connection_string);
item->refreshing = true;
@ -736,15 +730,11 @@ public:
void OnFailure() override
{
Debug(net, 9, "Client::OnFailure(): connection_string={}", this->connection_string);
ShowNetworkError(STR_NETWORK_ERROR_NOCONNECTION);
}
void OnConnect(SOCKET s) override
{
Debug(net, 9, "Client::OnConnect(): connection_string={}", this->connection_string);
_networking = true;
new ClientNetworkGameSocketHandler(s, this->connection_string);
IConsoleCmdExec("exec scripts/on_client.scr 0");
@ -771,8 +761,6 @@ public:
*/
bool NetworkClientConnectGame(const std::string &connection_string, CompanyID default_company, const std::string &join_server_password, const std::string &join_company_password)
{
Debug(net, 9, "NetworkClientConnectGame(): connection_string={}", connection_string);
CompanyID join_as = default_company;
std::string resolved_connection_string = ServerAddress::Parse(connection_string, NETWORK_DEFAULT_PORT, &join_as).connection_string;
@ -809,7 +797,6 @@ void NetworkClientJoinGame()
NetworkInitialize();
_settings_client.network.last_joined = _network_join.connection_string;
Debug(net, 9, "status = CONNECTING");
_network_join_status = NETWORK_JOIN_STATUS_CONNECTING;
ShowJoinStatusWindow();

View File

@ -338,11 +338,7 @@ static_assert(NETWORK_SERVER_ID_LENGTH == MD5_HASH_BYTES * 2 + 1);
/** Tell the server we would like to join. */
NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin()
{
Debug(net, 9, "Client::SendJoin()");
Debug(net, 9, "Client::status = JOIN");
my_client->status = STATUS_JOIN;
Debug(net, 9, "Client::join_status = AUTHORIZING");
_network_join_status = NETWORK_JOIN_STATUS_AUTHORIZING;
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
@ -359,8 +355,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin()
/** Tell the server we got all the NewGRFs. */
NetworkRecvStatus ClientNetworkGameSocketHandler::SendNewGRFsOk()
{
Debug(net, 9, "Client::SendNewGRFsOk()");
Packet *p = new Packet(PACKET_CLIENT_NEWGRFS_CHECKED);
my_client->SendPacket(p);
return NETWORK_RECV_STATUS_OKAY;
@ -372,8 +366,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendNewGRFsOk()
*/
NetworkRecvStatus ClientNetworkGameSocketHandler::SendGamePassword(const std::string &password)
{
Debug(net, 9, "Client::SendGamePassword()");
Packet *p = new Packet(PACKET_CLIENT_GAME_PASSWORD);
p->Send_string(password);
my_client->SendPacket(p);
@ -386,8 +378,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGamePassword(const std::st
*/
NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const std::string &password)
{
Debug(net, 9, "Client::SendCompanyPassword()");
Packet *p = new Packet(PACKET_CLIENT_COMPANY_PASSWORD);
p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed));
my_client->SendPacket(p);
@ -397,9 +387,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const std:
/** Request the map from the server. */
NetworkRecvStatus ClientNetworkGameSocketHandler::SendGetMap()
{
Debug(net, 9, "Client::SendGetMap()");
Debug(net, 9, "Client::status = MAP_WAIT");
my_client->status = STATUS_MAP_WAIT;
Packet *p = new Packet(PACKET_CLIENT_GETMAP);
@ -410,9 +397,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGetMap()
/** Tell the server we received the complete map. */
NetworkRecvStatus ClientNetworkGameSocketHandler::SendMapOk()
{
Debug(net, 9, "Client::SendMapOk()");
Debug(net, 9, "Client::status = ACTIVE");
my_client->status = STATUS_ACTIVE;
Packet *p = new Packet(PACKET_CLIENT_MAP_OK);
@ -423,8 +407,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendMapOk()
/** Send an acknowledgement from the server's ticks. */
NetworkRecvStatus ClientNetworkGameSocketHandler::SendAck()
{
Debug(net, 9, "Client::SendAck()");
Packet *p = new Packet(PACKET_CLIENT_ACK);
p->Send_uint32(_frame_counter);
@ -439,8 +421,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendAck()
*/
NetworkRecvStatus ClientNetworkGameSocketHandler::SendCommand(const CommandPacket *cp)
{
Debug(net, 9, "Client::SendCommand(): cmd={}", cp->cmd);
Packet *p = new Packet(PACKET_CLIENT_COMMAND);
my_client->NetworkGameSocketHandler::SendCommand(p, cp);
@ -451,8 +431,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCommand(const CommandPacke
/** Send a chat-packet over the network */
NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action, DestType type, int dest, const std::string &msg, int64_t data)
{
Debug(net, 9, "Client::SendChat(): action={}, type={}, dest={}", action, type, dest);
Packet *p = new Packet(PACKET_CLIENT_CHAT);
p->Send_uint8 (action);
@ -468,8 +446,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action,
/** Send an error-packet over the network */
NetworkRecvStatus ClientNetworkGameSocketHandler::SendError(NetworkErrorCode errorno)
{
Debug(net, 9, "Client::SendError(): errorno={}", errorno);
Packet *p = new Packet(PACKET_CLIENT_ERROR);
p->Send_uint8(errorno);
@ -483,8 +459,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendError(NetworkErrorCode err
*/
NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetPassword(const std::string &password)
{
Debug(net, 9, "Client::SendSetPassword()");
Packet *p = new Packet(PACKET_CLIENT_SET_PASSWORD);
p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed));
@ -498,8 +472,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetPassword(const std::str
*/
NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetName(const std::string &name)
{
Debug(net, 9, "Client::SendSetName()");
Packet *p = new Packet(PACKET_CLIENT_SET_NAME);
p->Send_string(name);
@ -512,8 +484,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetName(const std::string
*/
NetworkRecvStatus ClientNetworkGameSocketHandler::SendQuit()
{
Debug(net, 9, "Client::SendSetName()");
Packet *p = new Packet(PACKET_CLIENT_QUIT);
my_client->SendPacket(p);
@ -527,8 +497,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendQuit()
*/
NetworkRecvStatus ClientNetworkGameSocketHandler::SendRCon(const std::string &pass, const std::string &command)
{
Debug(net, 9, "Client::SendRCon()");
Packet *p = new Packet(PACKET_CLIENT_RCON);
p->Send_string(pass);
p->Send_string(command);
@ -543,8 +511,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendRCon(const std::string &pa
*/
NetworkRecvStatus ClientNetworkGameSocketHandler::SendMove(CompanyID company, const std::string &password)
{
Debug(net, 9, "Client::SendMove(): company={}", company);
Packet *p = new Packet(PACKET_CLIENT_MOVE);
p->Send_uint8(company);
p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed));
@ -571,8 +537,6 @@ extern bool SafeLoad(const std::string &filename, SaveLoadOperation fop, Detaile
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
{
Debug(net, 9, "Client::Receive_SERVER_FULL()");
/* We try to join a server which is full */
ShowErrorMessage(STR_NETWORK_ERROR_SERVER_FULL, INVALID_STRING_ID, WL_CRITICAL);
@ -581,8 +545,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *)
{
Debug(net, 9, "Client::Receive_SERVER_BANNED()");
/* We try to join a server where we are banned */
ShowErrorMessage(STR_NETWORK_ERROR_SERVER_BANNED, INVALID_STRING_ID, WL_CRITICAL);
@ -598,8 +560,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac
ClientID client_id = (ClientID)p->Recv_uint32();
CompanyID playas = (CompanyID)p->Recv_uint8();
Debug(net, 9, "Client::Receive_SERVER_CLIENT_INFO(): client_id={}, playas={}", client_id, playas);
std::string name = p->Recv_string(NETWORK_NAME_LENGTH);
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
@ -679,8 +639,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p
NetworkErrorCode error = (NetworkErrorCode)p->Recv_uint8();
Debug(net, 9, "Client::Receive_SERVER_ERROR(): error={}", error);
StringID err = STR_NETWORK_ERROR_LOSTCONNECTION;
if (error < (ptrdiff_t)lengthof(network_error_strings)) err = network_error_strings[error];
/* In case of kicking a client, we assume there is a kick message in the packet if we can read one byte */
@ -704,8 +662,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(P
uint grf_count = p->Recv_uint8();
NetworkRecvStatus ret = NETWORK_RECV_STATUS_OKAY;
Debug(net, 9, "Client::Receive_SERVER_CHECK_NEWGRFS(): grf_count={}", grf_count);
/* Check all GRFs */
for (; grf_count > 0; grf_count--) {
GRFIdentifier c;
@ -733,11 +689,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(P
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_GAME_PASSWORD(Packet *)
{
if (this->status < STATUS_JOIN || this->status >= STATUS_AUTH_GAME) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::status = AUTH_GAME");
this->status = STATUS_AUTH_GAME;
Debug(net, 9, "Client::Receive_SERVER_NEED_GAME_PASSWORD()");
if (!_network_join.server_password.empty()) {
return SendGamePassword(_network_join.server_password);
}
@ -750,11 +703,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_GAME_PASSW
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet *p)
{
if (this->status < STATUS_JOIN || this->status >= STATUS_AUTH_COMPANY) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::status = AUTH_COMPANY");
this->status = STATUS_AUTH_COMPANY;
Debug(net, 9, "Client::Receive_SERVER_NEED_COMPANY_PASSWORD()");
_password_game_seed = p->Recv_uint32();
_password_server_id = p->Recv_string(NETWORK_SERVER_ID_LENGTH);
if (this->HasClientQuit()) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
@ -771,13 +721,10 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PA
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet *p)
{
if (this->status < STATUS_JOIN || this->status >= STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::status = AUTHORIZED");
this->status = STATUS_AUTHORIZED;
_network_own_client_id = (ClientID)p->Recv_uint32();
Debug(net, 9, "Client::Receive_SERVER_WELCOME(): client_id={}", _network_own_client_id);
/* Initialize the password hash salting variables, even if they were previously. */
_password_game_seed = p->Recv_uint32();
_password_server_id = p->Recv_string(NETWORK_SERVER_ID_LENGTH);
@ -791,10 +738,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WAIT(Packet *p)
/* We set the internal wait state when requesting the map. */
if (this->status != STATUS_MAP_WAIT) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::Receive_SERVER_WAIT()");
/* But... only now we set the join status to waiting, instead of requesting. */
Debug(net, 9, "Client::join_status = WAITING");
_network_join_status = NETWORK_JOIN_STATUS_WAITING;
_network_join_waiting = p->Recv_uint8();
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
@ -805,7 +749,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WAIT(Packet *p)
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_BEGIN(Packet *p)
{
if (this->status < STATUS_AUTHORIZED || this->status >= STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::status = MAP");
this->status = STATUS_MAP;
if (this->savegame != nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
@ -814,12 +757,9 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_BEGIN(Packe
_frame_counter = _frame_counter_server = _frame_counter_max = p->Recv_uint32();
Debug(net, 9, "Client::Receive_SERVER_MAP_BEGIN(): frame_counter={}", _frame_counter);
_network_join_bytes = 0;
_network_join_bytes_total = 0;
Debug(net, 9, "Client::join_status = DOWNLOADING");
_network_join_status = NETWORK_JOIN_STATUS_DOWNLOADING;
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
@ -834,8 +774,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_SIZE(Packet
_network_join_bytes_total = p->Recv_uint32();
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
Debug(net, 9, "Client::Receive_SERVER_MAP_SIZE(): bytes_total={}", _network_join_bytes_total);
return NETWORK_RECV_STATUS_OKAY;
}
@ -858,9 +796,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet
if (this->status != STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->savegame == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::Receive_SERVER_MAP_DONE()");
Debug(net, 9, "Client::join_status = PROCESSING");
_network_join_status = NETWORK_JOIN_STATUS_PROCESSING;
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
@ -902,7 +837,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet
if (_network_join.company != COMPANY_SPECTATOR) {
/* We have arrived and ready to start playing; send a command to make a new company;
* the server will give us a client-id and let us in */
Debug(net, 9, "Client::join_status = REGISTERING");
_network_join_status = NETWORK_JOIN_STATUS_REGISTERING;
ShowJoinStatusWindow();
Command<CMD_COMPANY_CTRL>::SendNet(STR_NULL, _local_company, CCA_NEW, INVALID_COMPANY, CRR_NONE, INVALID_CLIENT_ID);
@ -941,6 +875,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FRAME(Packet *p
/* Receive the token. */
if (p->CanReadFromPacket(sizeof(uint8_t))) this->token = p->Recv_uint8();
Debug(net, 7, "Received FRAME {}", _frame_counter_server);
/* Let the server know that we received this frame correctly
* We do this only once per day, to save some bandwidth ;) */
if (!_network_first_time && last_ack_frame < _frame_counter) {
@ -962,8 +898,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_SYNC(Packet *p)
_sync_seed_2 = p->Recv_uint32();
#endif
Debug(net, 9, "Client::Receive_SERVER_SYNC(): sync_frame={}, sync_seed_1={}", _sync_frame, _sync_seed_1);
return NETWORK_RECV_STATUS_OKAY;
}
@ -976,8 +910,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMMAND(Packet
cp.frame = p->Recv_uint32();
cp.my_cmd = p->Recv_bool();
Debug(net, 9, "Client::Receive_SERVER_COMMAND(): cmd={}, frame={}", cp.cmd, cp.frame);
if (err != nullptr) {
IConsolePrint(CC_WARNING, "Dropping server connection due to {}.", err);
return NETWORK_RECV_STATUS_MALFORMED_PACKET;
@ -1001,8 +933,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHAT(Packet *p)
std::string msg = p->Recv_string(NETWORK_CHAT_LENGTH);
int64_t data = p->Recv_uint64();
Debug(net, 9, "Client::Receive_SERVER_CHAT(): action={}, client_id={}, self_send={}", action, client_id, self_send);
ci_to = NetworkClientInfo::GetByClientID(client_id);
if (ci_to == nullptr) return NETWORK_RECV_STATUS_OKAY;
@ -1048,8 +978,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_EXTERNAL_CHAT(P
std::string user = p->Recv_string(NETWORK_CHAT_LENGTH);
std::string msg = p->Recv_string(NETWORK_CHAT_LENGTH);
Debug(net, 9, "Client::Receive_SERVER_EXTERNAL_CHAT(): source={}", source);
if (!IsValidConsoleColour(colour)) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
NetworkTextMessage(NETWORK_ACTION_EXTERNAL_CHAT, colour, false, user, msg, 0, source);
@ -1063,8 +991,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR_QUIT(Pack
ClientID client_id = (ClientID)p->Recv_uint32();
Debug(net, 9, "Client::Receive_SERVER_ERROR_QUIT(): client_id={}", client_id);
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
if (ci != nullptr) {
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, "", GetNetworkErrorMsg((NetworkErrorCode)p->Recv_uint8()));
@ -1082,8 +1008,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_QUIT(Packet *p)
ClientID client_id = (ClientID)p->Recv_uint32();
Debug(net, 9, "Client::Receive_SERVER_QUIT(): client_id={}", client_id);
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
if (ci != nullptr) {
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, "", STR_NETWORK_MESSAGE_CLIENT_LEAVING);
@ -1104,8 +1028,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_JOIN(Packet *p)
ClientID client_id = (ClientID)p->Recv_uint32();
Debug(net, 9, "Client::Receive_SERVER_JOIN(): client_id={}", client_id);
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
if (ci != nullptr) {
NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, ci->client_name);
@ -1118,8 +1040,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_JOIN(Packet *p)
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_SHUTDOWN(Packet *)
{
Debug(net, 9, "Client::Receive_SERVER_SHUTDOWN()");
/* Only when we're trying to join we really
* care about the server shutting down. */
if (this->status >= STATUS_JOIN) {
@ -1133,8 +1053,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_SHUTDOWN(Packet
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEWGAME(Packet *)
{
Debug(net, 9, "Client::Receive_SERVER_NEWGAME()");
/* Only when we're trying to join we really
* care about the server shutting down. */
if (this->status >= STATUS_JOIN) {
@ -1154,8 +1072,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_RCON(Packet *p)
{
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::Receive_SERVER_RCON()");
TextColour colour_code = (TextColour)p->Recv_uint16();
if (!IsValidConsoleColour(colour_code)) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
@ -1174,8 +1090,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MOVE(Packet *p)
ClientID client_id = (ClientID)p->Recv_uint32();
CompanyID company_id = (CompanyID)p->Recv_uint8();
Debug(net, 9, "Client::Receive_SERVER_MOVE(): client_id={}, comapny_id={}", client_id, company_id);
if (client_id == 0) {
/* definitely an invalid client id, debug message and do nothing. */
Debug(net, 1, "Received invalid client index = 0");
@ -1204,8 +1118,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(P
_network_server_name = p->Recv_string(NETWORK_NAME_LENGTH);
SetWindowClassesDirty(WC_CLIENT_LIST);
Debug(net, 9, "Client::Receive_SERVER_CONFIG_UPDATE(): max_companies={}", _network_server_max_companies);
return NETWORK_RECV_STATUS_OKAY;
}
@ -1217,8 +1129,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMPANY_UPDATE(
_network_company_passworded = p->Recv_uint16();
SetWindowClassesDirty(WC_COMPANY);
Debug(net, 9, "Client::Receive_SERVER_COMPANY_UPDATE()");
return NETWORK_RECV_STATUS_OKAY;
}
@ -1258,9 +1168,6 @@ void NetworkClient_Connected()
_frame_counter = 0;
_frame_counter_server = 0;
last_ack_frame = 0;
Debug(net, 9, "Client::NetworkClient_Connected()");
/* Request the game-info */
MyClient::SendJoin();
}

View File

@ -1677,18 +1677,6 @@ public:
void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
{
switch (widget) {
case WID_CL_SERVER_NAME:
case WID_CL_CLIENT_NAME:
if (widget == WID_CL_SERVER_NAME) {
SetDParamStr(0, _network_server ? _settings_client.network.server_name : _network_server_name);
} else {
const NetworkClientInfo *own_ci = NetworkClientInfo::GetByClientID(_network_own_client_id);
SetDParamStr(0, own_ci != nullptr ? own_ci->client_name : _settings_client.network.client_name);
}
*size = GetStringBoundingBox(STR_JUST_RAW_STRING);
size->width = std::min(size->width, static_cast<uint>(ScaleGUITrad(200))); // By default, don't open the window too wide.
break;
case WID_CL_SERVER_VISIBILITY:
*size = maxdim(maxdim(GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_LOCAL), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_PUBLIC)), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY));
size->width += padding.width;

View File

@ -81,16 +81,12 @@ void QueryNetworkGameSocketHandler::Send()
*/
NetworkRecvStatus QueryNetworkGameSocketHandler::SendGameInfo()
{
Debug(net, 9, "Query::SendGameInfo()");
this->SendPacket(new Packet(PACKET_CLIENT_GAME_INFO));
return NETWORK_RECV_STATUS_OKAY;
}
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
{
Debug(net, 9, "Query::Receive_SERVER_FULL()");
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
item->status = NGLS_FULL;
item->refreshing = false;
@ -102,8 +98,6 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *)
{
Debug(net, 9, "Query::Receive_SERVER_BANNED()");
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
item->status = NGLS_BANNED;
item->refreshing = false;
@ -115,8 +109,6 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *)
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet *p)
{
Debug(net, 9, "Query::Receive_SERVER_GAME_INFO()");
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
/* Clear any existing GRFConfig chain. */
@ -138,8 +130,6 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p)
{
NetworkErrorCode error = (NetworkErrorCode)p->Recv_uint8();
Debug(net, 9, "Query::Receive_SERVER_ERROR(): error={}", error);
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
if (error == NETWORK_ERROR_NOT_EXPECTED) {

View File

@ -215,8 +215,6 @@ ServerNetworkGameSocketHandler::ServerNetworkGameSocketHandler(SOCKET s) : Netwo
this->client_id = _network_client_id++;
this->receive_limit = _settings_client.network.bytes_per_frame_burst;
Debug(net, 9, "client[{}] status = INACTIVE", this->client_id);
/* The Socket and Info pools need to be the same in size. After all,
* each Socket will be associated with at most one Info object. As
* such if the Socket was allocated the Info object can as well. */
@ -347,8 +345,6 @@ static void NetworkHandleCommandQueue(NetworkClientSocket *cs);
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendClientInfo(NetworkClientInfo *ci)
{
Debug(net, 9, "client[{}] SendClientInfo(): client_id={}", this->client_id, ci->client_id);
if (ci->client_id != INVALID_CLIENT_ID) {
Packet *p = new Packet(PACKET_SERVER_CLIENT_INFO);
p->Send_uint32(ci->client_id);
@ -363,8 +359,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendClientInfo(NetworkClientIn
/** Send the client information about the server. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendGameInfo()
{
Debug(net, 9, "client[{}] SendGameInfo()", this->client_id);
Packet *p = new Packet(PACKET_SERVER_GAME_INFO, TCP_MTU);
SerializeNetworkGameInfo(p, GetCurrentNetworkServerGameInfo());
@ -380,8 +374,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendGameInfo()
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode error, const std::string &reason)
{
Debug(net, 9, "client[{}] SendError(): error={}", this->client_id, error);
Packet *p = new Packet(PACKET_SERVER_ERROR);
p->Send_uint8(error);
@ -425,8 +417,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err
/** Send the check for the NewGRFs. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck()
{
Debug(net, 9, "client[{}] SendNewGRFCheck()", this->client_id);
Packet *p = new Packet(PACKET_SERVER_CHECK_NEWGRFS, TCP_MTU);
const GRFConfig *c;
uint grf_count = 0;
@ -447,12 +437,9 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck()
/** Request the game password. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword()
{
Debug(net, 9, "client[{}] SendNeedGamePassword()", this->client_id);
/* Invalid packet when status is STATUS_AUTH_GAME or higher */
if (this->status >= STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
Debug(net, 9, "client[{}] status = AUTH_GAME", this->client_id);
this->status = STATUS_AUTH_GAME;
/* Reset 'lag' counters */
this->last_frame = this->last_frame_server = _frame_counter;
@ -465,12 +452,9 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword()
/** Request the company password. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword()
{
Debug(net, 9, "client[{}] SendNeedCompanyPassword()", this->client_id);
/* Invalid packet when status is STATUS_AUTH_COMPANY or higher */
if (this->status >= STATUS_AUTH_COMPANY) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
Debug(net, 9, "client[{}] status = AUTH_COMPANY", this->client_id);
this->status = STATUS_AUTH_COMPANY;
/* Reset 'lag' counters */
this->last_frame = this->last_frame_server = _frame_counter;
@ -485,14 +469,11 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword()
/** Send the client a welcome message with some basic information. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome()
{
Debug(net, 9, "client[{}] SendWelcome()", this->client_id);
Packet *p;
/* Invalid packet when status is AUTH or higher */
if (this->status >= STATUS_AUTHORIZED) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
Debug(net, 9, "client[{}] status = AUTHORIZED", this->client_id);
this->status = STATUS_AUTHORIZED;
/* Reset 'lag' counters */
this->last_frame = this->last_frame_server = _frame_counter;
@ -518,8 +499,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome()
/** Tell the client that its put in a waiting queue. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendWait()
{
Debug(net, 9, "client[{}] SendWait()", this->client_id);
int waiting = 1; // current player getting the map counts as 1
Packet *p;
@ -537,8 +516,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWait()
void ServerNetworkGameSocketHandler::CheckNextClientToSendMap(NetworkClientSocket *ignore_cs)
{
Debug(net, 9, "client[{}] CheckNextClientToSendMap()", this->client_id);
/* Find the best candidate for joining, i.e. the first joiner. */
NetworkClientSocket *best = nullptr;
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
@ -573,8 +550,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
}
if (this->status == STATUS_AUTHORIZED) {
Debug(net, 9, "client[{}] SendMap(): first_packet", this->client_id);
WaitTillSaved();
this->savegame = new PacketWriter(this);
@ -584,7 +559,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
this->SendPacket(p);
NetworkSyncCommandQueue(this);
Debug(net, 9, "client[{}] status = MAP", this->client_id);
this->status = STATUS_MAP;
/* Mark the start of download */
this->last_frame = _frame_counter;
@ -597,15 +571,12 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
if (this->status == STATUS_MAP) {
bool last_packet = this->savegame->TransferToNetworkQueue(this);
if (last_packet) {
Debug(net, 9, "client[{}] SendMap(): last_packet", this->client_id);
/* Done reading, make sure saving is done as well */
this->savegame->Destroy();
this->savegame = nullptr;
/* Set the status to DONE_MAP, no we will wait for the client
* to send it is ready (maybe that happens like never ;)) */
Debug(net, 9, "client[{}] status = DONE_MAP", this->client_id);
this->status = STATUS_DONE_MAP;
this->CheckNextClientToSendMap();
@ -620,8 +591,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendJoin(ClientID client_id)
{
Debug(net, 9, "client[{}] SendJoin(): client_id={}", this->client_id, client_id);
Packet *p = new Packet(PACKET_SERVER_JOIN);
p->Send_uint32(client_id);
@ -656,8 +625,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendFrame()
/** Request the client to sync. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendSync()
{
Debug(net, 9, "client[{}] SendSync(), frame_counter={}, sync_seed_1={}", this->client_id, _frame_counter, _sync_seed_1);
Packet *p = new Packet(PACKET_SERVER_SYNC);
p->Send_uint32(_frame_counter);
p->Send_uint32(_sync_seed_1);
@ -675,8 +642,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendSync()
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendCommand(const CommandPacket *cp)
{
Debug(net, 9, "client[{}] SendCommand(): cmd={}", this->client_id, cp->cmd);
Packet *p = new Packet(PACKET_SERVER_COMMAND);
this->NetworkGameSocketHandler::SendCommand(p, cp);
@ -697,8 +662,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCommand(const CommandPacke
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action, ClientID client_id, bool self_send, const std::string &msg, int64_t data)
{
Debug(net, 9, "client[{}] SendChat(): action={}, client_id={}, self_send={}", this->client_id, action, client_id, self_send);
if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY;
Packet *p = new Packet(PACKET_SERVER_CHAT);
@ -722,8 +685,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action,
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendExternalChat(const std::string &source, TextColour colour, const std::string &user, const std::string &msg)
{
Debug(net, 9, "client[{}] SendExternalChat(): source={}", this->client_id, source);
if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY;
Packet *p = new Packet(PACKET_SERVER_EXTERNAL_CHAT);
@ -744,8 +705,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendExternalChat(const std::st
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendErrorQuit(ClientID client_id, NetworkErrorCode errorno)
{
Debug(net, 9, "client[{}] SendErrorQuit(): client_id={}, errorno={}", this->client_id, client_id, errorno);
Packet *p = new Packet(PACKET_SERVER_ERROR_QUIT);
p->Send_uint32(client_id);
@ -761,8 +720,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendErrorQuit(ClientID client_
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendQuit(ClientID client_id)
{
Debug(net, 9, "client[{}] SendQuit(): client_id={}", this->client_id, client_id);
Packet *p = new Packet(PACKET_SERVER_QUIT);
p->Send_uint32(client_id);
@ -774,8 +731,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendQuit(ClientID client_id)
/** Tell the client we're shutting down. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendShutdown()
{
Debug(net, 9, "client[{}] SendShutdown()", this->client_id);
Packet *p = new Packet(PACKET_SERVER_SHUTDOWN);
this->SendPacket(p);
return NETWORK_RECV_STATUS_OKAY;
@ -784,8 +739,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendShutdown()
/** Tell the client we're starting a new game. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGame()
{
Debug(net, 9, "client[{}] SendNewGame()", this->client_id);
Packet *p = new Packet(PACKET_SERVER_NEWGAME);
this->SendPacket(p);
return NETWORK_RECV_STATUS_OKAY;
@ -798,8 +751,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGame()
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendRConResult(uint16_t colour, const std::string &command)
{
Debug(net, 9, "client[{}] SendRConResult()", this->client_id);
Packet *p = new Packet(PACKET_SERVER_RCON);
p->Send_uint16(colour);
@ -815,8 +766,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendRConResult(uint16_t colour
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendMove(ClientID client_id, CompanyID company_id)
{
Debug(net, 9, "client[{}] SendMove(): client_id={}", this->client_id, client_id);
Packet *p = new Packet(PACKET_SERVER_MOVE);
p->Send_uint32(client_id);
@ -828,8 +777,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMove(ClientID client_id, C
/** Send an update about the company password states. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate()
{
Debug(net, 9, "client[{}] SendCompanyUpdate()", this->client_id);
Packet *p = new Packet(PACKET_SERVER_COMPANY_UPDATE);
static_assert(sizeof(_network_company_passworded) <= sizeof(uint16_t));
@ -841,8 +788,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate()
/** Send an update about the max company/spectator counts. */
NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate()
{
Debug(net, 9, "client[{}] SendConfigUpdate()", this->client_id);
Packet *p = new Packet(PACKET_SERVER_CONFIG_UPDATE);
p->Send_uint8(_settings_client.network.max_companies);
@ -858,8 +803,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate()
NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GAME_INFO(Packet *)
{
Debug(net, 9, "client[{}] Receive_CLIENT_GAME_INFO()", this->client_id);
return this->SendGameInfo();
}
@ -870,8 +813,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_NEWGRFS_CHECKED
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
}
Debug(net, 9, "client[{}] Receive_CLIENT_NEWGRFS_CHECKED()", this->client_id);
NetworkClientInfo *ci = this->GetInfo();
/* We now want a password from the client else we do not allow them in! */
@ -901,8 +842,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet *p)
std::string client_revision = p->Recv_string(NETWORK_REVISION_LENGTH);
uint32_t newgrf_version = p->Recv_uint32();
Debug(net, 9, "client[{}] Receive_CLIENT_JOIN(): client_revision={}, newgrf_version={}", this->client_id, client_revision, newgrf_version);
/* Check if the client has revision control enabled */
if (!IsNetworkCompatibleVersion(client_revision) || _openttd_newgrf_version != newgrf_version) {
/* Different revisions!! */
@ -953,7 +892,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet *p)
/* Make sure companies to which people try to join are not autocleaned */
if (Company::IsValidID(playas)) _network_company_states[playas].months_empty = 0;
Debug(net, 9, "client[{}] status = NEWGRFS_CHECK", this->client_id);
this->status = STATUS_NEWGRFS_CHECK;
if (_grfconfig == nullptr) {
@ -970,8 +908,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GAME_PASSWORD(P
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
}
Debug(net, 9, "client[{}] Receive_CLIENT_GAME_PASSWORD()", this->client_id);
std::string password = p->Recv_string(NETWORK_PASSWORD_LENGTH);
/* Check game password. Allow joining if we cleared the password meanwhile */
@ -996,8 +932,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWOR
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
}
Debug(net, 9, "client[{}] Receive_CLIENT_COMPANY_PASSWORD()", this->client_id);
std::string password = p->Recv_string(NETWORK_PASSWORD_LENGTH);
/* Check company password. Allow joining if we cleared the password meanwhile.
@ -1021,13 +955,10 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GETMAP(Packet *
return this->SendError(NETWORK_ERROR_NOT_AUTHORIZED);
}
Debug(net, 9, "client[{}] Receive_CLIENT_GETMAP()", this->client_id);
/* Check if someone else is receiving the map */
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs->status == STATUS_MAP) {
/* Tell the new client to wait */
Debug(net, 9, "client[{}] status = MAP_WAIT", this->client_id);
this->status = STATUS_MAP_WAIT;
return this->SendWait();
}
@ -1041,8 +972,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet *
{
/* Client has the map, now start syncing */
if (this->status == STATUS_DONE_MAP && !this->HasClientQuit()) {
Debug(net, 9, "client[{}] Receive_CLIENT_MAP_OK()", this->client_id);
std::string client_name = this->GetClientName();
NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, client_name, "", this->client_id);
@ -1052,7 +981,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet *
/* Mark the client as pre-active, and wait for an ACK
* so we know it is done loading and in sync with us */
Debug(net, 9, "client[{}] status = PRE_ACTIVE", this->client_id);
this->status = STATUS_PRE_ACTIVE;
NetworkHandleCommandQueue(this);
this->SendFrame();
@ -1099,8 +1027,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMMAND(Packet
return this->SendError(NETWORK_ERROR_TOO_MANY_COMMANDS);
}
Debug(net, 9, "client[{}] Receive_CLIENT_COMMAND()", this->client_id);
CommandPacket cp;
const char *err = this->ReceiveCommand(p, &cp);
@ -1160,8 +1086,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ERROR(Packet *p
* to us. Display the error and report it to the other clients */
NetworkErrorCode errorno = (NetworkErrorCode)p->Recv_uint8();
Debug(net, 9, "client[{}] Receive_CLIENT_ERROR(): errorno={}", this->client_id, errorno);
/* The client was never joined.. thank the client for the packet, but ignore it */
if (this->status < STATUS_DONE_MAP || this->HasClientQuit()) {
return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT);
@ -1192,8 +1116,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_QUIT(Packet *)
return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT);
}
Debug(net, 9, "client[{}] Receive_CLIENT_QUIT()", this->client_id);
/* The client wants to leave. Display this and report it to the other clients. */
std::string client_name = this->GetClientName();
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, "", STR_NETWORK_MESSAGE_CLIENT_LEAVING);
@ -1218,15 +1140,12 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ACK(Packet *p)
uint32_t frame = p->Recv_uint32();
Debug(net, 9, "client[{}] Receive_CLIENT_ACK(): frame={}", this->client_id, frame);
/* The client is trying to catch up with the server */
if (this->status == STATUS_PRE_ACTIVE) {
/* The client is not yet caught up? */
if (frame + Ticks::DAY_TICKS < _frame_counter) return NETWORK_RECV_STATUS_OKAY;
/* Now it is! Unpause the game */
Debug(net, 9, "client[{}] status = ACTIVE", this->client_id);
this->status = STATUS_ACTIVE;
this->last_token_frame = _frame_counter;
@ -1405,8 +1324,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_CHAT(Packet *p)
DestType desttype = (DestType)p->Recv_uint8();
int dest = p->Recv_uint32();
Debug(net, 9, "client[{}] Receive_CLIENT_CHAT(): action={}, desttype={}, dest={}", this->client_id, action, desttype, dest);
std::string msg = p->Recv_string(NETWORK_CHAT_LENGTH);
int64_t data = p->Recv_uint64();
@ -1431,8 +1348,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_SET_PASSWORD(Pa
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
}
Debug(net, 9, "client[{}] Receive_CLIENT_SET_PASSWORD()", this->client_id);
std::string password = p->Recv_string(NETWORK_PASSWORD_LENGTH);
const NetworkClientInfo *ci = this->GetInfo();
@ -1447,8 +1362,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_SET_NAME(Packet
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
}
Debug(net, 9, "client[{}] Receive_CLIENT_SET_NAME()", this->client_id);
NetworkClientInfo *ci;
std::string client_name = p->Recv_string(NETWORK_CLIENT_NAME_LENGTH);
@ -1480,8 +1393,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_RCON(Packet *p)
if (_settings_client.network.rcon_password.empty()) return NETWORK_RECV_STATUS_OKAY;
Debug(net, 9, "client[{}] Receive_CLIENT_RCON()", this->client_id);
std::string password = p->Recv_string(NETWORK_PASSWORD_LENGTH);
std::string command = p->Recv_string(NETWORK_RCONCOMMAND_LENGTH);
@ -1504,8 +1415,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MOVE(Packet *p)
CompanyID company_id = (Owner)p->Recv_uint8();
Debug(net, 9, "client[{}] Receive_CLIENT_MOVE(): company_id={}", this->client_id, company_id);
/* Check if the company is valid, we don't allow moving to AI companies */
if (company_id != COMPANY_SPECTATOR && !Company::IsValidHumanID(company_id)) return NETWORK_RECV_STATUS_OKAY;

View File

@ -38,8 +38,6 @@ public:
void OnFailure() override
{
Debug(net, 9, "Stun::OnFailure(): family={}", this->family);
this->stun_handler->connecter = nullptr;
/* Connection to STUN server failed. For example, the client doesn't
@ -50,8 +48,6 @@ public:
void OnConnect(SOCKET s) override
{
Debug(net, 9, "Stun::OnConnect(): family={}", this->family);
this->stun_handler->connecter = nullptr;
assert(this->stun_handler->sock == INVALID_SOCKET);
@ -75,8 +71,6 @@ void ClientNetworkStunSocketHandler::Connect(const std::string &token, uint8_t f
this->token = token;
this->family = family;
Debug(net, 9, "Stun::Connect(): family={}", this->family);
this->connecter = TCPConnecter::Create<NetworkStunConnecter>(this, NetworkStunConnectionString(), token, family);
}

View File

@ -32,8 +32,6 @@ public:
void OnFailure() override
{
Debug(net, 9, "Turn::OnFailure()");
this->handler->connecter = nullptr;
this->handler->ConnectFailure();
@ -41,8 +39,6 @@ public:
void OnConnect(SOCKET s) override
{
Debug(net, 9, "Turn::OnConnect()");
this->handler->connecter = nullptr;
this->handler->sock = s;
@ -51,8 +47,6 @@ public:
bool ClientNetworkTurnSocketHandler::Receive_TURN_ERROR(Packet *)
{
Debug(net, 9, "Receive_TURN_ERROR()");
this->ConnectFailure();
return false;
@ -60,8 +54,6 @@ bool ClientNetworkTurnSocketHandler::Receive_TURN_ERROR(Packet *)
bool ClientNetworkTurnSocketHandler::Receive_TURN_CONNECTED(Packet *p)
{
Debug(net, 9, "Receive_TURN_CONNECTED()");
std::string hostname = p->Recv_string(NETWORK_HOSTNAME_LENGTH);
/* Act like we no longer have a socket, as we are handing it over to the
@ -80,8 +72,6 @@ bool ClientNetworkTurnSocketHandler::Receive_TURN_CONNECTED(Packet *p)
*/
void ClientNetworkTurnSocketHandler::Connect()
{
Debug(net, 9, "Turn::Connect()");
this->connect_started = true;
this->connecter = TCPConnecter::Create<NetworkTurnConnecter>(this, this->connection_string);
}

View File

@ -24,7 +24,6 @@
*
* API removals:
* \li AIError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore.
* \li AIInfo::CONFIG_RANDOM, no longer used.
*
* Other changes:
* \li AIGroupList accepts an optional filter function

View File

@ -90,7 +90,6 @@
*
* API removals:
* \li GSError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore.
* \li AIInfo::CONFIG_RANDOM, no longer used.
*
* Other changes:
* \li GSGroupList accepts an optional filter function

View File

@ -203,6 +203,7 @@ public:
/** Miscellaneous flags for Script settings. */
enum ScriptConfigFlags {
CONFIG_NONE, ///< Normal setting.
CONFIG_RANDOM, ///< When randomizing the Script, pick any value between min_value and max_value (inclusive).
CONFIG_BOOLEAN, ///< This value is a boolean (either 0 (false) or 1 (true) ).
CONFIG_INGAME, ///< This setting can be changed while the Script is running.
CONFIG_DEVELOPER, ///< This setting will only be visible when the Script development tools are active.

View File

@ -34,6 +34,14 @@ void ScriptConfig::Change(std::optional<const std::string> name, int version, bo
this->ClearConfigList();
if (_game_mode == GM_NORMAL && this->info != nullptr) {
/* If we're in an existing game and the Script is changed, set all settings
* for the Script that have the random flag to a random value. */
for (const auto &item : *this->info->GetConfigList()) {
if (item.flags & SCRIPTCONFIG_RANDOM) {
this->SetSetting(item.name, ScriptObject::GetRandomizer(OWNER_NONE).Next(item.max_value + 1 - item.min_value) + item.min_value);
}
}
this->AddRandomDeviation();
}
}

View File

@ -20,7 +20,7 @@ static const int INT32_DIGITS_WITH_SIGN_AND_TERMINATION = 10 + 1 + 1;
/** Bitmask of flags for Script settings. */
enum ScriptConfigFlags {
SCRIPTCONFIG_NONE = 0x0, ///< No flags set.
// Unused flag 0x1.
SCRIPTCONFIG_RANDOM = 0x1, ///< When randomizing the Script, pick any value between min_value and max_value when on custom difficulty setting.
SCRIPTCONFIG_BOOLEAN = 0x2, ///< This value is a boolean (either 0 (false) or 1 (true) ).
SCRIPTCONFIG_INGAME = 0x4, ///< This setting can be changed while the Script is running.
SCRIPTCONFIG_DEVELOPER = 0x8, ///< This setting will only be visible when the Script development tools are active.

View File

@ -162,6 +162,12 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm)
}
sq_pop(vm, 1);
/* Don't allow both random_deviation and SCRIPTCONFIG_RANDOM to
* be set for the same config item. */
if ((items & 0x200) != 0 && (config.flags & SCRIPTCONFIG_RANDOM) != 0) {
this->engine->ThrowError("Setting both random_deviation and SCRIPTCONFIG_RANDOM is not allowed");
return SQ_ERROR;
}
/* Reset the bit for random_deviation as it's optional. */
items &= ~0x200;

View File

@ -3435,7 +3435,7 @@ TownActions GetMaskOfTownActions(CompanyID cid, const Town *t)
if (cid != COMPANY_SPECTATOR && !(_settings_game.economy.bribe && t->unwanted[cid])) {
/* Actions worth more than this are not able to be performed */
Money avail = GetAvailableMoney(cid);
Money avail = Company::Get(cid)->money;
/* Check the action bits for validity and
* if they are valid add them */

View File

@ -245,7 +245,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 = Company::IsValidID(_local_company) && action_cost < GetAvailableMoney(_local_company);
bool affordable = Company::IsValidID(_local_company) && action_cost < Company::Get(_local_company)->money;
SetDParam(0, action_cost);
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect),