mirror of https://github.com/OpenTTD/OpenTTD
Compare commits
5 Commits
232151788d
...
e28edf6945
Author | SHA1 | Date |
---|---|---|
|
e28edf6945 | |
|
ccaa383e85 | |
|
363e251a10 | |
|
bbae16574a | |
|
3e6ed6f44a |
|
@ -42,14 +42,14 @@ template <> const char *GetClassName<AIInfo, ScriptType::AI>() { return "AIInfo"
|
||||||
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddSetting, "AddSetting");
|
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddSetting, "AddSetting");
|
||||||
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddLabels, "AddLabels");
|
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddLabels, "AddLabels");
|
||||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_NONE");
|
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_NONE");
|
||||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_RANDOM, "CONFIG_RANDOM");
|
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_RANDOM"); // Deprecated, mapped to NONE.
|
||||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_BOOLEAN, "CONFIG_BOOLEAN");
|
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_BOOLEAN, "CONFIG_BOOLEAN");
|
||||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_INGAME, "CONFIG_INGAME");
|
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_INGAME, "CONFIG_INGAME");
|
||||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_DEVELOPER, "CONFIG_DEVELOPER");
|
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_DEVELOPER, "CONFIG_DEVELOPER");
|
||||||
|
|
||||||
/* Pre 1.2 had an AI prefix */
|
/* Pre 1.2 had an AI prefix */
|
||||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "AICONFIG_NONE");
|
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "AICONFIG_NONE");
|
||||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_RANDOM, "AICONFIG_RANDOM");
|
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "AICONFIG_RANDOM"); // Deprecated, mapped to NONE.
|
||||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_BOOLEAN, "AICONFIG_BOOLEAN");
|
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_BOOLEAN, "AICONFIG_BOOLEAN");
|
||||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_INGAME, "AICONFIG_INGAME");
|
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_INGAME, "AICONFIG_INGAME");
|
||||||
|
|
||||||
|
|
|
@ -836,17 +836,21 @@ static void CompaniesPayInterest()
|
||||||
/* Over a year the paid interest should be "loan * interest percentage",
|
/* Over a year the paid interest should be "loan * interest percentage",
|
||||||
* but... as that number is likely not dividable by 12 (pay each month),
|
* but... as that number is likely not dividable by 12 (pay each month),
|
||||||
* one needs to account for that in the monthly fee calculations.
|
* one needs to account for that in the monthly fee calculations.
|
||||||
|
*
|
||||||
* To easily calculate what one should pay "this" month, you calculate
|
* To easily calculate what one should pay "this" month, you calculate
|
||||||
* what (total) should have been paid up to this month and you subtract
|
* 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
|
* 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
|
* 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.
|
* monthly fee, but on average it will be exact.
|
||||||
|
*
|
||||||
* In order to prevent cheating or abuse (just not paying interest by not
|
* 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
|
* taking a loan) we make companies pay interest on negative cash as well,
|
||||||
|
* except if infinite money is enabled.
|
||||||
*/
|
*/
|
||||||
Money yearly_fee = c->current_loan * _economy.interest_rate / 100;
|
Money yearly_fee = c->current_loan * _economy.interest_rate / 100;
|
||||||
if (c->money < 0) {
|
Money available_money = GetAvailableMoney(c->index);
|
||||||
yearly_fee += -c->money *_economy.interest_rate / 100;
|
if (available_money < 0) {
|
||||||
|
yearly_fee += -available_money * _economy.interest_rate / 100;
|
||||||
}
|
}
|
||||||
Money up_to_previous_month = yearly_fee * TimerGameEconomy::month / 12;
|
Money up_to_previous_month = yearly_fee * TimerGameEconomy::month / 12;
|
||||||
Money up_to_this_month = yearly_fee * (TimerGameEconomy::month + 1) / 12;
|
Money up_to_this_month = yearly_fee * (TimerGameEconomy::month + 1) / 12;
|
||||||
|
|
|
@ -40,7 +40,7 @@ template <> const char *GetClassName<GameInfo, ScriptType::GS>() { return "GSInf
|
||||||
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddSetting, "AddSetting");
|
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddSetting, "AddSetting");
|
||||||
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddLabels, "AddLabels");
|
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddLabels, "AddLabels");
|
||||||
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_NONE");
|
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_NONE");
|
||||||
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_RANDOM, "CONFIG_RANDOM");
|
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_RANDOM"); // Deprecated, mapped to NONE.
|
||||||
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_BOOLEAN, "CONFIG_BOOLEAN");
|
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_BOOLEAN, "CONFIG_BOOLEAN");
|
||||||
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_INGAME, "CONFIG_INGAME");
|
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_INGAME, "CONFIG_INGAME");
|
||||||
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_DEVELOPER, "CONFIG_DEVELOPER");
|
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_DEVELOPER, "CONFIG_DEVELOPER");
|
||||||
|
|
|
@ -1334,6 +1334,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :As dit geaktive
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Outohernuwe voertuig as hy oud raak: {STRING}
|
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.
|
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.
|
||||||
|
|
||||||
|
|
|
@ -1269,6 +1269,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :المركبا
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :جدد العربات عندما تصبح قديمة : {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :جدد العربات عندما تصبح قديمة : {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :عند التمكين ، يتم استبدال العربة التي اقتربت من نهاية عمرها عند اكتمال شروط التجديد
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :عند التمكين ، يتم استبدال العربة التي اقتربت من نهاية عمرها عند اكتمال شروط التجديد
|
||||||
|
|
||||||
|
|
|
@ -1290,6 +1290,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Gaitua dagoenea
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Ibilgailu bat zahartzen denean automatikoki berritu: {STRING}
|
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
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Gaitua dagoenean, Ibilgailuek bere lan-bizitza amaitzear dutenean eta beharrezko baldintzak betetzen badira automatikoki berrituko dira
|
||||||
|
|
||||||
|
|
|
@ -1646,6 +1646,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Калі ўкл
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Аўтазамена старых транспартных сродкаў: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Аўтазамена старых транспартных сродкаў: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Калі ўключана, транспарт напрыканцы свайго пэўнага тэрміна службы будзе аўтаматычна заменены, калі ўмовы замены будуць выкананыя.
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Калі ўключана, транспарт напрыканцы свайго пэўнага тэрміна службы будзе аўтаматычна заменены, калі ўмовы замены будуць выкананыя.
|
||||||
|
|
||||||
|
|
|
@ -836,6 +836,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}Salvo Auto
|
||||||
STR_STATUSBAR_SAVING_GAME :{RED}* * SALVANDO JOGO * *
|
STR_STATUSBAR_SAVING_GAME :{RED}* * SALVANDO JOGO * *
|
||||||
|
|
||||||
STR_STATUSBAR_SPECTATOR :{WHITE}(espectador)
|
STR_STATUSBAR_SPECTATOR :{WHITE}(espectador)
|
||||||
|
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(dinheiro infinito)
|
||||||
|
|
||||||
# News message history
|
# News message history
|
||||||
STR_MESSAGE_HISTORY :{WHITE}Histórico de Mensagens
|
STR_MESSAGE_HISTORY :{WHITE}Histórico de Mensagens
|
||||||
|
@ -1288,6 +1289,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}segundo{P 0 "" s}
|
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 :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)
|
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantia máxima a ser emprestada para uma companhia (sem levar em conta a inflação)
|
||||||
|
@ -1522,6 +1525,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tempo do calendário congelado)
|
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 :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
|
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
|
||||||
|
|
||||||
|
@ -1940,7 +1944,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_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_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 :Ao arrastar, manter distância fixa entre os sinais: {STRING}
|
||||||
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_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_SEMAPHORE_BUILD_BEFORE_DATE :Construir sinaleiros até: {STRING}
|
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)
|
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)
|
||||||
|
@ -2394,7 +2398,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_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 :{BLACK}Data
|
||||||
STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Data atual
|
STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{BLACK}Data atual
|
||||||
STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}m
|
STR_NETWORK_SERVER_LIST_PLAY_TIME_SHORT :{BLACK}{NUM}h {NUM}min
|
||||||
STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Tempo de jogo
|
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_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.
|
STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Idioma, versão do servidor, etc.
|
||||||
|
@ -2412,7 +2416,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_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_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_CURRENT_DATE :{SILVER}Data atual: {WHITE}{DATE_SHORT}
|
||||||
STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Tempo de jogo: {WHITE}{NUM}h {NUM}m
|
STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Tempo de jogo: {WHITE}{NUM}h {NUM}min
|
||||||
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Script de jogo: {WHITE}{STRING} (v{NUM})
|
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_PASSWORD :{SILVER}Protegido por senha!
|
||||||
STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVIDOR DESLIGADO
|
STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}SERVIDOR DESLIGADO
|
||||||
|
@ -2805,7 +2809,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_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_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_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}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_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_BRIDGE :{BLACK}Construir ponte ferroviária. Shift alterna construir/mostrar 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_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
|
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
|
||||||
|
@ -5768,6 +5772,7 @@ STR_UNKNOWN_STATION :estação desco
|
||||||
STR_DEFAULT_SIGN_NAME :Placa
|
STR_DEFAULT_SIGN_NAME :Placa
|
||||||
STR_COMPANY_SOMEONE :alguém
|
STR_COMPANY_SOMEONE :alguém
|
||||||
|
|
||||||
|
STR_SAVEGAME_DURATION_REALTIME :{NUM}h {NUM}min
|
||||||
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
||||||
STR_SAVEGAME_NAME_SPECTATOR :Espectador, {1:STRING}
|
STR_SAVEGAME_NAME_SPECTATOR :Espectador, {1:STRING}
|
||||||
|
|
||||||
|
@ -5801,6 +5806,10 @@ STR_TOWN_NAME :{TOWN}
|
||||||
STR_VEHICLE_NAME :{VEHICLE}
|
STR_VEHICLE_NAME :{VEHICLE}
|
||||||
STR_WAYPOINT_NAME :{WAYPOINT}
|
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_CARGO :{CARGO_LONG}
|
||||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||||
|
|
|
@ -1313,6 +1313,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ако тази
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автоматично поднови превозното средство, когато остарее: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автоматично поднови превозното средство, когато остарее: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ако тази опция бъде активирана, дадено превозно средство ще бъде автоматично заменено когато е към края на своя живот, стига условията за това да са налице
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ако тази опция бъде активирана, дадено превозно средство ще бъде автоматично заменено когато е към края на своя живот, стига условията за това да са налице
|
||||||
|
|
||||||
|
|
|
@ -1484,6 +1484,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Rellotge de par
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenova el vehicle quan sigui vell: {STRING}
|
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ó.
|
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ó.
|
||||||
|
|
||||||
|
|
|
@ -663,6 +663,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аэропор
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1438,6 +1438,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kada je uključ
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatski obnovi vozilo kada postane staro: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1504,6 +1504,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Pokud je zapnut
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automaticky nahradit dopravní prostředek, když zestárne: {STRING}
|
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í.
|
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í.
|
||||||
|
|
||||||
|
|
|
@ -1471,6 +1471,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Vægur
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatisk fornyelse af gamle køretøjer: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1485,6 +1485,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Muurklok
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Voertuig automatisch vernieuwen wanneer dit oud wordt: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -835,6 +835,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE
|
||||||
STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * *
|
STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * *
|
||||||
|
|
||||||
STR_STATUSBAR_SPECTATOR :{WHITE}(spectator)
|
STR_STATUSBAR_SPECTATOR :{WHITE}(spectator)
|
||||||
|
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(infinite money)
|
||||||
|
|
||||||
# News message history
|
# News message history
|
||||||
STR_MESSAGE_HISTORY :{WHITE}Message History
|
STR_MESSAGE_HISTORY :{WHITE}Message History
|
||||||
|
@ -1287,6 +1288,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}second{P 0 "" s}
|
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 :Maximum initial loan: {STRING}
|
||||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
|
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
|
||||||
|
@ -1521,6 +1524,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendar time frozen)
|
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 :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
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :When enabled, a vehicle nearing its end of life gets replaced automatically when the renew conditions are fulfilled
|
||||||
|
|
||||||
|
@ -1939,7 +1943,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_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_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 :When dragging, keep fixed distance between signals: {STRING}
|
||||||
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_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_SEMAPHORE_BUILD_BEFORE_DATE :Automatically build semaphores before: {STRING}
|
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)
|
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)
|
||||||
|
@ -2804,7 +2808,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_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_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_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 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_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_BRIDGE :{BLACK}Build railway bridge. 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_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
|
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
|
||||||
|
@ -5767,6 +5771,7 @@ STR_UNKNOWN_STATION :unknown station
|
||||||
STR_DEFAULT_SIGN_NAME :Sign
|
STR_DEFAULT_SIGN_NAME :Sign
|
||||||
STR_COMPANY_SOMEONE :someone
|
STR_COMPANY_SOMEONE :someone
|
||||||
|
|
||||||
|
STR_SAVEGAME_DURATION_REALTIME :{NUM}h {NUM}m
|
||||||
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
||||||
STR_SAVEGAME_NAME_SPECTATOR :Spectator, {1:STRING}
|
STR_SAVEGAME_NAME_SPECTATOR :Spectator, {1:STRING}
|
||||||
|
|
||||||
|
@ -5800,6 +5805,10 @@ STR_TOWN_NAME :{TOWN}
|
||||||
STR_VEHICLE_NAME :{VEHICLE}
|
STR_VEHICLE_NAME :{VEHICLE}
|
||||||
STR_WAYPOINT_NAME :{WAYPOINT}
|
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_CARGO :{CARGO_LONG}
|
||||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||||
|
|
|
@ -835,6 +835,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}AUTOSAVE
|
||||||
STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * *
|
STR_STATUSBAR_SAVING_GAME :{RED}* * SAVING GAME * *
|
||||||
|
|
||||||
STR_STATUSBAR_SPECTATOR :{WHITE}(spectator)
|
STR_STATUSBAR_SPECTATOR :{WHITE}(spectator)
|
||||||
|
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(infinite money)
|
||||||
|
|
||||||
# News message history
|
# News message history
|
||||||
STR_MESSAGE_HISTORY :{WHITE}Message History
|
STR_MESSAGE_HISTORY :{WHITE}Message History
|
||||||
|
@ -1287,6 +1288,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}second{P 0 "" s}
|
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 :Maximum initial loan: {STRING}
|
||||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
|
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account)
|
||||||
|
@ -1521,6 +1524,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendar time frozen)
|
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 :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
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :When enabled, a vehicle nearing its end of life gets automatically replaced when the renew conditions are fulfilled
|
||||||
|
|
||||||
|
@ -1939,7 +1943,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_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_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 :When dragging, keep fixed distance between signals: {STRING}
|
||||||
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_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_SEMAPHORE_BUILD_BEFORE_DATE :Automatically build semaphores before: {STRING}
|
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)
|
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)
|
||||||
|
@ -2804,7 +2808,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_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_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_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 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_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_BRIDGE :{BLACK}Build railroad bridge. 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_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
|
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
|
||||||
|
@ -5767,6 +5771,7 @@ STR_UNKNOWN_STATION :unknown station
|
||||||
STR_DEFAULT_SIGN_NAME :Sign
|
STR_DEFAULT_SIGN_NAME :Sign
|
||||||
STR_COMPANY_SOMEONE :someone
|
STR_COMPANY_SOMEONE :someone
|
||||||
|
|
||||||
|
STR_SAVEGAME_DURATION_REALTIME :{NUM}h {NUM}m
|
||||||
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
||||||
STR_SAVEGAME_NAME_SPECTATOR :Spectator, {1:STRING}
|
STR_SAVEGAME_NAME_SPECTATOR :Spectator, {1:STRING}
|
||||||
|
|
||||||
|
@ -5800,6 +5805,10 @@ STR_TOWN_NAME :{TOWN}
|
||||||
STR_VEHICLE_NAME :{VEHICLE}
|
STR_VEHICLE_NAME :{VEHICLE}
|
||||||
STR_WAYPOINT_NAME :{WAYPOINT}
|
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_CARGO :{CARGO_LONG}
|
||||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||||
|
|
|
@ -1486,6 +1486,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Se tiu ĉi agor
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Aŭtomate anstataŭu veturilon se malnoviĝas: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1454,6 +1454,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kui on aktiveer
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Vananenud sõidukite uuendamine: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1269,6 +1269,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Um gilda, eru
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Sjálvendurnýggja flutningstól tá ta gerst gamalt: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -332,6 +332,7 @@ STR_SORT_BY_TYPE :Tyyppi
|
||||||
STR_SORT_BY_TRANSPORTED :Kuljetettu
|
STR_SORT_BY_TRANSPORTED :Kuljetettu
|
||||||
STR_SORT_BY_NUMBER :Numero
|
STR_SORT_BY_NUMBER :Numero
|
||||||
STR_SORT_BY_PROFIT_LAST_YEAR :Tuotto viime vuonna
|
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_YEAR :Tuotto tänä vuonna
|
||||||
STR_SORT_BY_PROFIT_THIS_PERIOD :Tuotto tällä jaksolla
|
STR_SORT_BY_PROFIT_THIS_PERIOD :Tuotto tällä jaksolla
|
||||||
STR_SORT_BY_AGE :Ikä
|
STR_SORT_BY_AGE :Ikä
|
||||||
|
@ -361,6 +362,7 @@ STR_SORT_BY_POPULATION :Asukasluku
|
||||||
STR_SORT_BY_RATING :Arvio
|
STR_SORT_BY_RATING :Arvio
|
||||||
STR_SORT_BY_NUM_VEHICLES :Kulkuneuvojen määrä
|
STR_SORT_BY_NUM_VEHICLES :Kulkuneuvojen määrä
|
||||||
STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Kokonaistuotto viime vuonna
|
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_YEAR :Kokonaistuotto tänä vuonna
|
||||||
STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Kokonaistuotto tällä jaksolla
|
STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Kokonaistuotto tällä jaksolla
|
||||||
STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Keskimääräinen tuotto viime vuonna
|
STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Keskimääräinen tuotto viime vuonna
|
||||||
|
@ -443,6 +445,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Asetukset
|
||||||
STR_SETTINGS_MENU_AI_SETTINGS :Tekoälyasetukset
|
STR_SETTINGS_MENU_AI_SETTINGS :Tekoälyasetukset
|
||||||
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Peliskriptiasetukset
|
STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Peliskriptiasetukset
|
||||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-asetukset
|
STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-asetukset
|
||||||
|
STR_SETTINGS_MENU_SANDBOX_OPTIONS :Hiekkalaatikkovalinnat
|
||||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läpinäkyvyysasetukset
|
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läpinäkyvyysasetukset
|
||||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kuntien nimet näkyvissä
|
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kuntien nimet näkyvissä
|
||||||
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Asemien nimet näkyvissä
|
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Asemien nimet näkyvissä
|
||||||
|
@ -630,6 +633,7 @@ STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLA
|
||||||
|
|
||||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Rahtitaksat
|
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Rahtitaksat
|
||||||
STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Vuorokausia kuljetuksessa
|
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_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_ENABLE_ALL :{TINY_FONT}{BLACK}Ota kaikki käyttöön
|
||||||
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Poista kaikki käytöstä
|
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Poista kaikki käytöstä
|
||||||
|
@ -829,6 +833,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}AUTOMAATTI
|
||||||
STR_STATUSBAR_SAVING_GAME :{RED}* * TALLENNETAAN PELIÄ * *
|
STR_STATUSBAR_SAVING_GAME :{RED}* * TALLENNETAAN PELIÄ * *
|
||||||
|
|
||||||
STR_STATUSBAR_SPECTATOR :{WHITE}(katsoja)
|
STR_STATUSBAR_SPECTATOR :{WHITE}(katsoja)
|
||||||
|
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(rahaa loputtomasti)
|
||||||
|
|
||||||
# News message history
|
# News message history
|
||||||
STR_MESSAGE_HISTORY :{WHITE}Viestihistoria
|
STR_MESSAGE_HISTORY :{WHITE}Viestihistoria
|
||||||
|
@ -1103,7 +1108,10 @@ 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_RUNNING :{GREEN}Käynnissä
|
||||||
STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Alustus epäonnistui
|
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_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_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})
|
STR_BASESET_STATUS :{STRING} {RED}({NUM} puuttuvaa tai vioittunutta tiedosto{P "" a})
|
||||||
|
|
||||||
|
@ -1421,6 +1429,7 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Kaikissa näkym
|
||||||
STR_CONFIG_SETTING_BRIBE :Salli viranomaisten lahjominen: {STRING}
|
STR_CONFIG_SETTING_BRIBE :Salli viranomaisten lahjominen: {STRING}
|
||||||
###length 2
|
###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 :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}
|
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Salli kuljetusyksinoikeuksien ostaminen: {STRING}
|
||||||
###length 2
|
###length 2
|
||||||
|
@ -1482,7 +1491,8 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :Kaikille kulkun
|
||||||
|
|
||||||
STR_CONFIG_SETTING_WARN_INCOME_LESS :Varoita, jos kulkuneuvon tulos on negatiivinen: {STRING}
|
STR_CONFIG_SETTING_WARN_INCOME_LESS :Varoita, jos kulkuneuvon tulos on negatiivinen: {STRING}
|
||||||
###length 2
|
###length 2
|
||||||
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_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_NEVER_EXPIRE_VEHICLES :Kulkuneuvot eivät vanhene: {STRING}
|
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
|
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Mikäli käytössä, kaikki kulkuneuvot ovat saatavilla ikuisesti niiden julkistamisen jälkeen
|
||||||
|
@ -1494,8 +1504,11 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalenteri
|
||||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Seinäkello
|
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Seinäkello
|
||||||
|
|
||||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minuuttia vuodessa: {STRING}
|
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
|
###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 :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
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Mikäli käytössä, lähellä käyttöikänsä loppua oleva kulkuneuvo korvataan automaattisesti
|
||||||
|
@ -1754,7 +1767,8 @@ STR_CONFIG_SETTING_SOUND_NEW_YEAR :Vuoden loppu: {
|
||||||
STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Jakson loppu: {STRING}
|
STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Jakson loppu: {STRING}
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Toista ääni vuoden lopussa verrattaessa yhtiön tulosta edelliseen vuoteen
|
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_CONFIRM :Rakentaminen: {STRING}
|
STR_CONFIG_SETTING_SOUND_CONFIRM :Rakentaminen: {STRING}
|
||||||
STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Toista ääni onnistuneen rakennus- tai muun toiminnon jälkeen
|
STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Toista ääni onnistuneen rakennus- tai muun toiminnon jälkeen
|
||||||
|
@ -2384,6 +2398,7 @@ STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Palveli
|
||||||
STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Kutsukoodi: {WHITE}{STRING}
|
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_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_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_GAMESCRIPT :{SILVER}Peliskripti: {WHITE}{STRING} (v.{NBSP}{NUM})
|
||||||
STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Salasanasuojattu!
|
STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Salasanasuojattu!
|
||||||
STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}PALVELIN KIINNI
|
STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}PALVELIN KIINNI
|
||||||
|
@ -2739,7 +2754,8 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
|
||||||
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}kuormittunut
|
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}kuormittunut
|
||||||
|
|
||||||
# Linkgraph tooltip
|
# Linkgraph tooltip
|
||||||
STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} minuutissa kuljetettavana asemalta {STATION} asemalle {STATION} ({COMMA}% kapasiteetista){STRING}
|
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_RETURN_EXTENSION :{}{CARGO_LONG} kuljetettavana takaisin ({COMMA}{NBSP}% kapasiteetista)
|
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} kuljetettavana takaisin ({COMMA}{NBSP}% kapasiteetista)
|
||||||
|
|
||||||
# Base for station construction window(s)
|
# Base for station construction window(s)
|
||||||
|
@ -2750,6 +2766,7 @@ 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_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Korosta ehdotetun tontin vaikutusalue
|
||||||
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {GOLD}{CARGO_LIST}
|
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {GOLD}{CARGO_LIST}
|
||||||
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Tuottaa: {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
|
STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Ylläpitokustannukset: {GOLD}{CURRENCY_SHORT}/jakso
|
||||||
|
|
||||||
# Join station window
|
# Join station window
|
||||||
|
@ -3905,6 +3922,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Asemat:
|
||||||
STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Asemaruudut
|
STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Asemaruudut
|
||||||
STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Lentokentät
|
STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Lentokentät
|
||||||
STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/vuosi
|
STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/vuosi
|
||||||
|
STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/jakso
|
||||||
|
|
||||||
# Industry directory
|
# Industry directory
|
||||||
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Teollisuuslaitokset
|
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Teollisuuslaitokset
|
||||||
|
@ -4234,11 +4252,16 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :raitiovaunu
|
||||||
STR_ENGINE_PREVIEW_AIRCRAFT :ilma-alus
|
STR_ENGINE_PREVIEW_AIRCRAFT :ilma-alus
|
||||||
STR_ENGINE_PREVIEW_SHIP :laiva
|
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_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING}
|
||||||
STR_ENGINE_PREVIEW_COST_WEIGHT :Hinta: {CURRENCY_LONG} Paino: {WEIGHT_SHORT}
|
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 :Ilma-aluksen tyyppi: {STRING}
|
||||||
STR_ENGINE_PREVIEW_TYPE_RANGE :Ilma-alustyyppi: {STRING} Toimintasäde: {COMMA} ruutua
|
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_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
|
# Autoreplace window
|
||||||
STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} – {STRING}
|
STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} – {STRING}
|
||||||
|
@ -4394,7 +4417,8 @@ 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 :{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_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_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_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_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}{NBSP}% {BLACK}Hajoamiset viime huollon jälkeen: {LTBLUE}{COMMA}
|
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}
|
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY_LONG}
|
||||||
|
@ -4410,10 +4434,13 @@ STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Viimeksi huolle
|
||||||
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Viimeksi huollettu: {LTBLUE}{NUM} minuuttia sitten
|
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_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_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_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_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Muuta huoltovälien tyyppiä
|
||||||
STR_VEHICLE_DETAILS_DEFAULT :Oletus
|
STR_VEHICLE_DETAILS_DEFAULT :Oletus
|
||||||
|
STR_VEHICLE_DETAILS_DAYS :Päiviä
|
||||||
STR_VEHICLE_DETAILS_MINUTES :Minuutteja
|
STR_VEHICLE_DETAILS_MINUTES :Minuutteja
|
||||||
STR_VEHICLE_DETAILS_PERCENT :Prosentteja
|
STR_VEHICLE_DETAILS_PERCENT :Prosentteja
|
||||||
|
|
||||||
|
@ -5713,6 +5740,7 @@ STR_UNKNOWN_STATION :tuntematon asem
|
||||||
STR_DEFAULT_SIGN_NAME :Kyltti
|
STR_DEFAULT_SIGN_NAME :Kyltti
|
||||||
STR_COMPANY_SOMEONE :joku
|
STR_COMPANY_SOMEONE :joku
|
||||||
|
|
||||||
|
STR_SAVEGAME_DURATION_REALTIME :{NUM} h {NUM} min
|
||||||
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
||||||
STR_SAVEGAME_NAME_SPECTATOR :Katsoja, {1:STRING}
|
STR_SAVEGAME_NAME_SPECTATOR :Katsoja, {1:STRING}
|
||||||
|
|
||||||
|
@ -5746,6 +5774,7 @@ STR_TOWN_NAME :{TOWN}
|
||||||
STR_VEHICLE_NAME :{VEHICLE}
|
STR_VEHICLE_NAME :{VEHICLE}
|
||||||
STR_WAYPOINT_NAME :{WAYPOINT}
|
STR_WAYPOINT_NAME :{WAYPOINT}
|
||||||
|
|
||||||
|
STR_CURRENCY_SHORT_TERA :{NBSP} t
|
||||||
|
|
||||||
STR_JUST_CARGO :{CARGO_LONG}
|
STR_JUST_CARGO :{CARGO_LONG}
|
||||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||||
|
|
|
@ -1522,6 +1522,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (calendrier gelé)
|
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 :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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1325,6 +1325,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :By ynskeakeljen
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Ferfang âlde fiertugen automatysk: {STRING}
|
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
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :By ynskeakeljen wurden fiertugen dy't hast op harren ein binne automatyske ferfongen
|
||||||
|
|
||||||
|
|
|
@ -1516,6 +1516,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ma tha seo air,
|
||||||
|
|
||||||
###setting-zero-is-special
|
###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 :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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1455,6 +1455,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Cando se activa
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autorenova-los vehículos cando vaian vellos: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1454,6 +1454,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Erlauben, dass
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Fahrzeuge automatisch erneuern, wenn sie alt werden: {STRING}
|
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.
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Erneuere Fahrzeuge automatisch gemäß der Regeln für Erneuerung, wenn sie ihr Maximalalter erreicht haben.
|
||||||
|
|
||||||
|
|
|
@ -1502,6 +1502,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Όταν είν
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Αυτόματη ανανέωση όταν ένα όχημα παλιώνει: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Αυτόματη ανανέωση όταν ένα όχημα παλιώνει: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα που πλησιάζουν το τέλος της ζωής τους αντικαθίσταται αυτόματα όταν πληρούνται οι προϋποθέσεις αντικατάστασής του
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Όταν είναι ενεργοποιημένη, τα οχήματα που πλησιάζουν το τέλος της ζωής τους αντικαθίσταται αυτόματα όταν πληρούνται οι προϋποθέσεις αντικατάστασής του
|
||||||
|
|
||||||
|
|
|
@ -1348,6 +1348,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :כאשר מאו
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :חידוש עצמי של רכב כשהוא נהיה ישן: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :חידוש עצמי של רכב כשהוא נהיה ישן: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :כאשר מאופשר, רכב המתקרב לסוף חייו מוחלף אוטומטית כאשר תנאי החידוש מתקיימים
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :כאשר מאופשר, רכב המתקרב לסוף חייו מוחלף אוטומטית כאשר תנאי החידוש מתקיימים
|
||||||
|
|
||||||
|
|
|
@ -457,6 +457,7 @@ STR_CONFIG_SETTING_ORDER_REVIEW_OFF :नहीं
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1516,6 +1516,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Bekapcsolva min
|
||||||
|
|
||||||
###setting-zero-is-special
|
###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 :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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1268,6 +1268,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ef þessi still
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uppfæra faratæki sjálfvirkt þegar þau eldast: {STRING}
|
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
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ef þessi stilling er virk, eru farartæki endurnýjuð sjálfvirkt þegar endingartími þeirra er komin
|
||||||
|
|
||||||
|
|
|
@ -637,6 +637,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normala
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1453,6 +1453,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Jika dinyalakan
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Perbarui otomatis kendaraan yang telah tua: {STRING}
|
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
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Jika dinyalakan, kendaraan mendekati akhir usianya akan secara otomatis diperbarui jika masih tersedia kendaraan itu
|
||||||
|
|
||||||
|
|
|
@ -1372,6 +1372,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Má dhéantar
|
||||||
|
|
||||||
###setting-zero-is-special
|
###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 :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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1492,6 +1492,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Se abilitata, d
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Rinnova un veicolo quando diventa vecchio: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1417,6 +1417,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :有効にする
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :老朽車両の自動交換: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :老朽車両の自動交換: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :有効にすると、耐用年数を越えた輸送機器は自動で更新されるようになります(交換には一度格納施設に戻る必要があります)。具体的な交換時期は下の設定で変更できます。
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :有効にすると、耐用年数を越えた輸送機器は自動で更新されるようになります(交換には一度格納施設に戻る必要があります)。具体的な交換時期は下の設定で変更できます。
|
||||||
|
|
||||||
|
|
|
@ -836,6 +836,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}자동 저
|
||||||
STR_STATUSBAR_SAVING_GAME :{RED}* * 게임 저장 중 * *
|
STR_STATUSBAR_SAVING_GAME :{RED}* * 게임 저장 중 * *
|
||||||
|
|
||||||
STR_STATUSBAR_SPECTATOR :{WHITE}(관전자)
|
STR_STATUSBAR_SPECTATOR :{WHITE}(관전자)
|
||||||
|
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(돈 무제한)
|
||||||
|
|
||||||
# News message history
|
# News message history
|
||||||
STR_MESSAGE_HISTORY :{WHITE}메시지 기록
|
STR_MESSAGE_HISTORY :{WHITE}메시지 기록
|
||||||
|
@ -1288,6 +1289,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :오른쪽
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}초
|
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 :최대 초기 대출금: {STRING}
|
||||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. (여기서 설정한 값은 인플레이션에 의한 효과를 적용하지 않은 값입니다.)
|
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. (여기서 설정한 값은 인플레이션에 의한 효과를 적용하지 않은 값입니다.)
|
||||||
|
@ -1522,6 +1525,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (달력 시간 정지됨)
|
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (달력 시간 정지됨)
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :차량이 낡으면 차량을 자동으로 교체: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :차량이 낡으면 차량을 자동으로 교체: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :이 설정을 켜면, 제한 수명에 다다른 차량이 교체 조건을 만족할 경우 자동으로 차량을 교체할 수 있게 됩니다
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :이 설정을 켜면, 제한 수명에 다다른 차량이 교체 조건을 만족할 경우 자동으로 차량을 교체할 수 있게 됩니다
|
||||||
|
|
||||||
|
@ -1940,7 +1944,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :신호기를
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :신호기를 드래그할 때, 다음 장애물(신호기, 분기점 등)을 만날 때까지 신호기가 설치될 간격을 설정합니다
|
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :신호기를 드래그할 때, 다음 장애물(신호기, 분기점 등)을 만날 때까지 신호기가 설치될 간격을 설정합니다
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA}칸 간격으로 설치
|
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA}칸 간격으로 설치
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :드래그할 때, 신호기 사이의 거리를 계속 고정: {STRING}
|
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :드래그할 때, 신호기 사이의 거리를 계속 고정: {STRING}
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :신호기를 CTRL+드래그 하여 설치할 때의 행동을 선택합니다. 이 설정을 끄면, 신호기가 없는 긴 폐색을 만들지 않기 위해 터널이나 다리 주변에 먼저 신호기가 설치될 것입니다. 이 설정을 켜면, 신호기는 터널/다리와 상관없이 매 n개의 칸마다 설치될 것입니다.
|
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :신호기를 드래그 하여 설치할 때의 행동을 선택합니다. 이 설정을 끄면, 신호기가 없는 긴 폐색을 만들지 않기 위해 터널이나 다리 주변에 먼저 신호기가 설치될 것입니다. 이 설정을 켜면, 신호기는 터널/다리와 상관없이 매 n개의 칸마다 설치될 것입니다
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :전자식 신호기의 사용: {STRING}년 이후에
|
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :전자식 신호기의 사용: {STRING}년 이후에
|
||||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :전자식 신호기를 사용할 수 있는 연도를 설정합니다. 이 이전에는 구식 신호기만 사용 가능합니다. (두 신호기는 기능적으로는 동일하고 모습만 다릅니다.)
|
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :전자식 신호기를 사용할 수 있는 연도를 설정합니다. 이 이전에는 구식 신호기만 사용 가능합니다. (두 신호기는 기능적으로는 동일하고 모습만 다릅니다.)
|
||||||
|
@ -5768,8 +5772,9 @@ STR_UNKNOWN_STATION :알 수 없는
|
||||||
STR_DEFAULT_SIGN_NAME :팻말
|
STR_DEFAULT_SIGN_NAME :팻말
|
||||||
STR_COMPANY_SOMEONE :누군가
|
STR_COMPANY_SOMEONE :누군가
|
||||||
|
|
||||||
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}의 게임 ({STRING})
|
STR_SAVEGAME_DURATION_REALTIME :{NUM}시간 {NUM}분
|
||||||
STR_SAVEGAME_NAME_SPECTATOR :관전자의 게임 ({1:STRING})
|
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}의 게임, {STRING}
|
||||||
|
STR_SAVEGAME_NAME_SPECTATOR :관전자의 게임, {1:STRING}
|
||||||
|
|
||||||
# Viewport strings
|
# Viewport strings
|
||||||
STR_VIEWPORT_TOWN_POP :{WHITE}{TOWN} ({COMMA})
|
STR_VIEWPORT_TOWN_POP :{WHITE}{TOWN} ({COMMA})
|
||||||
|
@ -5801,6 +5806,10 @@ STR_TOWN_NAME :{TOWN}
|
||||||
STR_VEHICLE_NAME :{VEHICLE}
|
STR_VEHICLE_NAME :{VEHICLE}
|
||||||
STR_WAYPOINT_NAME :{WAYPOINT}
|
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_CARGO :{CARGO_LONG}
|
||||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||||
|
|
|
@ -1509,6 +1509,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Electa, omnes v
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoredimere vehicula cum veterascunt: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoredimere vehicula cum veterascunt: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Electa, vehicula veterascentia automatice redimuntur, condicionibus satisfactis
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Electa, vehicula veterascentia automatice redimuntur, condicionibus satisfactis
|
||||||
|
|
||||||
|
|
|
@ -1460,6 +1460,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kad ieslēgts,
|
||||||
|
|
||||||
###setting-zero-is-special
|
###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 :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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1589,6 +1589,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kartą atsirad
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatiškai atnaujinti transporto priemonę, kai ji pasensta: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1398,6 +1398,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wann ugeschalt,
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Gefier automatesch erneiere wann et al gëtt: {STRING}
|
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
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Wann ugeschalt, gëtt e Gefier wat u säi Lafzäitenn kënnt automatesch ausgetosch
|
||||||
|
|
||||||
|
|
|
@ -937,6 +937,7 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Инфраст
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1261,6 +1261,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kenderaan tidak
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Gunakan pembaharuan automatik apabila kenderaan usang : {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Gunakan pembaharuan automatik apabila kenderaan usang : {STRING}
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
|
|
|
@ -567,6 +567,7 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avza jekk jinti
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -872,6 +872,7 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE : वाहन
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1382,6 +1382,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Når aktivert,
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoforny kjøretøy når det blir gammelt: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1293,6 +1293,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Køyretøy utg
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoforny køyretøy når det vert gamalt: {STRING}
|
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
|
STR_CONFIG_SETTING_AUTORENEW_MONTHS :Automatisk fornying når køyretøy er {STRING} maks alder
|
||||||
|
|
|
@ -1229,6 +1229,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :وسایل نق
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :نوکردن خودکار وسایل نقلیه کهنه شده: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :نوکردن خودکار وسایل نقلیه کهنه شده: {STRING}
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
|
|
|
@ -1842,6 +1842,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kiedy włączon
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Autoodnawianie pojazdów gdy stają się stare: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1507,6 +1507,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tempo do calendário congelado)
|
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 :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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1457,6 +1457,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :După activare,
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Înnoire automată pentru vehiculele învechite: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -487,6 +487,7 @@ STR_SORT_BY_RATING :Рейтинг
|
||||||
STR_SORT_BY_NUM_VEHICLES :Количество транспортных средств
|
STR_SORT_BY_NUM_VEHICLES :Количество транспортных средств
|
||||||
STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Общая прибыль в прошлом году
|
STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Общая прибыль в прошлом году
|
||||||
STR_SORT_BY_TOTAL_PROFIT_THIS_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_LAST_YEAR :Средняя прибыль в прошлом году
|
||||||
STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Средняя прибыль в этом году
|
STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Средняя прибыль в этом году
|
||||||
STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Средний доход в текущем периоде
|
STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Средний доход в текущем периоде
|
||||||
|
@ -1638,9 +1639,11 @@ 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}году в классическом режиме.{}{}В любом случае, появление новых транспортных средств, зданий и инфраструктуры будет сопровождаться календарём с понятными датами.
|
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Выбор системы отсчёта времени, используемой в игре. После старта сменить её невозможно.{}{}Календарь - это классическая система, изначально использовавшаяся в OpenTTD: год состоит из 12 месяцев, в каждом из которых 28-31{NBSP}день.{}{}В режиме реального времени расчёты производства, движения транспорта и финансовых показателей основаны на интервалах длительностью в 1{NBSP}минуту, что примерно соответствует 30{NBSP}дням в режиме календаря. Эти интервалы группируются в 12-минутные циклы, соответствующие 1{NBSP}году в классическом режиме.{}{}В любом случае, появление новых транспортных средств, зданий и инфраструктуры будет сопровождаться календарём с понятными датами.
|
||||||
###length 2
|
###length 2
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Выберите, сколько минут реального времени длится год в игре. По умолчанию{NBSP}- 12{NBSP}минут. Установка «0» остановит календарное время. Эта настройка не влияет на расчёт экономической модели в игре, и работает только в режиме реального времени.
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автозамена изношенного транспорта: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автозамена изношенного транспорта: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Включает автоматическую замену устаревших транспортных средств
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Включает автоматическую замену устаревших транспортных средств
|
||||||
|
|
||||||
|
@ -4417,6 +4420,7 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED :Цена: {CURR
|
||||||
STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Скорость: {VELOCITY} Мощность: {POWER} Макс. ТУ: {FORCE}
|
STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Скорость: {VELOCITY} Мощность: {POWER} Макс. ТУ: {FORCE}
|
||||||
STR_ENGINE_PREVIEW_TYPE_RANGE :Возд. судно: {STRING} Дальность: {COMMA}{NBSP}клет{P ка ки ок}
|
STR_ENGINE_PREVIEW_TYPE_RANGE :Возд. судно: {STRING} Дальность: {COMMA}{NBSP}клет{P ка ки ок}
|
||||||
STR_ENGINE_PREVIEW_CAPACITY :Ёмкость: {CARGO_LONG}
|
STR_ENGINE_PREVIEW_CAPACITY :Ёмкость: {CARGO_LONG}
|
||||||
|
STR_ENGINE_PREVIEW_CAPACITY_2 :Ёмкость: {CARGO_LONG}, {CARGO_LONG}
|
||||||
|
|
||||||
# Autoreplace window
|
# Autoreplace window
|
||||||
STR_REPLACE_VEHICLES_WHITE :{WHITE}Замена {STRING.gen} - {STRING}
|
STR_REPLACE_VEHICLES_WHITE :{WHITE}Замена {STRING.gen} - {STRING}
|
||||||
|
@ -4591,6 +4595,8 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}ТО к
|
||||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}ТО при сниж. на {LTBLUE}{COMMA}%{BLACK}. {STRING}
|
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_DATE :ТО: {LTBLUE}{DATE_LONG}
|
||||||
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :ТО: {LTBLUE}{NUM}{NBSP}мин. назад
|
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_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Изменить тип интервала прохождения технического обслуживания
|
||||||
STR_VEHICLE_DETAILS_DEFAULT :По умолчанию
|
STR_VEHICLE_DETAILS_DEFAULT :По умолчанию
|
||||||
|
|
|
@ -1605,6 +1605,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ako je omoguće
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatska zamena kada vozilo ostari: {STRING}
|
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
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Kada je omogućeno, vozilo blizu kraja života će se automatski zameniti kada su ispunjeni uslovi obnavljanja
|
||||||
|
|
||||||
|
|
|
@ -334,6 +334,7 @@ STR_SORT_BY_NUMBER :序号
|
||||||
STR_SORT_BY_PROFIT_LAST_YEAR :去年利润
|
STR_SORT_BY_PROFIT_LAST_YEAR :去年利润
|
||||||
STR_SORT_BY_PROFIT_LAST_PERIOD :上期损益
|
STR_SORT_BY_PROFIT_LAST_PERIOD :上期损益
|
||||||
STR_SORT_BY_PROFIT_THIS_YEAR :今年利润
|
STR_SORT_BY_PROFIT_THIS_YEAR :今年利润
|
||||||
|
STR_SORT_BY_PROFIT_THIS_PERIOD :本期损益
|
||||||
STR_SORT_BY_AGE :年龄
|
STR_SORT_BY_AGE :年龄
|
||||||
STR_SORT_BY_RELIABILITY :可靠性
|
STR_SORT_BY_RELIABILITY :可靠性
|
||||||
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :每种货物的总装载能力
|
STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :每种货物的总装载能力
|
||||||
|
@ -361,8 +362,11 @@ STR_SORT_BY_POPULATION :人口
|
||||||
STR_SORT_BY_RATING :评价
|
STR_SORT_BY_RATING :评价
|
||||||
STR_SORT_BY_NUM_VEHICLES :载具数量
|
STR_SORT_BY_NUM_VEHICLES :载具数量
|
||||||
STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :去年总利润
|
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_YEAR :今年总利润
|
||||||
|
STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :本期总损益
|
||||||
STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :去年平均利润
|
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_YEAR :今年平均利润
|
||||||
STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :本周期平均利润
|
STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :本周期平均利润
|
||||||
|
|
||||||
|
@ -402,7 +406,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}建设
|
||||||
STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}建造电车轨道
|
STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}建造电车轨道
|
||||||
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}建设码头
|
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}建设码头
|
||||||
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{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_SOUND_MUSIC_WINDOW :{BLACK}显示 声音/音乐 控制菜单
|
||||||
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}显示最新消息、新闻,消息历史或删除所有消息
|
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}显示最新消息、新闻,消息历史或删除所有消息
|
||||||
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}查询地块信息、截图、关于 OpenTTD 和开发者工具
|
STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}查询地块信息、截图、关于 OpenTTD 和开发者工具
|
||||||
|
@ -418,7 +422,7 @@ STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}点击
|
||||||
STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}显示地图和城镇列表
|
STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}显示地图和城镇列表
|
||||||
STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}生成地形
|
STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}生成地形
|
||||||
STR_SCENEDIT_TOOLBAR_TOWN_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_ROAD_CONSTRUCTION :{BLACK}公路建设
|
||||||
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}电车道建设
|
STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}电车道建设
|
||||||
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}植树。按 Ctrl 沿对角线建造,按 Shift 显示预计花费。
|
STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}植树。按 Ctrl 沿对角线建造,按 Shift 显示预计花费。
|
||||||
|
@ -629,6 +633,8 @@ STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}公司
|
||||||
STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}最后 72 分
|
STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}最后 72 分
|
||||||
|
|
||||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}货物运输价格
|
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_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}将 10 单位 (或 10,000 升) 货物运输 20 个方格
|
||||||
STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}全部启用
|
STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}全部启用
|
||||||
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}全部禁用
|
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}全部禁用
|
||||||
|
@ -677,7 +683,11 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}贷款
|
||||||
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}总表现值:
|
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}总表现值:
|
||||||
###next-name-looks-similar
|
###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_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_MIN_INCOME_TOOLTIP :{BLACK}在过去 12 个季度中{}利润最少的季度的现金收入
|
||||||
STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}在过去 12 个季度中{}利润最多的季度的现金收入
|
STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}在过去 12 个季度中{}利润最多的季度的现金收入
|
||||||
STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}在过去 4 个季度中运输的货物总数
|
STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}在过去 4 个季度中运输的货物总数
|
||||||
|
@ -825,6 +835,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}自动保
|
||||||
STR_STATUSBAR_SAVING_GAME :{RED}* * 保存游戏中 * *
|
STR_STATUSBAR_SAVING_GAME :{RED}* * 保存游戏中 * *
|
||||||
|
|
||||||
STR_STATUSBAR_SPECTATOR :{WHITE}(旁观者)
|
STR_STATUSBAR_SPECTATOR :{WHITE}(旁观者)
|
||||||
|
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(无限)
|
||||||
|
|
||||||
# News message history
|
# News message history
|
||||||
STR_MESSAGE_HISTORY :{WHITE}消息历史
|
STR_MESSAGE_HISTORY :{WHITE}消息历史
|
||||||
|
@ -909,6 +920,7 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE
|
||||||
STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} 已经达到报废年限,必须马上更新!
|
STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} 已经达到报废年限,必须马上更新!
|
||||||
STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} 无法找到道路
|
STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} 无法找到道路
|
||||||
STR_NEWS_VEHICLE_IS_LOST :{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_VEHICLE_UNPROFITABLE_PERIOD :{WHITE}{VEHICLE} 的上周期损益为 {CURRENCY_LONG}
|
||||||
STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} 由于航程过远,航班无法到达。
|
STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} 由于航程过远,航班无法到达。
|
||||||
|
|
||||||
|
@ -933,6 +945,8 @@ 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_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_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_TITLE :{BIG_FONT}{BLACK}垄断运输!
|
||||||
STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}{TOWN} 地方当局与 {STRING} 签订了长为一年的独家运输合同!
|
STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}{TOWN} 地方当局与 {STRING} 签订了长为一年的独家运输合同!
|
||||||
STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}{TOWN} 地方当局与 {STRING} 签订了 12 分钟独家运输合同!
|
STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}{TOWN} 地方当局与 {STRING} 签订了 12 分钟独家运输合同!
|
||||||
|
@ -1274,6 +1288,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右侧
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}秒
|
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 :最大初始贷款: {STRING}
|
||||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响)
|
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响)
|
||||||
|
@ -1299,6 +1315,7 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :设置获得财
|
||||||
STR_CONFIG_SETTING_SUBSIDY_DURATION :财政补贴尺度:{STRING}
|
STR_CONFIG_SETTING_SUBSIDY_DURATION :财政补贴尺度:{STRING}
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :设置发放财政补贴的年数
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :设置发放财政补贴的年数
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT_PERIODS :设置发放财政补贴的周期数
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS}
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR_PERIODS}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
@ -1398,6 +1415,7 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :右侧
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_SHOWFINANCES :在年终显示财务报表:{STRING}
|
STR_CONFIG_SETTING_SHOWFINANCES :在年终显示财务报表:{STRING}
|
||||||
|
STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :在周期末显示财务报表:{STRING}
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :“打开”时,在年底显示财务报表窗口,方便查看公司财务状况
|
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :“打开”时,在年底显示财务报表窗口,方便查看公司财务状况
|
||||||
|
@ -1424,10 +1442,12 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :每个视角
|
||||||
STR_CONFIG_SETTING_BRIBE :允许贿赂地方政府:{STRING}
|
STR_CONFIG_SETTING_BRIBE :允许贿赂地方政府:{STRING}
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT :“打开”时,允许贿赂地方政府,如果被发现,在该城市将被限制经营活动六个月
|
STR_CONFIG_SETTING_BRIBE_HELPTEXT :“打开”时,允许贿赂地方政府,如果被发现,在该城市将被限制经营活动六个月
|
||||||
|
STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :允许公司尝试贿赂当地镇政府。如果贿赂被发现,公司在该城市将被限制经营活动 6 分钟。
|
||||||
|
|
||||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :允许买断经营权: {STRING}
|
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :允许买断经营权: {STRING}
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :如果一家公司购买了城市独家经营权,其它公司的站台将在一年之内不再产生乘客或者货物。
|
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 :允许资助城镇建设: {STRING}
|
||||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :“打开”时,允许公司提供资助新建房屋
|
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :“打开”时,允许公司提供资助新建房屋
|
||||||
|
@ -1486,12 +1506,13 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :检查 所有
|
||||||
STR_CONFIG_SETTING_WARN_INCOME_LESS :若线路亏损时发出提示: {STRING}
|
STR_CONFIG_SETTING_WARN_INCOME_LESS :若线路亏损时发出提示: {STRING}
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :“打开”,当一辆车在一年内总体亏损,发出提示
|
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 :载具永不过期:{STRING}
|
||||||
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :启用时,所有载具一经面世,就可以永远选择购买使用。
|
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :启用时,所有载具一经面世,就可以永远选择购买使用。
|
||||||
|
|
||||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS :时间模式:{STRING}
|
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
|
###length 2
|
||||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :日历
|
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :日历
|
||||||
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :挂钟
|
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :挂钟
|
||||||
|
@ -1501,6 +1522,8 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :选择在使用
|
||||||
|
|
||||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0(日期停止)
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :当车辆报废时自动更新:{STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :当车辆报废时自动更新:{STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :“打开”时,车辆在临近它的报废期限时自动更新
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :“打开”时,车辆在临近它的报废期限时自动更新
|
||||||
|
@ -1756,9 +1779,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :显示报纸时
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_SOUND_NEW_YEAR :年终: {STRING}
|
STR_CONFIG_SETTING_SOUND_NEW_YEAR :年终: {STRING}
|
||||||
|
STR_CONFIG_SETTING_SOUND_NEW_PERIOD :周期结束:{STRING}
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :在年末弹出报表时,播放相应音效
|
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 :建设: {STRING}
|
||||||
STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :播放成功建设或执行其它动作时的音效
|
STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :播放成功建设或执行其它动作时的音效
|
||||||
|
@ -2060,6 +2085,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :英制(英里
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :公制(千米/小时)
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :公制(千米/小时)
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :国际单位制(米/秒)
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :国际单位制(米/秒)
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :游戏单位(格/日)
|
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_VELOCITY_KNOTS :节
|
||||||
|
|
||||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :载具功率单位:{STRING}
|
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :载具功率单位:{STRING}
|
||||||
|
@ -2372,6 +2398,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}游戏
|
||||||
STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}日期
|
STR_NETWORK_SERVER_LIST_DATE_CAPTION :{BLACK}日期
|
||||||
STR_NETWORK_SERVER_LIST_DATE_CAPTION_TOOLTIP :{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_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_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}有戏已进行的时间,不计暂停的时间。
|
||||||
STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}语言,服务器版本和其他信息
|
STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}语言,服务器版本和其他信息
|
||||||
|
|
||||||
|
@ -2381,13 +2408,13 @@ STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}点击
|
||||||
|
|
||||||
STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}游戏信息
|
STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}游戏信息
|
||||||
STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}客户端: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
|
STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}客户端: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA}
|
||||||
STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}场景类型: {WHITE}{STRING}
|
STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}场景类型:{WHITE}{STRING}
|
||||||
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}地图尺寸: {WHITE}{COMMA}×{COMMA}
|
STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}地图尺寸:{WHITE}{COMMA}×{COMMA}
|
||||||
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}游戏版本: {WHITE}{STRING}
|
STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}游戏版本:{WHITE}{STRING}
|
||||||
STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}该服IP: {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_INVITE_CODE :{SILVER}邀请代码:{WHITE}{STRING}
|
||||||
STR_NETWORK_SERVER_LIST_START_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_CURRENT_DATE :{SILVER}当前日期:{WHITE}{DATE_SHORT}
|
||||||
STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}游戏时间:{WHITE}{NUM} 时 {NUM} 分
|
STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}游戏时间:{WHITE}{NUM} 时 {NUM} 分
|
||||||
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}游戏脚本:{WHITE}{STRING} (v{NUM})
|
STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}游戏脚本:{WHITE}{STRING} (v{NUM})
|
||||||
STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}有密码保护!
|
STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}有密码保护!
|
||||||
|
@ -2744,6 +2771,8 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
|
||||||
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}超载
|
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}超载
|
||||||
|
|
||||||
# Linkgraph tooltip
|
# 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_RETURN_EXTENSION :{}有{CARGO_LONG}要运回(运载能力的{COMMA}%)
|
||||||
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}平均行驶时间: {UNITS_DAYS_OR_SECONDS}
|
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}平均行驶时间: {UNITS_DAYS_OR_SECONDS}
|
||||||
|
|
||||||
|
@ -2755,6 +2784,7 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}不显
|
||||||
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}显示可以覆盖的区域
|
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}显示可以覆盖的区域
|
||||||
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}接受:{GOLD}{CARGO_LIST}
|
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}接受:{GOLD}{CARGO_LIST}
|
||||||
STR_STATION_BUILD_SUPPLIES_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}/周期
|
STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}维护成本:{GOLD}{CURRENCY_SHORT}/周期
|
||||||
|
|
||||||
# Join station window
|
# Join station window
|
||||||
|
@ -3057,7 +3087,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}选择
|
||||||
|
|
||||||
# Land area window
|
# Land area window
|
||||||
STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}地块信息
|
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_N_A :{BLACK}清除费用:{LTBLUE}N/A 不能清除
|
||||||
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}清除费用:{RED}{CURRENCY_LONG}
|
STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}清除费用:{RED}{CURRENCY_LONG}
|
||||||
STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}清除收入: {LTBLUE}{CURRENCY_LONG}
|
STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}清除收入: {LTBLUE}{CURRENCY_LONG}
|
||||||
|
@ -3652,9 +3682,11 @@ 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_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_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_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_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_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_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}
|
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}贿赂地方政府以提高评价,并终止竞争者的运输专营权,但有被发现后严厉惩罚的风险。{}{POP_COLOUR}费用:{CURRENCY_LONG}
|
||||||
|
|
||||||
# Goal window
|
# Goal window
|
||||||
|
@ -3750,6 +3782,7 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN
|
||||||
STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}评价
|
STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}评价
|
||||||
STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}显示车站评价
|
STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}显示车站评价
|
||||||
STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{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_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%)
|
||||||
|
|
||||||
STR_STATION_VIEW_GROUP :{BLACK}群组方式
|
STR_STATION_VIEW_GROUP :{BLACK}群组方式
|
||||||
|
@ -3810,6 +3843,8 @@ STR_EDIT_WAYPOINT_NAME :{WHITE}编辑
|
||||||
# Finances window
|
# Finances window
|
||||||
STR_FINANCES_CAPTION :{WHITE}{COMPANY} 财务报表 {BLACK}{COMPANY_NUM}
|
STR_FINANCES_CAPTION :{WHITE}{COMPANY} 财务报表 {BLACK}{COMPANY_NUM}
|
||||||
STR_FINANCES_YEAR :{WHITE}{NUM}
|
STR_FINANCES_YEAR :{WHITE}{NUM}
|
||||||
|
STR_FINANCES_YEAR_CAPTION :年份
|
||||||
|
STR_FINANCES_PERIOD_CAPTION :{WHITE}周期
|
||||||
|
|
||||||
###length 3
|
###length 3
|
||||||
STR_FINANCES_REVENUE_TITLE :{WHITE}收入
|
STR_FINANCES_REVENUE_TITLE :{WHITE}收入
|
||||||
|
@ -3911,6 +3946,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}运河
|
||||||
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}站台:
|
STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}站台:
|
||||||
STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}车站
|
STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}车站
|
||||||
STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{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
|
# Industry directory
|
||||||
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}工业设施
|
STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}工业设施
|
||||||
|
@ -3930,6 +3967,7 @@ STR_INDUSTRY_DIRECTORY_FILTER_NONE :无
|
||||||
# Industry view
|
# Industry view
|
||||||
STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY}
|
STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY}
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}上月产量:
|
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_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% 已运输)
|
||||||
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到工厂所在的位置. 单击的同时按住Ctrl会在新视点中显示工厂位置
|
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏幕中心移动到工厂所在的位置. 单击的同时按住Ctrl会在新视点中显示工厂位置
|
||||||
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产等级: {YELLOW}{COMMA}%
|
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产等级: {YELLOW}{COMMA}%
|
||||||
|
@ -4017,6 +4055,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :移除所有车
|
||||||
STR_GROUP_RENAME_CAPTION :{BLACK}重命名分组
|
STR_GROUP_RENAME_CAPTION :{BLACK}重命名分组
|
||||||
|
|
||||||
STR_GROUP_PROFIT_THIS_YEAR :今年利润:
|
STR_GROUP_PROFIT_THIS_YEAR :今年利润:
|
||||||
|
STR_GROUP_PROFIT_THIS_PERIOD :本期损益:
|
||||||
STR_GROUP_PROFIT_LAST_YEAR :去年利润
|
STR_GROUP_PROFIT_LAST_YEAR :去年利润
|
||||||
STR_GROUP_PROFIT_LAST_PERIOD :上周期损益:
|
STR_GROUP_PROFIT_LAST_PERIOD :上周期损益:
|
||||||
STR_GROUP_OCCUPANCY :当前使用量:
|
STR_GROUP_OCCUPANCY :当前使用量:
|
||||||
|
@ -4046,6 +4085,7 @@ STR_PURCHASE_INFO_SPEED :{BLACK}速度
|
||||||
STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}在海洋上的速度: {GOLD}{VELOCITY}
|
STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}在海洋上的速度: {GOLD}{VELOCITY}
|
||||||
STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}在河流上的速度: {GOLD}{VELOCITY}
|
STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}在河流上的速度: {GOLD}{VELOCITY}
|
||||||
STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}运行费用:{GOLD}{CURRENCY_LONG}/年
|
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_CAPACITY :{BLACK}运载能力:{GOLD}{CARGO_LONG} {STRING}
|
||||||
STR_PURCHASE_INFO_REFITTABLE :(可改装)
|
STR_PURCHASE_INFO_REFITTABLE :(可改装)
|
||||||
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}设计日期:{GOLD}{NUM}{BLACK} 寿命:{GOLD}{COMMA} 年
|
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}设计日期:{GOLD}{NUM}{BLACK} 寿命:{GOLD}{COMMA} 年
|
||||||
|
@ -4099,7 +4139,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}购买
|
||||||
STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的列车。按住 <Shift> 键单击可以显示所需资金
|
STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的列车。按住 <Shift> 键单击可以显示所需资金
|
||||||
STR_BUY_VEHICLE_ROAD_VEHICLE_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_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的船只。按住 Shift 键单击可以显示所需资金
|
||||||
STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :购买并改装选定的飞机,按住 Shift 键单击可以显示所需资金
|
STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}购买并改装选定的飞机,按住 Shift 键单击可以显示所需资金
|
||||||
|
|
||||||
###length VEHICLE_TYPES
|
###length VEHICLE_TYPES
|
||||||
STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}重命名
|
STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}重命名
|
||||||
|
@ -4238,9 +4278,13 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :电车
|
||||||
STR_ENGINE_PREVIEW_AIRCRAFT :飞机
|
STR_ENGINE_PREVIEW_AIRCRAFT :飞机
|
||||||
STR_ENGINE_PREVIEW_SHIP :船只
|
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_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_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_SPEED_POWER_MAX_TE :速度:{VELOCITY} 功率:{POWER} 最大牵引力:{FORCE}
|
||||||
|
STR_ENGINE_PREVIEW_TYPE :飞机类型:{STRING}
|
||||||
STR_ENGINE_PREVIEW_TYPE_RANGE :飞机类别:{STRING} 航程:{COMMA} 格
|
STR_ENGINE_PREVIEW_TYPE_RANGE :飞机类别:{STRING} 航程:{COMMA} 格
|
||||||
STR_ENGINE_PREVIEW_RUNCOST_YEAR :运行费用:{CURRENCY_LONG}/年
|
STR_ENGINE_PREVIEW_RUNCOST_YEAR :运行费用:{CURRENCY_LONG}/年
|
||||||
STR_ENGINE_PREVIEW_RUNCOST_PERIOD :运行费用:{CURRENCY_LONG}/周期
|
STR_ENGINE_PREVIEW_RUNCOST_PERIOD :运行费用:{CURRENCY_LONG}/周期
|
||||||
|
@ -4401,6 +4445,8 @@ 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 :{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_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_RELIABILITY_BREAKDOWNS :{BLACK}可靠性:{LTBLUE}{COMMA}% {BLACK}上次保养后抛锚的次数:{LTBLUE}{COMMA}
|
||||||
|
|
||||||
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}建造年份:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY_LONG}
|
STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}建造年份:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY_LONG}
|
||||||
|
@ -4416,12 +4462,17 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}服务
|
||||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}保养周期:{LTBLUE}{COMMA}%{BLACK} 上次保养:{LTBLUE}{STRING}
|
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_DATE :最近保养:{LTBLUE}{DATE_LONG}
|
||||||
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :最近保养:{LTBLUE}{NUM}{NBSP}分钟前
|
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_DAYS :{BLACK}将维修间隔缩短 10 天。按住 <Ctrl> 点击可将维修间隔缩短 5 天。
|
||||||
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}将维修间隔缩短 5 分。按住 <Ctrl> 点击可将维修间隔缩短 1 分 。
|
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_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}将维修间隔缩短 10%。按住 <Ctrl> 点击可将维修间隔缩短 5% 。
|
||||||
|
|
||||||
STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}更改服务时间间隔类型
|
STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}更改服务时间间隔类型
|
||||||
STR_VEHICLE_DETAILS_DEFAULT :默认
|
STR_VEHICLE_DETAILS_DEFAULT :默认
|
||||||
|
STR_VEHICLE_DETAILS_DAYS :天
|
||||||
|
STR_VEHICLE_DETAILS_MINUTES :分钟
|
||||||
STR_VEHICLE_DETAILS_PERCENT :百分比
|
STR_VEHICLE_DETAILS_PERCENT :百分比
|
||||||
|
|
||||||
###length VEHICLE_TYPES
|
###length VEHICLE_TYPES
|
||||||
|
@ -5720,6 +5771,7 @@ STR_UNKNOWN_STATION :未知车站(
|
||||||
STR_DEFAULT_SIGN_NAME :标志
|
STR_DEFAULT_SIGN_NAME :标志
|
||||||
STR_COMPANY_SOMEONE :某人
|
STR_COMPANY_SOMEONE :某人
|
||||||
|
|
||||||
|
STR_SAVEGAME_DURATION_REALTIME :{NUM} 时 {NUM} 分
|
||||||
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING}
|
||||||
STR_SAVEGAME_NAME_SPECTATOR :观众, {1:STRING}
|
STR_SAVEGAME_NAME_SPECTATOR :观众, {1:STRING}
|
||||||
|
|
||||||
|
@ -5753,6 +5805,10 @@ STR_TOWN_NAME :{TOWN}
|
||||||
STR_VEHICLE_NAME :{VEHICLE}
|
STR_VEHICLE_NAME :{VEHICLE}
|
||||||
STR_WAYPOINT_NAME :{WAYPOINT}
|
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_CARGO :{CARGO_LONG}
|
||||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||||
|
|
|
@ -1504,6 +1504,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ak je zapnuté,
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Automatická obnova dopravných prostriedkov, keď sú staré: {STRING}
|
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.
|
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.
|
||||||
|
|
||||||
|
|
|
@ -1466,6 +1466,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Če je omogoče
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Samoobnovi vozila, ko se postarajo: {STRING}
|
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.
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Če je omogočeno, se vozila ob koncu življenjske dobe avtomatsko zamenjajo pod pogoji samoobnove.
|
||||||
|
|
||||||
|
|
|
@ -1522,6 +1522,7 @@ STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (tiempo de calendario congelado)
|
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 :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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1399,6 +1399,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Todos los model
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Renovar automáticamente vehículos viejos: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1448,6 +1448,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Om det är akti
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Förnya fordon automatiskt när de blir gamla: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -1304,6 +1304,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :வாகனங
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :வாகனங்கள் காலாவதியானால் தானாக மாற்றியமை: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :வாகனங்கள் காலாவதியானால் தானாக மாற்றியமை: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :செயலாக்க செய்யப்பட்டால், வாகனங்கள் காலாவதியாவதற்கு முன்னால் தானாக மாற்றியமைக்கப்படும்
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :செயலாக்க செய்யப்பட்டால், வாகனங்கள் காலாவதியாவதற்கு முன்னால் தானாக மாற்றியமைக்கப்படும்
|
||||||
|
|
||||||
|
|
|
@ -1321,6 +1321,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :เมื่อ
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :เปลี่ยนยานพาหนะใหม่โดยอัตโนมัติเมื่อเก่าเกินไป: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :เปลี่ยนยานพาหนะใหม่โดยอัตโนมัติเมื่อเก่าเกินไป: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :เมื่อเปิดใช้งาน พาหนะที่ใกล้หมดอายุการใช้งาน จะทำการแทนที่ใหม่เอง
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :เมื่อเปิดใช้งาน พาหนะที่ใกล้หมดอายุการใช้งาน จะทำการแทนที่ใหม่เอง
|
||||||
|
|
||||||
|
|
|
@ -1442,6 +1442,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :如啟用此選
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :車輛達到使用年限時自動更新:{STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :車輛達到使用年限時自動更新:{STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :如啟用此選項,所有在符合替換條件時進入維修設施的車輛會被替換。
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :如啟用此選項,所有在符合替換條件時進入維修設施的車輛會被替換。
|
||||||
|
|
||||||
|
|
|
@ -1458,6 +1458,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Etkinleştirild
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Araç eskiyince otomatik olarak yenile: {STRING}
|
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.
|
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.
|
||||||
|
|
||||||
|
|
|
@ -1546,6 +1546,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При вклю
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автозаміна зношених транспортних засобів: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автозаміна зношених транспортних засобів: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :При включенні транспортні засоби з вичерпаним строком служби автоматично замінюються на нові (при виконанні умов автозаміни).
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :При включенні транспортні засоби з вичерпаним строком служби автоматично замінюються на нові (при виконанні умов автозаміни).
|
||||||
|
|
||||||
|
|
|
@ -1174,6 +1174,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :گاڑیوں ک
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :گاڑی پرانی ہونے کی صورت میں خودکار طریقے سے بدل دیں: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :گاڑی پرانی ہونے کی صورت میں خودکار طریقے سے بدل دیں: {STRING}
|
||||||
|
|
||||||
###length 2
|
###length 2
|
||||||
|
|
|
@ -261,6 +261,7 @@ STR_UNITS_DAYS :{COMMA}{NBSP}ng
|
||||||
STR_UNITS_SECONDS :{COMMA}{NBSP}giây
|
STR_UNITS_SECONDS :{COMMA}{NBSP}giây
|
||||||
STR_UNITS_TICKS :{COMMA}{NBSP}tick
|
STR_UNITS_TICKS :{COMMA}{NBSP}tick
|
||||||
|
|
||||||
|
STR_UNITS_MONTHS :{NUM}{NBSP}tháng
|
||||||
|
|
||||||
|
|
||||||
# Common window strings
|
# Common window strings
|
||||||
|
@ -817,6 +818,7 @@ STR_STATUSBAR_AUTOSAVE :{RED}LƯU TỰ
|
||||||
STR_STATUSBAR_SAVING_GAME :{RED}* * ĐANG LƯU GAME * *
|
STR_STATUSBAR_SAVING_GAME :{RED}* * ĐANG LƯU GAME * *
|
||||||
|
|
||||||
STR_STATUSBAR_SPECTATOR :{WHITE}(người xem)
|
STR_STATUSBAR_SPECTATOR :{WHITE}(người xem)
|
||||||
|
STR_STATUSBAR_INFINITE_MONEY :{WHITE}(tiền vô hạn)
|
||||||
|
|
||||||
# News message history
|
# News message history
|
||||||
STR_MESSAGE_HISTORY :{WHITE}Lịch Sử Thông Điệp
|
STR_MESSAGE_HISTORY :{WHITE}Lịch Sử Thông Điệp
|
||||||
|
@ -918,6 +920,10 @@ 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_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.
|
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
|
###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!
|
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Độc quyền vận tải!
|
||||||
|
|
||||||
|
@ -1269,6 +1275,7 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION :Thời hạn tr
|
||||||
###length 2
|
###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_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
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Không có trợ cấp
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Không có trợ cấp
|
||||||
|
|
||||||
|
@ -1458,10 +1465,12 @@ 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
|
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
|
###length 2
|
||||||
|
STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Lịch
|
||||||
|
|
||||||
|
|
||||||
###setting-zero-is-special
|
###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 :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
|
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
|
||||||
|
|
||||||
|
@ -2690,6 +2699,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA
|
||||||
|
|
||||||
# Linkgraph tooltip
|
# Linkgraph tooltip
|
||||||
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} sẽ được hoàn chuyển ({COMMA}% dung lượng)
|
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)
|
# Base for station construction window(s)
|
||||||
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Hiện rõ vùng phủ ảnh hưởng
|
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Hiện rõ vùng phủ ảnh hưởng
|
||||||
|
@ -4167,6 +4177,7 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :toa xe điện
|
||||||
STR_ENGINE_PREVIEW_AIRCRAFT :máy bay
|
STR_ENGINE_PREVIEW_AIRCRAFT :máy bay
|
||||||
STR_ENGINE_PREVIEW_SHIP :tàu thuỷ
|
STR_ENGINE_PREVIEW_SHIP :tàu thuỷ
|
||||||
|
|
||||||
|
STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING}
|
||||||
|
|
||||||
# Autoreplace window
|
# Autoreplace window
|
||||||
STR_REPLACE_VEHICLES_WHITE :{WHITE}Thay thế {STRING} - {STRING}
|
STR_REPLACE_VEHICLES_WHITE :{WHITE}Thay thế {STRING} - {STRING}
|
||||||
|
|
|
@ -1347,6 +1347,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Pan fo wedi'i a
|
||||||
|
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
|
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Awtoadnewyddu cerbyd pan aiff yn hen: {STRING}
|
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
|
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
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ CommandCost CmdDecreaseLoan(DoCommandFlag flags, LoanCommand cmd, Money amount)
|
||||||
loan = std::min(c->current_loan, (Money)LOAN_INTERVAL);
|
loan = std::min(c->current_loan, (Money)LOAN_INTERVAL);
|
||||||
break;
|
break;
|
||||||
case LoanCommand::Max: // Pay back as much as possible
|
case LoanCommand::Max: // Pay back as much as possible
|
||||||
loan = std::max(std::min(c->current_loan, c->money), (Money)LOAN_INTERVAL);
|
loan = std::max(std::min(c->current_loan, GetAvailableMoneyForCommand()), (Money)LOAN_INTERVAL);
|
||||||
loan -= loan % LOAN_INTERVAL;
|
loan -= loan % LOAN_INTERVAL;
|
||||||
break;
|
break;
|
||||||
case LoanCommand::Amount: // Repay the given amount of loan
|
case LoanCommand::Amount: // Repay the given amount of loan
|
||||||
|
@ -105,7 +105,7 @@ CommandCost CmdDecreaseLoan(DoCommandFlag flags, LoanCommand cmd, Money amount)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c->money < loan) {
|
if (GetAvailableMoneyForCommand() < loan) {
|
||||||
SetDParam(0, loan);
|
SetDParam(0, loan);
|
||||||
return_cmd_error(STR_ERROR_CURRENCY_REQUIRED);
|
return_cmd_error(STR_ERROR_CURRENCY_REQUIRED);
|
||||||
}
|
}
|
||||||
|
|
|
@ -633,6 +633,8 @@ public:
|
||||||
|
|
||||||
void OnFailure() override
|
void OnFailure() override
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Query::OnFailure(): connection_string={}", this->connection_string);
|
||||||
|
|
||||||
NetworkGameList *item = NetworkGameListAddItem(connection_string);
|
NetworkGameList *item = NetworkGameListAddItem(connection_string);
|
||||||
item->status = NGLS_OFFLINE;
|
item->status = NGLS_OFFLINE;
|
||||||
item->refreshing = false;
|
item->refreshing = false;
|
||||||
|
@ -642,6 +644,8 @@ public:
|
||||||
|
|
||||||
void OnConnect(SOCKET s) override
|
void OnConnect(SOCKET s) override
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Query::OnConnect(): connection_string={}", this->connection_string);
|
||||||
|
|
||||||
QueryNetworkGameSocketHandler::QueryServer(s, this->connection_string);
|
QueryNetworkGameSocketHandler::QueryServer(s, this->connection_string);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -654,6 +658,8 @@ void NetworkQueryServer(const std::string &connection_string)
|
||||||
{
|
{
|
||||||
if (!_network_available) return;
|
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. */
|
/* Mark the entry as refreshing, so the GUI can show the refresh is pending. */
|
||||||
NetworkGameList *item = NetworkGameListAddItem(connection_string);
|
NetworkGameList *item = NetworkGameListAddItem(connection_string);
|
||||||
item->refreshing = true;
|
item->refreshing = true;
|
||||||
|
@ -730,11 +736,15 @@ public:
|
||||||
|
|
||||||
void OnFailure() override
|
void OnFailure() override
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::OnFailure(): connection_string={}", this->connection_string);
|
||||||
|
|
||||||
ShowNetworkError(STR_NETWORK_ERROR_NOCONNECTION);
|
ShowNetworkError(STR_NETWORK_ERROR_NOCONNECTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnConnect(SOCKET s) override
|
void OnConnect(SOCKET s) override
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::OnConnect(): connection_string={}", this->connection_string);
|
||||||
|
|
||||||
_networking = true;
|
_networking = true;
|
||||||
new ClientNetworkGameSocketHandler(s, this->connection_string);
|
new ClientNetworkGameSocketHandler(s, this->connection_string);
|
||||||
IConsoleCmdExec("exec scripts/on_client.scr 0");
|
IConsoleCmdExec("exec scripts/on_client.scr 0");
|
||||||
|
@ -761,6 +771,8 @@ public:
|
||||||
*/
|
*/
|
||||||
bool NetworkClientConnectGame(const std::string &connection_string, CompanyID default_company, const std::string &join_server_password, const std::string &join_company_password)
|
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;
|
CompanyID join_as = default_company;
|
||||||
std::string resolved_connection_string = ServerAddress::Parse(connection_string, NETWORK_DEFAULT_PORT, &join_as).connection_string;
|
std::string resolved_connection_string = ServerAddress::Parse(connection_string, NETWORK_DEFAULT_PORT, &join_as).connection_string;
|
||||||
|
|
||||||
|
@ -797,6 +809,7 @@ void NetworkClientJoinGame()
|
||||||
NetworkInitialize();
|
NetworkInitialize();
|
||||||
|
|
||||||
_settings_client.network.last_joined = _network_join.connection_string;
|
_settings_client.network.last_joined = _network_join.connection_string;
|
||||||
|
Debug(net, 9, "status = CONNECTING");
|
||||||
_network_join_status = NETWORK_JOIN_STATUS_CONNECTING;
|
_network_join_status = NETWORK_JOIN_STATUS_CONNECTING;
|
||||||
ShowJoinStatusWindow();
|
ShowJoinStatusWindow();
|
||||||
|
|
||||||
|
|
|
@ -338,7 +338,11 @@ static_assert(NETWORK_SERVER_ID_LENGTH == MD5_HASH_BYTES * 2 + 1);
|
||||||
/** Tell the server we would like to join. */
|
/** Tell the server we would like to join. */
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin()
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendJoin()");
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::status = JOIN");
|
||||||
my_client->status = STATUS_JOIN;
|
my_client->status = STATUS_JOIN;
|
||||||
|
Debug(net, 9, "Client::join_status = AUTHORIZING");
|
||||||
_network_join_status = NETWORK_JOIN_STATUS_AUTHORIZING;
|
_network_join_status = NETWORK_JOIN_STATUS_AUTHORIZING;
|
||||||
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
||||||
|
|
||||||
|
@ -355,6 +359,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin()
|
||||||
/** Tell the server we got all the NewGRFs. */
|
/** Tell the server we got all the NewGRFs. */
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendNewGRFsOk()
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendNewGRFsOk()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendNewGRFsOk()");
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_NEWGRFS_CHECKED);
|
Packet *p = new Packet(PACKET_CLIENT_NEWGRFS_CHECKED);
|
||||||
my_client->SendPacket(p);
|
my_client->SendPacket(p);
|
||||||
return NETWORK_RECV_STATUS_OKAY;
|
return NETWORK_RECV_STATUS_OKAY;
|
||||||
|
@ -366,6 +372,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendNewGRFsOk()
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendGamePassword(const std::string &password)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendGamePassword(const std::string &password)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendGamePassword()");
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_GAME_PASSWORD);
|
Packet *p = new Packet(PACKET_CLIENT_GAME_PASSWORD);
|
||||||
p->Send_string(password);
|
p->Send_string(password);
|
||||||
my_client->SendPacket(p);
|
my_client->SendPacket(p);
|
||||||
|
@ -378,6 +386,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGamePassword(const std::st
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const std::string &password)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const std::string &password)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendCompanyPassword()");
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_COMPANY_PASSWORD);
|
Packet *p = new Packet(PACKET_CLIENT_COMPANY_PASSWORD);
|
||||||
p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed));
|
p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed));
|
||||||
my_client->SendPacket(p);
|
my_client->SendPacket(p);
|
||||||
|
@ -387,6 +397,9 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCompanyPassword(const std:
|
||||||
/** Request the map from the server. */
|
/** Request the map from the server. */
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendGetMap()
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendGetMap()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendGetMap()");
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::status = MAP_WAIT");
|
||||||
my_client->status = STATUS_MAP_WAIT;
|
my_client->status = STATUS_MAP_WAIT;
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_GETMAP);
|
Packet *p = new Packet(PACKET_CLIENT_GETMAP);
|
||||||
|
@ -397,6 +410,9 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGetMap()
|
||||||
/** Tell the server we received the complete map. */
|
/** Tell the server we received the complete map. */
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendMapOk()
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendMapOk()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendMapOk()");
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::status = ACTIVE");
|
||||||
my_client->status = STATUS_ACTIVE;
|
my_client->status = STATUS_ACTIVE;
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_MAP_OK);
|
Packet *p = new Packet(PACKET_CLIENT_MAP_OK);
|
||||||
|
@ -407,6 +423,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendMapOk()
|
||||||
/** Send an acknowledgement from the server's ticks. */
|
/** Send an acknowledgement from the server's ticks. */
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendAck()
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendAck()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendAck()");
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_ACK);
|
Packet *p = new Packet(PACKET_CLIENT_ACK);
|
||||||
|
|
||||||
p->Send_uint32(_frame_counter);
|
p->Send_uint32(_frame_counter);
|
||||||
|
@ -421,6 +439,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendAck()
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendCommand(const CommandPacket *cp)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendCommand(const CommandPacket *cp)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendCommand(): cmd={}", cp->cmd);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_COMMAND);
|
Packet *p = new Packet(PACKET_CLIENT_COMMAND);
|
||||||
my_client->NetworkGameSocketHandler::SendCommand(p, cp);
|
my_client->NetworkGameSocketHandler::SendCommand(p, cp);
|
||||||
|
|
||||||
|
@ -431,6 +451,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendCommand(const CommandPacke
|
||||||
/** Send a chat-packet over the network */
|
/** Send a chat-packet over the network */
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action, DestType type, int dest, const std::string &msg, int64_t data)
|
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);
|
Packet *p = new Packet(PACKET_CLIENT_CHAT);
|
||||||
|
|
||||||
p->Send_uint8 (action);
|
p->Send_uint8 (action);
|
||||||
|
@ -446,6 +468,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendChat(NetworkAction action,
|
||||||
/** Send an error-packet over the network */
|
/** Send an error-packet over the network */
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendError(NetworkErrorCode errorno)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendError(NetworkErrorCode errorno)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendError(): errorno={}", errorno);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_ERROR);
|
Packet *p = new Packet(PACKET_CLIENT_ERROR);
|
||||||
|
|
||||||
p->Send_uint8(errorno);
|
p->Send_uint8(errorno);
|
||||||
|
@ -459,6 +483,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendError(NetworkErrorCode err
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetPassword(const std::string &password)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetPassword(const std::string &password)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendSetPassword()");
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_SET_PASSWORD);
|
Packet *p = new Packet(PACKET_CLIENT_SET_PASSWORD);
|
||||||
|
|
||||||
p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed));
|
p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed));
|
||||||
|
@ -472,6 +498,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetPassword(const std::str
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetName(const std::string &name)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetName(const std::string &name)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendSetName()");
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_SET_NAME);
|
Packet *p = new Packet(PACKET_CLIENT_SET_NAME);
|
||||||
|
|
||||||
p->Send_string(name);
|
p->Send_string(name);
|
||||||
|
@ -484,6 +512,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendSetName(const std::string
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendQuit()
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendQuit()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendSetName()");
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_QUIT);
|
Packet *p = new Packet(PACKET_CLIENT_QUIT);
|
||||||
|
|
||||||
my_client->SendPacket(p);
|
my_client->SendPacket(p);
|
||||||
|
@ -497,6 +527,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendQuit()
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendRCon(const std::string &pass, const std::string &command)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendRCon(const std::string &pass, const std::string &command)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendRCon()");
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_RCON);
|
Packet *p = new Packet(PACKET_CLIENT_RCON);
|
||||||
p->Send_string(pass);
|
p->Send_string(pass);
|
||||||
p->Send_string(command);
|
p->Send_string(command);
|
||||||
|
@ -511,6 +543,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendRCon(const std::string &pa
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::SendMove(CompanyID company, const std::string &password)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::SendMove(CompanyID company, const std::string &password)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::SendMove(): company={}", company);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_CLIENT_MOVE);
|
Packet *p = new Packet(PACKET_CLIENT_MOVE);
|
||||||
p->Send_uint8(company);
|
p->Send_uint8(company);
|
||||||
p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed));
|
p->Send_string(GenerateCompanyPasswordHash(password, _password_server_id, _password_game_seed));
|
||||||
|
@ -537,6 +571,8 @@ extern bool SafeLoad(const std::string &filename, SaveLoadOperation fop, Detaile
|
||||||
|
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_FULL()");
|
||||||
|
|
||||||
/* We try to join a server which is full */
|
/* We try to join a server which is full */
|
||||||
ShowErrorMessage(STR_NETWORK_ERROR_SERVER_FULL, INVALID_STRING_ID, WL_CRITICAL);
|
ShowErrorMessage(STR_NETWORK_ERROR_SERVER_FULL, INVALID_STRING_ID, WL_CRITICAL);
|
||||||
|
|
||||||
|
@ -545,6 +581,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
|
||||||
|
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_BANNED()");
|
||||||
|
|
||||||
/* We try to join a server where we are banned */
|
/* We try to join a server where we are banned */
|
||||||
ShowErrorMessage(STR_NETWORK_ERROR_SERVER_BANNED, INVALID_STRING_ID, WL_CRITICAL);
|
ShowErrorMessage(STR_NETWORK_ERROR_SERVER_BANNED, INVALID_STRING_ID, WL_CRITICAL);
|
||||||
|
|
||||||
|
@ -560,6 +598,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac
|
||||||
ClientID client_id = (ClientID)p->Recv_uint32();
|
ClientID client_id = (ClientID)p->Recv_uint32();
|
||||||
CompanyID playas = (CompanyID)p->Recv_uint8();
|
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);
|
std::string name = p->Recv_string(NETWORK_NAME_LENGTH);
|
||||||
|
|
||||||
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
||||||
|
@ -639,6 +679,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p
|
||||||
|
|
||||||
NetworkErrorCode error = (NetworkErrorCode)p->Recv_uint8();
|
NetworkErrorCode error = (NetworkErrorCode)p->Recv_uint8();
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_ERROR(): error={}", error);
|
||||||
|
|
||||||
StringID err = STR_NETWORK_ERROR_LOSTCONNECTION;
|
StringID err = STR_NETWORK_ERROR_LOSTCONNECTION;
|
||||||
if (error < (ptrdiff_t)lengthof(network_error_strings)) err = network_error_strings[error];
|
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 */
|
/* In case of kicking a client, we assume there is a kick message in the packet if we can read one byte */
|
||||||
|
@ -662,6 +704,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(P
|
||||||
uint grf_count = p->Recv_uint8();
|
uint grf_count = p->Recv_uint8();
|
||||||
NetworkRecvStatus ret = NETWORK_RECV_STATUS_OKAY;
|
NetworkRecvStatus ret = NETWORK_RECV_STATUS_OKAY;
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_CHECK_NEWGRFS(): grf_count={}", grf_count);
|
||||||
|
|
||||||
/* Check all GRFs */
|
/* Check all GRFs */
|
||||||
for (; grf_count > 0; grf_count--) {
|
for (; grf_count > 0; grf_count--) {
|
||||||
GRFIdentifier c;
|
GRFIdentifier c;
|
||||||
|
@ -689,8 +733,11 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(P
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_GAME_PASSWORD(Packet *)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_GAME_PASSWORD(Packet *)
|
||||||
{
|
{
|
||||||
if (this->status < STATUS_JOIN || this->status >= STATUS_AUTH_GAME) return NETWORK_RECV_STATUS_MALFORMED_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;
|
this->status = STATUS_AUTH_GAME;
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_NEED_GAME_PASSWORD()");
|
||||||
|
|
||||||
if (!_network_join.server_password.empty()) {
|
if (!_network_join.server_password.empty()) {
|
||||||
return SendGamePassword(_network_join.server_password);
|
return SendGamePassword(_network_join.server_password);
|
||||||
}
|
}
|
||||||
|
@ -703,8 +750,11 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_GAME_PASSW
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PASSWORD(Packet *p)
|
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;
|
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;
|
this->status = STATUS_AUTH_COMPANY;
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_NEED_COMPANY_PASSWORD()");
|
||||||
|
|
||||||
_password_game_seed = p->Recv_uint32();
|
_password_game_seed = p->Recv_uint32();
|
||||||
_password_server_id = p->Recv_string(NETWORK_SERVER_ID_LENGTH);
|
_password_server_id = p->Recv_string(NETWORK_SERVER_ID_LENGTH);
|
||||||
if (this->HasClientQuit()) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
if (this->HasClientQuit()) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
||||||
|
@ -721,10 +771,13 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEED_COMPANY_PA
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet *p)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WELCOME(Packet *p)
|
||||||
{
|
{
|
||||||
if (this->status < STATUS_JOIN || this->status >= STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
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;
|
this->status = STATUS_AUTHORIZED;
|
||||||
|
|
||||||
_network_own_client_id = (ClientID)p->Recv_uint32();
|
_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. */
|
/* Initialize the password hash salting variables, even if they were previously. */
|
||||||
_password_game_seed = p->Recv_uint32();
|
_password_game_seed = p->Recv_uint32();
|
||||||
_password_server_id = p->Recv_string(NETWORK_SERVER_ID_LENGTH);
|
_password_server_id = p->Recv_string(NETWORK_SERVER_ID_LENGTH);
|
||||||
|
@ -738,7 +791,10 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WAIT(Packet *p)
|
||||||
/* We set the internal wait state when requesting the map. */
|
/* We set the internal wait state when requesting the map. */
|
||||||
if (this->status != STATUS_MAP_WAIT) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
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. */
|
/* 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_status = NETWORK_JOIN_STATUS_WAITING;
|
||||||
_network_join_waiting = p->Recv_uint8();
|
_network_join_waiting = p->Recv_uint8();
|
||||||
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
||||||
|
@ -749,6 +805,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_WAIT(Packet *p)
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_BEGIN(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;
|
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;
|
this->status = STATUS_MAP;
|
||||||
|
|
||||||
if (this->savegame != nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
if (this->savegame != nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
||||||
|
@ -757,9 +814,12 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_BEGIN(Packe
|
||||||
|
|
||||||
_frame_counter = _frame_counter_server = _frame_counter_max = p->Recv_uint32();
|
_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 = 0;
|
||||||
_network_join_bytes_total = 0;
|
_network_join_bytes_total = 0;
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::join_status = DOWNLOADING");
|
||||||
_network_join_status = NETWORK_JOIN_STATUS_DOWNLOADING;
|
_network_join_status = NETWORK_JOIN_STATUS_DOWNLOADING;
|
||||||
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
||||||
|
|
||||||
|
@ -774,6 +834,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_SIZE(Packet
|
||||||
_network_join_bytes_total = p->Recv_uint32();
|
_network_join_bytes_total = p->Recv_uint32();
|
||||||
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
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;
|
return NETWORK_RECV_STATUS_OKAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -796,6 +858,9 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet
|
||||||
if (this->status != STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
if (this->status != STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
||||||
if (this->savegame == nullptr) 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;
|
_network_join_status = NETWORK_JOIN_STATUS_PROCESSING;
|
||||||
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN);
|
||||||
|
|
||||||
|
@ -837,6 +902,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet
|
||||||
if (_network_join.company != COMPANY_SPECTATOR) {
|
if (_network_join.company != COMPANY_SPECTATOR) {
|
||||||
/* We have arrived and ready to start playing; send a command to make a new company;
|
/* 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 */
|
* 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;
|
_network_join_status = NETWORK_JOIN_STATUS_REGISTERING;
|
||||||
ShowJoinStatusWindow();
|
ShowJoinStatusWindow();
|
||||||
Command<CMD_COMPANY_CTRL>::SendNet(STR_NULL, _local_company, CCA_NEW, INVALID_COMPANY, CRR_NONE, INVALID_CLIENT_ID);
|
Command<CMD_COMPANY_CTRL>::SendNet(STR_NULL, _local_company, CCA_NEW, INVALID_COMPANY, CRR_NONE, INVALID_CLIENT_ID);
|
||||||
|
@ -875,8 +941,6 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_FRAME(Packet *p
|
||||||
/* Receive the token. */
|
/* Receive the token. */
|
||||||
if (p->CanReadFromPacket(sizeof(uint8_t))) this->token = p->Recv_uint8();
|
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
|
/* Let the server know that we received this frame correctly
|
||||||
* We do this only once per day, to save some bandwidth ;) */
|
* We do this only once per day, to save some bandwidth ;) */
|
||||||
if (!_network_first_time && last_ack_frame < _frame_counter) {
|
if (!_network_first_time && last_ack_frame < _frame_counter) {
|
||||||
|
@ -898,6 +962,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_SYNC(Packet *p)
|
||||||
_sync_seed_2 = p->Recv_uint32();
|
_sync_seed_2 = p->Recv_uint32();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_SYNC(): sync_frame={}, sync_seed_1={}", _sync_frame, _sync_seed_1);
|
||||||
|
|
||||||
return NETWORK_RECV_STATUS_OKAY;
|
return NETWORK_RECV_STATUS_OKAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -910,6 +976,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMMAND(Packet
|
||||||
cp.frame = p->Recv_uint32();
|
cp.frame = p->Recv_uint32();
|
||||||
cp.my_cmd = p->Recv_bool();
|
cp.my_cmd = p->Recv_bool();
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_COMMAND(): cmd={}, frame={}", cp.cmd, cp.frame);
|
||||||
|
|
||||||
if (err != nullptr) {
|
if (err != nullptr) {
|
||||||
IConsolePrint(CC_WARNING, "Dropping server connection due to {}.", err);
|
IConsolePrint(CC_WARNING, "Dropping server connection due to {}.", err);
|
||||||
return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
||||||
|
@ -933,6 +1001,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHAT(Packet *p)
|
||||||
std::string msg = p->Recv_string(NETWORK_CHAT_LENGTH);
|
std::string msg = p->Recv_string(NETWORK_CHAT_LENGTH);
|
||||||
int64_t data = p->Recv_uint64();
|
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);
|
ci_to = NetworkClientInfo::GetByClientID(client_id);
|
||||||
if (ci_to == nullptr) return NETWORK_RECV_STATUS_OKAY;
|
if (ci_to == nullptr) return NETWORK_RECV_STATUS_OKAY;
|
||||||
|
|
||||||
|
@ -978,6 +1048,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_EXTERNAL_CHAT(P
|
||||||
std::string user = p->Recv_string(NETWORK_CHAT_LENGTH);
|
std::string user = p->Recv_string(NETWORK_CHAT_LENGTH);
|
||||||
std::string msg = 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;
|
if (!IsValidConsoleColour(colour)) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
||||||
|
|
||||||
NetworkTextMessage(NETWORK_ACTION_EXTERNAL_CHAT, colour, false, user, msg, 0, source);
|
NetworkTextMessage(NETWORK_ACTION_EXTERNAL_CHAT, colour, false, user, msg, 0, source);
|
||||||
|
@ -991,6 +1063,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR_QUIT(Pack
|
||||||
|
|
||||||
ClientID client_id = (ClientID)p->Recv_uint32();
|
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);
|
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
|
||||||
if (ci != nullptr) {
|
if (ci != nullptr) {
|
||||||
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, "", GetNetworkErrorMsg((NetworkErrorCode)p->Recv_uint8()));
|
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, "", GetNetworkErrorMsg((NetworkErrorCode)p->Recv_uint8()));
|
||||||
|
@ -1008,6 +1082,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_QUIT(Packet *p)
|
||||||
|
|
||||||
ClientID client_id = (ClientID)p->Recv_uint32();
|
ClientID client_id = (ClientID)p->Recv_uint32();
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_QUIT(): client_id={}", client_id);
|
||||||
|
|
||||||
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
|
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
|
||||||
if (ci != nullptr) {
|
if (ci != nullptr) {
|
||||||
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, "", STR_NETWORK_MESSAGE_CLIENT_LEAVING);
|
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, ci->client_name, "", STR_NETWORK_MESSAGE_CLIENT_LEAVING);
|
||||||
|
@ -1028,6 +1104,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_JOIN(Packet *p)
|
||||||
|
|
||||||
ClientID client_id = (ClientID)p->Recv_uint32();
|
ClientID client_id = (ClientID)p->Recv_uint32();
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_JOIN(): client_id={}", client_id);
|
||||||
|
|
||||||
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
|
NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id);
|
||||||
if (ci != nullptr) {
|
if (ci != nullptr) {
|
||||||
NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, ci->client_name);
|
NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, ci->client_name);
|
||||||
|
@ -1040,6 +1118,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_JOIN(Packet *p)
|
||||||
|
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_SHUTDOWN(Packet *)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_SHUTDOWN(Packet *)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_SHUTDOWN()");
|
||||||
|
|
||||||
/* Only when we're trying to join we really
|
/* Only when we're trying to join we really
|
||||||
* care about the server shutting down. */
|
* care about the server shutting down. */
|
||||||
if (this->status >= STATUS_JOIN) {
|
if (this->status >= STATUS_JOIN) {
|
||||||
|
@ -1053,6 +1133,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_SHUTDOWN(Packet
|
||||||
|
|
||||||
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEWGAME(Packet *)
|
NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_NEWGAME(Packet *)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_NEWGAME()");
|
||||||
|
|
||||||
/* Only when we're trying to join we really
|
/* Only when we're trying to join we really
|
||||||
* care about the server shutting down. */
|
* care about the server shutting down. */
|
||||||
if (this->status >= STATUS_JOIN) {
|
if (this->status >= STATUS_JOIN) {
|
||||||
|
@ -1072,6 +1154,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_RCON(Packet *p)
|
||||||
{
|
{
|
||||||
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
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();
|
TextColour colour_code = (TextColour)p->Recv_uint16();
|
||||||
if (!IsValidConsoleColour(colour_code)) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
if (!IsValidConsoleColour(colour_code)) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
|
||||||
|
|
||||||
|
@ -1090,6 +1174,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MOVE(Packet *p)
|
||||||
ClientID client_id = (ClientID)p->Recv_uint32();
|
ClientID client_id = (ClientID)p->Recv_uint32();
|
||||||
CompanyID company_id = (CompanyID)p->Recv_uint8();
|
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) {
|
if (client_id == 0) {
|
||||||
/* definitely an invalid client id, debug message and do nothing. */
|
/* definitely an invalid client id, debug message and do nothing. */
|
||||||
Debug(net, 1, "Received invalid client index = 0");
|
Debug(net, 1, "Received invalid client index = 0");
|
||||||
|
@ -1118,6 +1204,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(P
|
||||||
_network_server_name = p->Recv_string(NETWORK_NAME_LENGTH);
|
_network_server_name = p->Recv_string(NETWORK_NAME_LENGTH);
|
||||||
SetWindowClassesDirty(WC_CLIENT_LIST);
|
SetWindowClassesDirty(WC_CLIENT_LIST);
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_CONFIG_UPDATE(): max_companies={}", _network_server_max_companies);
|
||||||
|
|
||||||
return NETWORK_RECV_STATUS_OKAY;
|
return NETWORK_RECV_STATUS_OKAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1129,6 +1217,8 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMPANY_UPDATE(
|
||||||
_network_company_passworded = p->Recv_uint16();
|
_network_company_passworded = p->Recv_uint16();
|
||||||
SetWindowClassesDirty(WC_COMPANY);
|
SetWindowClassesDirty(WC_COMPANY);
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::Receive_SERVER_COMPANY_UPDATE()");
|
||||||
|
|
||||||
return NETWORK_RECV_STATUS_OKAY;
|
return NETWORK_RECV_STATUS_OKAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1168,6 +1258,9 @@ void NetworkClient_Connected()
|
||||||
_frame_counter = 0;
|
_frame_counter = 0;
|
||||||
_frame_counter_server = 0;
|
_frame_counter_server = 0;
|
||||||
last_ack_frame = 0;
|
last_ack_frame = 0;
|
||||||
|
|
||||||
|
Debug(net, 9, "Client::NetworkClient_Connected()");
|
||||||
|
|
||||||
/* Request the game-info */
|
/* Request the game-info */
|
||||||
MyClient::SendJoin();
|
MyClient::SendJoin();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1677,6 +1677,18 @@ public:
|
||||||
void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
|
void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
|
||||||
{
|
{
|
||||||
switch (widget) {
|
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:
|
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 = 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;
|
size->width += padding.width;
|
||||||
|
|
|
@ -81,12 +81,16 @@ void QueryNetworkGameSocketHandler::Send()
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus QueryNetworkGameSocketHandler::SendGameInfo()
|
NetworkRecvStatus QueryNetworkGameSocketHandler::SendGameInfo()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Query::SendGameInfo()");
|
||||||
|
|
||||||
this->SendPacket(new Packet(PACKET_CLIENT_GAME_INFO));
|
this->SendPacket(new Packet(PACKET_CLIENT_GAME_INFO));
|
||||||
return NETWORK_RECV_STATUS_OKAY;
|
return NETWORK_RECV_STATUS_OKAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
|
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Query::Receive_SERVER_FULL()");
|
||||||
|
|
||||||
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
|
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
|
||||||
item->status = NGLS_FULL;
|
item->status = NGLS_FULL;
|
||||||
item->refreshing = false;
|
item->refreshing = false;
|
||||||
|
@ -98,6 +102,8 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *)
|
||||||
|
|
||||||
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *)
|
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Query::Receive_SERVER_BANNED()");
|
||||||
|
|
||||||
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
|
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
|
||||||
item->status = NGLS_BANNED;
|
item->status = NGLS_BANNED;
|
||||||
item->refreshing = false;
|
item->refreshing = false;
|
||||||
|
@ -109,6 +115,8 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *)
|
||||||
|
|
||||||
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet *p)
|
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet *p)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Query::Receive_SERVER_GAME_INFO()");
|
||||||
|
|
||||||
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
|
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
|
||||||
|
|
||||||
/* Clear any existing GRFConfig chain. */
|
/* Clear any existing GRFConfig chain. */
|
||||||
|
@ -130,6 +138,8 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p)
|
||||||
{
|
{
|
||||||
NetworkErrorCode error = (NetworkErrorCode)p->Recv_uint8();
|
NetworkErrorCode error = (NetworkErrorCode)p->Recv_uint8();
|
||||||
|
|
||||||
|
Debug(net, 9, "Query::Receive_SERVER_ERROR(): error={}", error);
|
||||||
|
|
||||||
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
|
NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
|
||||||
|
|
||||||
if (error == NETWORK_ERROR_NOT_EXPECTED) {
|
if (error == NETWORK_ERROR_NOT_EXPECTED) {
|
||||||
|
|
|
@ -215,6 +215,8 @@ ServerNetworkGameSocketHandler::ServerNetworkGameSocketHandler(SOCKET s) : Netwo
|
||||||
this->client_id = _network_client_id++;
|
this->client_id = _network_client_id++;
|
||||||
this->receive_limit = _settings_client.network.bytes_per_frame_burst;
|
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,
|
/* 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
|
* each Socket will be associated with at most one Info object. As
|
||||||
* such if the Socket was allocated the Info object can as well. */
|
* such if the Socket was allocated the Info object can as well. */
|
||||||
|
@ -345,6 +347,8 @@ static void NetworkHandleCommandQueue(NetworkClientSocket *cs);
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendClientInfo(NetworkClientInfo *ci)
|
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) {
|
if (ci->client_id != INVALID_CLIENT_ID) {
|
||||||
Packet *p = new Packet(PACKET_SERVER_CLIENT_INFO);
|
Packet *p = new Packet(PACKET_SERVER_CLIENT_INFO);
|
||||||
p->Send_uint32(ci->client_id);
|
p->Send_uint32(ci->client_id);
|
||||||
|
@ -359,6 +363,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendClientInfo(NetworkClientIn
|
||||||
/** Send the client information about the server. */
|
/** Send the client information about the server. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendGameInfo()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendGameInfo()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendGameInfo()", this->client_id);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_SERVER_GAME_INFO, TCP_MTU);
|
Packet *p = new Packet(PACKET_SERVER_GAME_INFO, TCP_MTU);
|
||||||
SerializeNetworkGameInfo(p, GetCurrentNetworkServerGameInfo());
|
SerializeNetworkGameInfo(p, GetCurrentNetworkServerGameInfo());
|
||||||
|
|
||||||
|
@ -374,6 +380,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendGameInfo()
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode error, const std::string &reason)
|
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);
|
Packet *p = new Packet(PACKET_SERVER_ERROR);
|
||||||
|
|
||||||
p->Send_uint8(error);
|
p->Send_uint8(error);
|
||||||
|
@ -417,6 +425,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err
|
||||||
/** Send the check for the NewGRFs. */
|
/** Send the check for the NewGRFs. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendNewGRFCheck()", this->client_id);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_SERVER_CHECK_NEWGRFS, TCP_MTU);
|
Packet *p = new Packet(PACKET_SERVER_CHECK_NEWGRFS, TCP_MTU);
|
||||||
const GRFConfig *c;
|
const GRFConfig *c;
|
||||||
uint grf_count = 0;
|
uint grf_count = 0;
|
||||||
|
@ -437,9 +447,12 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck()
|
||||||
/** Request the game password. */
|
/** Request the game password. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendNeedGamePassword()", this->client_id);
|
||||||
|
|
||||||
/* Invalid packet when status is STATUS_AUTH_GAME or higher */
|
/* Invalid packet when status is STATUS_AUTH_GAME or higher */
|
||||||
if (this->status >= STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
|
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;
|
this->status = STATUS_AUTH_GAME;
|
||||||
/* Reset 'lag' counters */
|
/* Reset 'lag' counters */
|
||||||
this->last_frame = this->last_frame_server = _frame_counter;
|
this->last_frame = this->last_frame_server = _frame_counter;
|
||||||
|
@ -452,9 +465,12 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedGamePassword()
|
||||||
/** Request the company password. */
|
/** Request the company password. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendNeedCompanyPassword()", this->client_id);
|
||||||
|
|
||||||
/* Invalid packet when status is STATUS_AUTH_COMPANY or higher */
|
/* Invalid packet when status is STATUS_AUTH_COMPANY or higher */
|
||||||
if (this->status >= STATUS_AUTH_COMPANY) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
|
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;
|
this->status = STATUS_AUTH_COMPANY;
|
||||||
/* Reset 'lag' counters */
|
/* Reset 'lag' counters */
|
||||||
this->last_frame = this->last_frame_server = _frame_counter;
|
this->last_frame = this->last_frame_server = _frame_counter;
|
||||||
|
@ -469,11 +485,14 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword()
|
||||||
/** Send the client a welcome message with some basic information. */
|
/** Send the client a welcome message with some basic information. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendWelcome()", this->client_id);
|
||||||
|
|
||||||
Packet *p;
|
Packet *p;
|
||||||
|
|
||||||
/* Invalid packet when status is AUTH or higher */
|
/* Invalid packet when status is AUTH or higher */
|
||||||
if (this->status >= STATUS_AUTHORIZED) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
|
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;
|
this->status = STATUS_AUTHORIZED;
|
||||||
/* Reset 'lag' counters */
|
/* Reset 'lag' counters */
|
||||||
this->last_frame = this->last_frame_server = _frame_counter;
|
this->last_frame = this->last_frame_server = _frame_counter;
|
||||||
|
@ -499,6 +518,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome()
|
||||||
/** Tell the client that its put in a waiting queue. */
|
/** Tell the client that its put in a waiting queue. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendWait()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendWait()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendWait()", this->client_id);
|
||||||
|
|
||||||
int waiting = 1; // current player getting the map counts as 1
|
int waiting = 1; // current player getting the map counts as 1
|
||||||
Packet *p;
|
Packet *p;
|
||||||
|
|
||||||
|
@ -516,6 +537,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWait()
|
||||||
|
|
||||||
void ServerNetworkGameSocketHandler::CheckNextClientToSendMap(NetworkClientSocket *ignore_cs)
|
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. */
|
/* Find the best candidate for joining, i.e. the first joiner. */
|
||||||
NetworkClientSocket *best = nullptr;
|
NetworkClientSocket *best = nullptr;
|
||||||
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
|
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
|
||||||
|
@ -550,6 +573,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->status == STATUS_AUTHORIZED) {
|
if (this->status == STATUS_AUTHORIZED) {
|
||||||
|
Debug(net, 9, "client[{}] SendMap(): first_packet", this->client_id);
|
||||||
|
|
||||||
WaitTillSaved();
|
WaitTillSaved();
|
||||||
this->savegame = new PacketWriter(this);
|
this->savegame = new PacketWriter(this);
|
||||||
|
|
||||||
|
@ -559,6 +584,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
|
||||||
this->SendPacket(p);
|
this->SendPacket(p);
|
||||||
|
|
||||||
NetworkSyncCommandQueue(this);
|
NetworkSyncCommandQueue(this);
|
||||||
|
Debug(net, 9, "client[{}] status = MAP", this->client_id);
|
||||||
this->status = STATUS_MAP;
|
this->status = STATUS_MAP;
|
||||||
/* Mark the start of download */
|
/* Mark the start of download */
|
||||||
this->last_frame = _frame_counter;
|
this->last_frame = _frame_counter;
|
||||||
|
@ -571,12 +597,15 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
|
||||||
if (this->status == STATUS_MAP) {
|
if (this->status == STATUS_MAP) {
|
||||||
bool last_packet = this->savegame->TransferToNetworkQueue(this);
|
bool last_packet = this->savegame->TransferToNetworkQueue(this);
|
||||||
if (last_packet) {
|
if (last_packet) {
|
||||||
|
Debug(net, 9, "client[{}] SendMap(): last_packet", this->client_id);
|
||||||
|
|
||||||
/* Done reading, make sure saving is done as well */
|
/* Done reading, make sure saving is done as well */
|
||||||
this->savegame->Destroy();
|
this->savegame->Destroy();
|
||||||
this->savegame = nullptr;
|
this->savegame = nullptr;
|
||||||
|
|
||||||
/* Set the status to DONE_MAP, no we will wait for the client
|
/* Set the status to DONE_MAP, no we will wait for the client
|
||||||
* to send it is ready (maybe that happens like never ;)) */
|
* 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->status = STATUS_DONE_MAP;
|
||||||
|
|
||||||
this->CheckNextClientToSendMap();
|
this->CheckNextClientToSendMap();
|
||||||
|
@ -591,6 +620,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendJoin(ClientID client_id)
|
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);
|
Packet *p = new Packet(PACKET_SERVER_JOIN);
|
||||||
|
|
||||||
p->Send_uint32(client_id);
|
p->Send_uint32(client_id);
|
||||||
|
@ -625,6 +656,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendFrame()
|
||||||
/** Request the client to sync. */
|
/** Request the client to sync. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendSync()
|
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);
|
Packet *p = new Packet(PACKET_SERVER_SYNC);
|
||||||
p->Send_uint32(_frame_counter);
|
p->Send_uint32(_frame_counter);
|
||||||
p->Send_uint32(_sync_seed_1);
|
p->Send_uint32(_sync_seed_1);
|
||||||
|
@ -642,6 +675,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendSync()
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendCommand(const CommandPacket *cp)
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendCommand(const CommandPacket *cp)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendCommand(): cmd={}", this->client_id, cp->cmd);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_SERVER_COMMAND);
|
Packet *p = new Packet(PACKET_SERVER_COMMAND);
|
||||||
|
|
||||||
this->NetworkGameSocketHandler::SendCommand(p, cp);
|
this->NetworkGameSocketHandler::SendCommand(p, cp);
|
||||||
|
@ -662,6 +697,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCommand(const CommandPacke
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action, ClientID client_id, bool self_send, const std::string &msg, int64_t data)
|
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;
|
if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY;
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_SERVER_CHAT);
|
Packet *p = new Packet(PACKET_SERVER_CHAT);
|
||||||
|
@ -685,6 +722,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action,
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendExternalChat(const std::string &source, TextColour colour, const std::string &user, const std::string &msg)
|
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;
|
if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY;
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_SERVER_EXTERNAL_CHAT);
|
Packet *p = new Packet(PACKET_SERVER_EXTERNAL_CHAT);
|
||||||
|
@ -705,6 +744,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendExternalChat(const std::st
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendErrorQuit(ClientID client_id, NetworkErrorCode errorno)
|
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);
|
Packet *p = new Packet(PACKET_SERVER_ERROR_QUIT);
|
||||||
|
|
||||||
p->Send_uint32(client_id);
|
p->Send_uint32(client_id);
|
||||||
|
@ -720,6 +761,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendErrorQuit(ClientID client_
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendQuit(ClientID client_id)
|
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);
|
Packet *p = new Packet(PACKET_SERVER_QUIT);
|
||||||
|
|
||||||
p->Send_uint32(client_id);
|
p->Send_uint32(client_id);
|
||||||
|
@ -731,6 +774,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendQuit(ClientID client_id)
|
||||||
/** Tell the client we're shutting down. */
|
/** Tell the client we're shutting down. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendShutdown()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendShutdown()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendShutdown()", this->client_id);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_SERVER_SHUTDOWN);
|
Packet *p = new Packet(PACKET_SERVER_SHUTDOWN);
|
||||||
this->SendPacket(p);
|
this->SendPacket(p);
|
||||||
return NETWORK_RECV_STATUS_OKAY;
|
return NETWORK_RECV_STATUS_OKAY;
|
||||||
|
@ -739,6 +784,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendShutdown()
|
||||||
/** Tell the client we're starting a new game. */
|
/** Tell the client we're starting a new game. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGame()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGame()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendNewGame()", this->client_id);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_SERVER_NEWGAME);
|
Packet *p = new Packet(PACKET_SERVER_NEWGAME);
|
||||||
this->SendPacket(p);
|
this->SendPacket(p);
|
||||||
return NETWORK_RECV_STATUS_OKAY;
|
return NETWORK_RECV_STATUS_OKAY;
|
||||||
|
@ -751,6 +798,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGame()
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendRConResult(uint16_t colour, const std::string &command)
|
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);
|
Packet *p = new Packet(PACKET_SERVER_RCON);
|
||||||
|
|
||||||
p->Send_uint16(colour);
|
p->Send_uint16(colour);
|
||||||
|
@ -766,6 +815,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendRConResult(uint16_t colour
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendMove(ClientID client_id, CompanyID company_id)
|
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);
|
Packet *p = new Packet(PACKET_SERVER_MOVE);
|
||||||
|
|
||||||
p->Send_uint32(client_id);
|
p->Send_uint32(client_id);
|
||||||
|
@ -777,6 +828,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMove(ClientID client_id, C
|
||||||
/** Send an update about the company password states. */
|
/** Send an update about the company password states. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendCompanyUpdate()", this->client_id);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_SERVER_COMPANY_UPDATE);
|
Packet *p = new Packet(PACKET_SERVER_COMPANY_UPDATE);
|
||||||
|
|
||||||
static_assert(sizeof(_network_company_passworded) <= sizeof(uint16_t));
|
static_assert(sizeof(_network_company_passworded) <= sizeof(uint16_t));
|
||||||
|
@ -788,6 +841,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate()
|
||||||
/** Send an update about the max company/spectator counts. */
|
/** Send an update about the max company/spectator counts. */
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate()
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] SendConfigUpdate()", this->client_id);
|
||||||
|
|
||||||
Packet *p = new Packet(PACKET_SERVER_CONFIG_UPDATE);
|
Packet *p = new Packet(PACKET_SERVER_CONFIG_UPDATE);
|
||||||
|
|
||||||
p->Send_uint8(_settings_client.network.max_companies);
|
p->Send_uint8(_settings_client.network.max_companies);
|
||||||
|
@ -803,6 +858,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendConfigUpdate()
|
||||||
|
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GAME_INFO(Packet *)
|
NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GAME_INFO(Packet *)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "client[{}] Receive_CLIENT_GAME_INFO()", this->client_id);
|
||||||
|
|
||||||
return this->SendGameInfo();
|
return this->SendGameInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -813,6 +870,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_NEWGRFS_CHECKED
|
||||||
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
|
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Debug(net, 9, "client[{}] Receive_CLIENT_NEWGRFS_CHECKED()", this->client_id);
|
||||||
|
|
||||||
NetworkClientInfo *ci = this->GetInfo();
|
NetworkClientInfo *ci = this->GetInfo();
|
||||||
|
|
||||||
/* We now want a password from the client else we do not allow them in! */
|
/* We now want a password from the client else we do not allow them in! */
|
||||||
|
@ -842,6 +901,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet *p)
|
||||||
std::string client_revision = p->Recv_string(NETWORK_REVISION_LENGTH);
|
std::string client_revision = p->Recv_string(NETWORK_REVISION_LENGTH);
|
||||||
uint32_t newgrf_version = p->Recv_uint32();
|
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 */
|
/* Check if the client has revision control enabled */
|
||||||
if (!IsNetworkCompatibleVersion(client_revision) || _openttd_newgrf_version != newgrf_version) {
|
if (!IsNetworkCompatibleVersion(client_revision) || _openttd_newgrf_version != newgrf_version) {
|
||||||
/* Different revisions!! */
|
/* Different revisions!! */
|
||||||
|
@ -892,6 +953,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_JOIN(Packet *p)
|
||||||
/* Make sure companies to which people try to join are not autocleaned */
|
/* Make sure companies to which people try to join are not autocleaned */
|
||||||
if (Company::IsValidID(playas)) _network_company_states[playas].months_empty = 0;
|
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;
|
this->status = STATUS_NEWGRFS_CHECK;
|
||||||
|
|
||||||
if (_grfconfig == nullptr) {
|
if (_grfconfig == nullptr) {
|
||||||
|
@ -908,6 +970,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GAME_PASSWORD(P
|
||||||
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
|
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);
|
std::string password = p->Recv_string(NETWORK_PASSWORD_LENGTH);
|
||||||
|
|
||||||
/* Check game password. Allow joining if we cleared the password meanwhile */
|
/* Check game password. Allow joining if we cleared the password meanwhile */
|
||||||
|
@ -932,6 +996,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWOR
|
||||||
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
|
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);
|
std::string password = p->Recv_string(NETWORK_PASSWORD_LENGTH);
|
||||||
|
|
||||||
/* Check company password. Allow joining if we cleared the password meanwhile.
|
/* Check company password. Allow joining if we cleared the password meanwhile.
|
||||||
|
@ -955,10 +1021,13 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GETMAP(Packet *
|
||||||
return this->SendError(NETWORK_ERROR_NOT_AUTHORIZED);
|
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 */
|
/* Check if someone else is receiving the map */
|
||||||
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
|
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
|
||||||
if (new_cs->status == STATUS_MAP) {
|
if (new_cs->status == STATUS_MAP) {
|
||||||
/* Tell the new client to wait */
|
/* Tell the new client to wait */
|
||||||
|
Debug(net, 9, "client[{}] status = MAP_WAIT", this->client_id);
|
||||||
this->status = STATUS_MAP_WAIT;
|
this->status = STATUS_MAP_WAIT;
|
||||||
return this->SendWait();
|
return this->SendWait();
|
||||||
}
|
}
|
||||||
|
@ -972,6 +1041,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet *
|
||||||
{
|
{
|
||||||
/* Client has the map, now start syncing */
|
/* Client has the map, now start syncing */
|
||||||
if (this->status == STATUS_DONE_MAP && !this->HasClientQuit()) {
|
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();
|
std::string client_name = this->GetClientName();
|
||||||
|
|
||||||
NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, client_name, "", this->client_id);
|
NetworkTextMessage(NETWORK_ACTION_JOIN, CC_DEFAULT, false, client_name, "", this->client_id);
|
||||||
|
@ -981,6 +1052,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet *
|
||||||
|
|
||||||
/* Mark the client as pre-active, and wait for an ACK
|
/* Mark the client as pre-active, and wait for an ACK
|
||||||
* so we know it is done loading and in sync with us */
|
* 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;
|
this->status = STATUS_PRE_ACTIVE;
|
||||||
NetworkHandleCommandQueue(this);
|
NetworkHandleCommandQueue(this);
|
||||||
this->SendFrame();
|
this->SendFrame();
|
||||||
|
@ -1027,6 +1099,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMMAND(Packet
|
||||||
return this->SendError(NETWORK_ERROR_TOO_MANY_COMMANDS);
|
return this->SendError(NETWORK_ERROR_TOO_MANY_COMMANDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Debug(net, 9, "client[{}] Receive_CLIENT_COMMAND()", this->client_id);
|
||||||
|
|
||||||
CommandPacket cp;
|
CommandPacket cp;
|
||||||
const char *err = this->ReceiveCommand(p, &cp);
|
const char *err = this->ReceiveCommand(p, &cp);
|
||||||
|
|
||||||
|
@ -1086,6 +1160,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ERROR(Packet *p
|
||||||
* to us. Display the error and report it to the other clients */
|
* to us. Display the error and report it to the other clients */
|
||||||
NetworkErrorCode errorno = (NetworkErrorCode)p->Recv_uint8();
|
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 */
|
/* The client was never joined.. thank the client for the packet, but ignore it */
|
||||||
if (this->status < STATUS_DONE_MAP || this->HasClientQuit()) {
|
if (this->status < STATUS_DONE_MAP || this->HasClientQuit()) {
|
||||||
return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT);
|
return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT);
|
||||||
|
@ -1116,6 +1192,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_QUIT(Packet *)
|
||||||
return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT);
|
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. */
|
/* The client wants to leave. Display this and report it to the other clients. */
|
||||||
std::string client_name = this->GetClientName();
|
std::string client_name = this->GetClientName();
|
||||||
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, "", STR_NETWORK_MESSAGE_CLIENT_LEAVING);
|
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, "", STR_NETWORK_MESSAGE_CLIENT_LEAVING);
|
||||||
|
@ -1140,12 +1218,15 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ACK(Packet *p)
|
||||||
|
|
||||||
uint32_t frame = p->Recv_uint32();
|
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 */
|
/* The client is trying to catch up with the server */
|
||||||
if (this->status == STATUS_PRE_ACTIVE) {
|
if (this->status == STATUS_PRE_ACTIVE) {
|
||||||
/* The client is not yet caught up? */
|
/* The client is not yet caught up? */
|
||||||
if (frame + Ticks::DAY_TICKS < _frame_counter) return NETWORK_RECV_STATUS_OKAY;
|
if (frame + Ticks::DAY_TICKS < _frame_counter) return NETWORK_RECV_STATUS_OKAY;
|
||||||
|
|
||||||
/* Now it is! Unpause the game */
|
/* Now it is! Unpause the game */
|
||||||
|
Debug(net, 9, "client[{}] status = ACTIVE", this->client_id);
|
||||||
this->status = STATUS_ACTIVE;
|
this->status = STATUS_ACTIVE;
|
||||||
this->last_token_frame = _frame_counter;
|
this->last_token_frame = _frame_counter;
|
||||||
|
|
||||||
|
@ -1324,6 +1405,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_CHAT(Packet *p)
|
||||||
DestType desttype = (DestType)p->Recv_uint8();
|
DestType desttype = (DestType)p->Recv_uint8();
|
||||||
int dest = p->Recv_uint32();
|
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);
|
std::string msg = p->Recv_string(NETWORK_CHAT_LENGTH);
|
||||||
int64_t data = p->Recv_uint64();
|
int64_t data = p->Recv_uint64();
|
||||||
|
|
||||||
|
@ -1348,6 +1431,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_SET_PASSWORD(Pa
|
||||||
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
|
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);
|
std::string password = p->Recv_string(NETWORK_PASSWORD_LENGTH);
|
||||||
const NetworkClientInfo *ci = this->GetInfo();
|
const NetworkClientInfo *ci = this->GetInfo();
|
||||||
|
|
||||||
|
@ -1362,6 +1447,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_SET_NAME(Packet
|
||||||
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
|
return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Debug(net, 9, "client[{}] Receive_CLIENT_SET_NAME()", this->client_id);
|
||||||
|
|
||||||
NetworkClientInfo *ci;
|
NetworkClientInfo *ci;
|
||||||
|
|
||||||
std::string client_name = p->Recv_string(NETWORK_CLIENT_NAME_LENGTH);
|
std::string client_name = p->Recv_string(NETWORK_CLIENT_NAME_LENGTH);
|
||||||
|
@ -1393,6 +1480,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_RCON(Packet *p)
|
||||||
|
|
||||||
if (_settings_client.network.rcon_password.empty()) return NETWORK_RECV_STATUS_OKAY;
|
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 password = p->Recv_string(NETWORK_PASSWORD_LENGTH);
|
||||||
std::string command = p->Recv_string(NETWORK_RCONCOMMAND_LENGTH);
|
std::string command = p->Recv_string(NETWORK_RCONCOMMAND_LENGTH);
|
||||||
|
|
||||||
|
@ -1415,6 +1504,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MOVE(Packet *p)
|
||||||
|
|
||||||
CompanyID company_id = (Owner)p->Recv_uint8();
|
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 */
|
/* 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;
|
if (company_id != COMPANY_SPECTATOR && !Company::IsValidHumanID(company_id)) return NETWORK_RECV_STATUS_OKAY;
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,8 @@ public:
|
||||||
|
|
||||||
void OnFailure() override
|
void OnFailure() override
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Stun::OnFailure(): family={}", this->family);
|
||||||
|
|
||||||
this->stun_handler->connecter = nullptr;
|
this->stun_handler->connecter = nullptr;
|
||||||
|
|
||||||
/* Connection to STUN server failed. For example, the client doesn't
|
/* Connection to STUN server failed. For example, the client doesn't
|
||||||
|
@ -48,6 +50,8 @@ public:
|
||||||
|
|
||||||
void OnConnect(SOCKET s) override
|
void OnConnect(SOCKET s) override
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Stun::OnConnect(): family={}", this->family);
|
||||||
|
|
||||||
this->stun_handler->connecter = nullptr;
|
this->stun_handler->connecter = nullptr;
|
||||||
|
|
||||||
assert(this->stun_handler->sock == INVALID_SOCKET);
|
assert(this->stun_handler->sock == INVALID_SOCKET);
|
||||||
|
@ -71,6 +75,8 @@ void ClientNetworkStunSocketHandler::Connect(const std::string &token, uint8_t f
|
||||||
this->token = token;
|
this->token = token;
|
||||||
this->family = family;
|
this->family = family;
|
||||||
|
|
||||||
|
Debug(net, 9, "Stun::Connect(): family={}", this->family);
|
||||||
|
|
||||||
this->connecter = TCPConnecter::Create<NetworkStunConnecter>(this, NetworkStunConnectionString(), token, family);
|
this->connecter = TCPConnecter::Create<NetworkStunConnecter>(this, NetworkStunConnectionString(), token, family);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,8 @@ public:
|
||||||
|
|
||||||
void OnFailure() override
|
void OnFailure() override
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Turn::OnFailure()");
|
||||||
|
|
||||||
this->handler->connecter = nullptr;
|
this->handler->connecter = nullptr;
|
||||||
|
|
||||||
this->handler->ConnectFailure();
|
this->handler->ConnectFailure();
|
||||||
|
@ -39,6 +41,8 @@ public:
|
||||||
|
|
||||||
void OnConnect(SOCKET s) override
|
void OnConnect(SOCKET s) override
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Turn::OnConnect()");
|
||||||
|
|
||||||
this->handler->connecter = nullptr;
|
this->handler->connecter = nullptr;
|
||||||
|
|
||||||
this->handler->sock = s;
|
this->handler->sock = s;
|
||||||
|
@ -47,6 +51,8 @@ public:
|
||||||
|
|
||||||
bool ClientNetworkTurnSocketHandler::Receive_TURN_ERROR(Packet *)
|
bool ClientNetworkTurnSocketHandler::Receive_TURN_ERROR(Packet *)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Receive_TURN_ERROR()");
|
||||||
|
|
||||||
this->ConnectFailure();
|
this->ConnectFailure();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -54,6 +60,8 @@ bool ClientNetworkTurnSocketHandler::Receive_TURN_ERROR(Packet *)
|
||||||
|
|
||||||
bool ClientNetworkTurnSocketHandler::Receive_TURN_CONNECTED(Packet *p)
|
bool ClientNetworkTurnSocketHandler::Receive_TURN_CONNECTED(Packet *p)
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Receive_TURN_CONNECTED()");
|
||||||
|
|
||||||
std::string hostname = p->Recv_string(NETWORK_HOSTNAME_LENGTH);
|
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
|
/* Act like we no longer have a socket, as we are handing it over to the
|
||||||
|
@ -72,6 +80,8 @@ bool ClientNetworkTurnSocketHandler::Receive_TURN_CONNECTED(Packet *p)
|
||||||
*/
|
*/
|
||||||
void ClientNetworkTurnSocketHandler::Connect()
|
void ClientNetworkTurnSocketHandler::Connect()
|
||||||
{
|
{
|
||||||
|
Debug(net, 9, "Turn::Connect()");
|
||||||
|
|
||||||
this->connect_started = true;
|
this->connect_started = true;
|
||||||
this->connecter = TCPConnecter::Create<NetworkTurnConnecter>(this, this->connection_string);
|
this->connecter = TCPConnecter::Create<NetworkTurnConnecter>(this, this->connection_string);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
*
|
*
|
||||||
* API removals:
|
* API removals:
|
||||||
* \li AIError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore.
|
* \li AIError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore.
|
||||||
|
* \li AIInfo::CONFIG_RANDOM, no longer used.
|
||||||
*
|
*
|
||||||
* Other changes:
|
* Other changes:
|
||||||
* \li AIGroupList accepts an optional filter function
|
* \li AIGroupList accepts an optional filter function
|
||||||
|
|
|
@ -90,6 +90,7 @@
|
||||||
*
|
*
|
||||||
* API removals:
|
* API removals:
|
||||||
* \li GSError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore.
|
* \li GSError::ERR_PRECONDITION_TOO_MANY_PARAMETERS, that error is never returned anymore.
|
||||||
|
* \li AIInfo::CONFIG_RANDOM, no longer used.
|
||||||
*
|
*
|
||||||
* Other changes:
|
* Other changes:
|
||||||
* \li GSGroupList accepts an optional filter function
|
* \li GSGroupList accepts an optional filter function
|
||||||
|
|
|
@ -203,7 +203,6 @@ public:
|
||||||
/** Miscellaneous flags for Script settings. */
|
/** Miscellaneous flags for Script settings. */
|
||||||
enum ScriptConfigFlags {
|
enum ScriptConfigFlags {
|
||||||
CONFIG_NONE, ///< Normal setting.
|
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_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_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.
|
CONFIG_DEVELOPER, ///< This setting will only be visible when the Script development tools are active.
|
||||||
|
|
|
@ -34,14 +34,6 @@ void ScriptConfig::Change(std::optional<const std::string> name, int version, bo
|
||||||
this->ClearConfigList();
|
this->ClearConfigList();
|
||||||
|
|
||||||
if (_game_mode == GM_NORMAL && this->info != nullptr) {
|
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();
|
this->AddRandomDeviation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ static const int INT32_DIGITS_WITH_SIGN_AND_TERMINATION = 10 + 1 + 1;
|
||||||
/** Bitmask of flags for Script settings. */
|
/** Bitmask of flags for Script settings. */
|
||||||
enum ScriptConfigFlags {
|
enum ScriptConfigFlags {
|
||||||
SCRIPTCONFIG_NONE = 0x0, ///< No flags set.
|
SCRIPTCONFIG_NONE = 0x0, ///< No flags set.
|
||||||
SCRIPTCONFIG_RANDOM = 0x1, ///< When randomizing the Script, pick any value between min_value and max_value when on custom difficulty setting.
|
// Unused flag 0x1.
|
||||||
SCRIPTCONFIG_BOOLEAN = 0x2, ///< This value is a boolean (either 0 (false) or 1 (true) ).
|
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_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.
|
SCRIPTCONFIG_DEVELOPER = 0x8, ///< This setting will only be visible when the Script development tools are active.
|
||||||
|
|
|
@ -162,12 +162,6 @@ SQInteger ScriptInfo::AddSetting(HSQUIRRELVM vm)
|
||||||
}
|
}
|
||||||
sq_pop(vm, 1);
|
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. */
|
/* Reset the bit for random_deviation as it's optional. */
|
||||||
items &= ~0x200;
|
items &= ~0x200;
|
||||||
|
|
||||||
|
|
|
@ -3435,7 +3435,7 @@ TownActions GetMaskOfTownActions(CompanyID cid, const Town *t)
|
||||||
if (cid != COMPANY_SPECTATOR && !(_settings_game.economy.bribe && t->unwanted[cid])) {
|
if (cid != COMPANY_SPECTATOR && !(_settings_game.economy.bribe && t->unwanted[cid])) {
|
||||||
|
|
||||||
/* Actions worth more than this are not able to be performed */
|
/* Actions worth more than this are not able to be performed */
|
||||||
Money avail = Company::Get(cid)->money;
|
Money avail = GetAvailableMoney(cid);
|
||||||
|
|
||||||
/* Check the action bits for validity and
|
/* Check the action bits for validity and
|
||||||
* if they are valid add them */
|
* if they are valid add them */
|
||||||
|
|
|
@ -245,7 +245,7 @@ public:
|
||||||
case WID_TA_ACTION_INFO:
|
case WID_TA_ACTION_INFO:
|
||||||
if (this->sel_index != -1) {
|
if (this->sel_index != -1) {
|
||||||
Money action_cost = _price[PR_TOWN_ACTION] * _town_action_costs[this->sel_index] >> 8;
|
Money action_cost = _price[PR_TOWN_ACTION] * _town_action_costs[this->sel_index] >> 8;
|
||||||
bool affordable = Company::IsValidID(_local_company) && action_cost < Company::Get(_local_company)->money;
|
bool affordable = Company::IsValidID(_local_company) && action_cost < GetAvailableMoney(_local_company);
|
||||||
|
|
||||||
SetDParam(0, action_cost);
|
SetDParam(0, action_cost);
|
||||||
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect),
|
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect),
|
||||||
|
|
Loading…
Reference in New Issue