Merge branch 'master' into jgrpp
# Conflicts: # regression/regression/result.txt # src/aircraft_cmd.cpp # src/airport_gui.cpp # src/articulated_vehicles.cpp # src/console_cmds.cpp # src/date_gui.cpp # src/engine.cpp # src/genworld_gui.cpp # src/gfx_layout_fallback.cpp # src/group_gui.cpp # src/hotkeys.cpp # src/network/core/tcp_connect.cpp # src/network/core/tcp_listen.h # src/newgrf.cpp # src/newgrf.h # src/newgrf_engine.cpp # src/newgrf_gui.cpp # src/newgrf_station.cpp # src/openttd.cpp # src/order_gui.cpp # src/os/macosx/osx_main.cpp # src/pathfinder/yapf/yapf_node_rail.hpp # src/rail_gui.cpp # src/saveload/afterload.cpp # src/saveload/cargopacket_sl.cpp # src/saveload/linkgraph_sl.cpp # src/saveload/station_sl.cpp # src/script/api/script_industrytype.cpp # src/settings.cpp # src/settings_gui.cpp # src/settings_table.cpp # src/settingsgen/settingsgen.cpp # src/station.cpp # src/station_cmd.cpp # src/strings.cpp # src/timer/timer_game_calendar.cpp # src/timer/timer_game_calendar.h # src/timer/timer_manager.h # src/timer/timer_window.cpp # src/timetable_cmd.cpp # src/toolbar_gui.cpp # src/town_cmd.cpp # src/town_gui.cpp # src/train_gui.cpp # src/vehicle_cmd.h # src/vehicle_gui.cpp # src/viewport.cpp # src/widgets/dropdown.cpp # src/window_func.h # src/window_gui.h
This commit is contained in:
@@ -1388,7 +1388,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 75
|
||||
GetMaxSpeed(): 64
|
||||
GetPrice(): 8203
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 820
|
||||
GetPower(): 300
|
||||
GetWeight(): 47
|
||||
@@ -1532,7 +1532,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 80
|
||||
GetMaxSpeed(): 112
|
||||
GetPrice(): 15234
|
||||
GetMaxAge(): 7671
|
||||
GetMaxAge(): 7686
|
||||
GetRunningCost(): 1968
|
||||
GetPower(): 1000
|
||||
GetWeight(): 131
|
||||
@@ -1550,7 +1550,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 84
|
||||
GetMaxSpeed(): 128
|
||||
GetPrice(): 22265
|
||||
GetMaxAge(): 7305
|
||||
GetMaxAge(): 7320
|
||||
GetRunningCost(): 2296
|
||||
GetPower(): 1200
|
||||
GetWeight(): 162
|
||||
@@ -3476,7 +3476,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 78
|
||||
GetMaxSpeed(): 56
|
||||
GetPrice(): 4921
|
||||
GetMaxAge(): 4383
|
||||
GetMaxAge(): 4392
|
||||
GetRunningCost(): 426
|
||||
GetPower(): 90
|
||||
GetWeight(): 10
|
||||
@@ -3602,7 +3602,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 77
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 4429
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -3656,7 +3656,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 92
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 4716
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -3764,7 +3764,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 98
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 4511
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -3818,7 +3818,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 97
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 4306
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -3872,7 +3872,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 87
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 4388
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -3926,7 +3926,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 97
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 4675
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -3980,7 +3980,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 98
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 4839
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -4034,7 +4034,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 97
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 4962
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -4088,7 +4088,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 82
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 4593
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -4142,7 +4142,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 76
|
||||
GetMaxSpeed(): 48
|
||||
GetPrice(): 5947
|
||||
GetMaxAge(): 5479
|
||||
GetMaxAge(): 5490
|
||||
GetRunningCost(): 421
|
||||
GetPower(): 120
|
||||
GetWeight(): 9
|
||||
@@ -5060,7 +5060,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 99
|
||||
GetMaxSpeed(): 24
|
||||
GetPrice(): 30468
|
||||
GetMaxAge(): 10958
|
||||
GetMaxAge(): 10980
|
||||
GetRunningCost(): 2296
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
@@ -5096,7 +5096,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 88
|
||||
GetMaxSpeed(): 32
|
||||
GetPrice(): 18281
|
||||
GetMaxAge(): 10958
|
||||
GetMaxAge(): 10980
|
||||
GetRunningCost(): 1476
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
@@ -5186,7 +5186,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 81
|
||||
GetMaxSpeed(): 24
|
||||
GetPrice(): 24375
|
||||
GetMaxAge(): 10958
|
||||
GetMaxAge(): 10980
|
||||
GetRunningCost(): 2460
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
@@ -5258,7 +5258,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 58
|
||||
GetMaxSpeed(): 236
|
||||
GetPrice(): 28710
|
||||
GetMaxAge(): 7305
|
||||
GetMaxAge(): 7320
|
||||
GetRunningCost(): 2390
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
@@ -5276,7 +5276,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 95
|
||||
GetMaxSpeed(): 236
|
||||
GetPrice(): 30761
|
||||
GetMaxAge(): 8766
|
||||
GetMaxAge(): 8784
|
||||
GetRunningCost(): 2812
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
@@ -5330,7 +5330,7 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetReliability(): 77
|
||||
GetMaxSpeed(): 236
|
||||
GetPrice(): 30761
|
||||
GetMaxAge(): 10958
|
||||
GetMaxAge(): 10980
|
||||
GetRunningCost(): 2756
|
||||
GetPower(): -1
|
||||
GetWeight(): -1
|
||||
@@ -9321,8 +9321,8 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
GetEngineType(): 153
|
||||
GetUnitNumber(): 1
|
||||
GetAge(): 1
|
||||
GetMaxAge(): 5479
|
||||
GetAgeLeft(): 5478
|
||||
GetMaxAge(): 5490
|
||||
GetAgeLeft(): 5489
|
||||
GetCurrentSpeed(): 7
|
||||
GetRunningCost(): 421
|
||||
GetProfitThisYear(): -1
|
||||
@@ -9414,17 +9414,17 @@ ERROR: IsEnd() is invalid as Begin() is never called
|
||||
17 => 0
|
||||
16 => 0
|
||||
MaxAge ListDump:
|
||||
16 => 10958
|
||||
14 => 10958
|
||||
17 => 7305
|
||||
13 => 5479
|
||||
12 => 5479
|
||||
16 => 10980
|
||||
14 => 10980
|
||||
17 => 7320
|
||||
13 => 5490
|
||||
12 => 5490
|
||||
AgeLeft ListDump:
|
||||
16 => 10958
|
||||
14 => 10957
|
||||
17 => 7305
|
||||
13 => 5478
|
||||
12 => 5478
|
||||
16 => 10980
|
||||
14 => 10979
|
||||
17 => 7320
|
||||
13 => 5489
|
||||
12 => 5489
|
||||
CurrentSpeed ListDump:
|
||||
12 => 27
|
||||
17 => 0
|
||||
|
2
src/3rdparty/catch2/catch.hpp
vendored
2
src/3rdparty/catch2/catch.hpp
vendored
@@ -5922,7 +5922,7 @@ namespace Catch {
|
||||
}
|
||||
void testCaseEnded(TestCaseStats const& testCaseStats) override {
|
||||
auto node = std::make_shared<TestCaseNode>(testCaseStats);
|
||||
assert(m_sectionStack.size() == 0);
|
||||
assert(m_sectionStack.empty());
|
||||
node->children.push_back(m_rootSection);
|
||||
m_testCases.push_back(node);
|
||||
m_rootSection.reset();
|
||||
|
2
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
2
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
@@ -762,7 +762,7 @@ static SQInteger closure_getinfos(HSQUIRRELVM v) {
|
||||
res->NewSlot(SQString::Create(_ss(v),"name",-1),nc->_name);
|
||||
res->NewSlot(SQString::Create(_ss(v),"paramscheck",-1),nc->_nparamscheck);
|
||||
SQObjectPtr typecheck;
|
||||
if(nc->_typecheck.size() > 0) {
|
||||
if(!nc->_typecheck.empty()) {
|
||||
typecheck =
|
||||
SQArray::Create(_ss(v), nc->_typecheck.size());
|
||||
for(SQUnsignedInteger n = 0; n<nc->_typecheck.size(); n++) {
|
||||
|
@@ -563,7 +563,7 @@ void SQFuncState::PopChildState()
|
||||
|
||||
SQFuncState::~SQFuncState()
|
||||
{
|
||||
while(_childstates.size() > 0)
|
||||
while(!_childstates.empty())
|
||||
{
|
||||
PopChildState();
|
||||
}
|
||||
|
@@ -98,7 +98,7 @@ struct AIConfigWindow : public Window {
|
||||
this->OnInvalidateData(0);
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
CloseWindowByClass(WC_SCRIPT_LIST);
|
||||
CloseWindowByClass(WC_SCRIPT_SETTINGS);
|
||||
@@ -279,7 +279,7 @@ struct AIConfigWindow : public Window {
|
||||
this->SetWidgetDisabledState(WID_AIC_DECREASE_INTERVAL, GetGameSettings().difficulty.competitors_interval == MIN_COMPETITORS_INTERVAL);
|
||||
this->SetWidgetDisabledState(WID_AIC_INCREASE_INTERVAL, GetGameSettings().difficulty.competitors_interval == MAX_COMPETITORS_INTERVAL);
|
||||
this->SetWidgetDisabledState(WID_AIC_CHANGE, this->selected_slot == INVALID_COMPANY);
|
||||
this->SetWidgetDisabledState(WID_AIC_CONFIGURE, this->selected_slot == INVALID_COMPANY || AIConfig::GetConfig(this->selected_slot)->GetConfigList()->size() == 0);
|
||||
this->SetWidgetDisabledState(WID_AIC_CONFIGURE, this->selected_slot == INVALID_COMPANY || AIConfig::GetConfig(this->selected_slot)->GetConfigList()->empty());
|
||||
this->SetWidgetDisabledState(WID_AIC_MOVE_UP, this->selected_slot == INVALID_COMPANY || !IsEditable((CompanyID)(this->selected_slot - 1)));
|
||||
this->SetWidgetDisabledState(WID_AIC_MOVE_DOWN, this->selected_slot == INVALID_COMPANY || !IsEditable((CompanyID)(this->selected_slot + 1)));
|
||||
|
||||
|
@@ -95,7 +95,7 @@ AIInfo *AIScannerInfo::SelectRandomAI() const
|
||||
|
||||
AIInfo *AIScannerInfo::FindInfo(const std::string &name, int version, bool force_exact_match)
|
||||
{
|
||||
if (this->info_list.size() == 0) return nullptr;
|
||||
if (this->info_list.empty()) return nullptr;
|
||||
if (name.empty()) return nullptr;
|
||||
|
||||
if (version == -1) {
|
||||
|
@@ -1474,9 +1474,9 @@ static void MaybeCrashAirplane(Aircraft *v)
|
||||
if (GB(Random(), 0, 22) > prob) return;
|
||||
|
||||
/* Crash the airplane. Remove all goods stored at the station. */
|
||||
for (CargoID i = 0; i < NUM_CARGO; i++) {
|
||||
st->goods[i].rating = 1;
|
||||
if (st->goods[i].data != nullptr) st->goods[i].data->cargo.Truncate();
|
||||
for (GoodsEntry &ge : st->goods) {
|
||||
ge.rating = 1;
|
||||
if (ge.data != nullptr) ge.data->cargo.Truncate();
|
||||
}
|
||||
|
||||
CrashAirplane(v);
|
||||
|
@@ -78,7 +78,7 @@ struct BuildAirToolbarWindow : Window {
|
||||
this->last_user_action = INVALID_WID_AT;
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
if (this->IsWidgetLowered(WID_AT_AIRPORT)) SetViewportCatchmentStation(nullptr, true);
|
||||
if (_settings_client.gui.link_terraform_toolbar) CloseWindowById(WC_SCEN_LAND_GEN, 0, false);
|
||||
@@ -233,7 +233,7 @@ class BuildAirportWindow : public PickerWindowBase {
|
||||
DropDownList list;
|
||||
|
||||
for (uint i = 0; AirportClass::IsClassIDValid((AirportClassID)i); i++) {
|
||||
list.emplace_back(new DropDownListStringItem(AirportClass::Get((AirportClassID)i)->name, i, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(AirportClass::Get((AirportClassID)i)->name, i, false));
|
||||
}
|
||||
|
||||
return list;
|
||||
@@ -277,7 +277,7 @@ public:
|
||||
if (selectFirstAirport) this->SelectFirstAvailableAirport(true);
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
this->PickerWindowBase::Close();
|
||||
|
@@ -393,7 +393,7 @@ void CheckConsistencyOfArticulatedVehicle(const Vehicle *v)
|
||||
|
||||
CargoTypes real_refit_union = 0;
|
||||
CargoTypes real_refit_intersection = ALL_CARGOTYPES;
|
||||
CargoArray real_default_capacity{};
|
||||
CargoTypes real_default_cargoes = 0;
|
||||
|
||||
do {
|
||||
CargoTypes refit_mask = GetAvailableVehicleCargoTypes(v->engine_type, true);
|
||||
@@ -401,17 +401,15 @@ void CheckConsistencyOfArticulatedVehicle(const Vehicle *v)
|
||||
if (refit_mask != 0) real_refit_intersection &= refit_mask;
|
||||
|
||||
assert(v->cargo_type < NUM_CARGO || (v->type == VEH_TRAIN && Train::From(v)->IsVirtual()));
|
||||
if (v->cargo_type < NUM_CARGO) {
|
||||
real_default_capacity[v->cargo_type] += v->cargo_cap;
|
||||
}
|
||||
if (v->cargo_cap > 0) SetBit(real_default_cargoes, v->cargo_type);
|
||||
|
||||
v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : nullptr;
|
||||
} while (v != nullptr);
|
||||
|
||||
/* Check whether the vehicle carries more cargoes than expected */
|
||||
bool carries_more = false;
|
||||
for (CargoID cid = 0; cid < NUM_CARGO; cid++) {
|
||||
if (real_default_capacity[cid] != 0 && purchase_default_capacity[cid] == 0) {
|
||||
for (CargoID cid : SetCargoBitIterator(real_default_cargoes)) {
|
||||
if (purchase_default_capacity[cid] == 0) {
|
||||
carries_more = true;
|
||||
break;
|
||||
}
|
||||
|
@@ -173,11 +173,15 @@ class ReplaceVehicleWindow : public Window {
|
||||
if (!CheckAutoreplaceValidity(this->sel_engine[0], eid, _local_company)) continue;
|
||||
}
|
||||
|
||||
EngineDisplayFlags flags = (side == 0) ? EngineDisplayFlags::None : e->display_flags;
|
||||
if (side == 1 && eid == this->sel_engine[0]) flags |= EngineDisplayFlags::Shaded;
|
||||
list.emplace_back(eid, e->info.variant_id, flags, 0);
|
||||
list.emplace_back(eid, e->info.variant_id, (side == 0) ? EngineDisplayFlags::None : e->display_flags, 0);
|
||||
|
||||
if (side == 1 && e->info.variant_id != INVALID_ENGINE) variants.push_back(e->info.variant_id);
|
||||
if (side == 1) {
|
||||
EngineID parent = e->info.variant_id;
|
||||
while (parent != INVALID_ENGINE) {
|
||||
variants.push_back(parent);
|
||||
parent = Engine::Get(parent)->info.variant_id;
|
||||
}
|
||||
}
|
||||
if (eid == this->sel_engine[side]) selected_engine = eid; // The selected engine is still in the list
|
||||
}
|
||||
|
||||
@@ -216,7 +220,7 @@ class ReplaceVehicleWindow : public Window {
|
||||
/* We need to rebuild the left engines list */
|
||||
this->GenerateReplaceVehList(true);
|
||||
this->vscroll[0]->SetCount(this->engines[0].size());
|
||||
if (this->reset_sel_engine && this->sel_engine[0] == INVALID_ENGINE && this->engines[0].size() != 0) {
|
||||
if (this->reset_sel_engine && this->sel_engine[0] == INVALID_ENGINE && !this->engines[0].empty()) {
|
||||
this->sel_engine[0] = this->engines[0][0].engine_id;
|
||||
}
|
||||
}
|
||||
@@ -564,8 +568,8 @@ public:
|
||||
|
||||
case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: {
|
||||
DropDownList list;
|
||||
list.emplace_back(new DropDownListStringItem(STR_REPLACE_ENGINES, 1, false));
|
||||
list.emplace_back(new DropDownListStringItem(STR_REPLACE_WAGONS, 0, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_REPLACE_ENGINES, 1, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_REPLACE_WAGONS, 0, false));
|
||||
ShowDropDownList(this, std::move(list), this->replace_engines ? 1 : 0, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN);
|
||||
break;
|
||||
}
|
||||
|
@@ -95,7 +95,7 @@ struct BaseSet {
|
||||
return Tnum_files - this->valid_files;
|
||||
}
|
||||
|
||||
bool FillSetDetails(IniFile *ini, const std::string &path, const std::string &full_filename, bool allow_empty_filename = true);
|
||||
bool FillSetDetails(const IniFile &ini, const std::string &path, const std::string &full_filename, bool allow_empty_filename = true);
|
||||
|
||||
/**
|
||||
* Get the description for the given ISO code.
|
||||
@@ -244,7 +244,7 @@ struct GraphicsSet : BaseSet<GraphicsSet, MAX_GFT, true> {
|
||||
PaletteType palette; ///< Palette of this graphics set
|
||||
BlitterType blitter; ///< Blitter of this graphics set
|
||||
|
||||
bool FillSetDetails(struct IniFile *ini, const std::string &path, const std::string &full_filename);
|
||||
bool FillSetDetails(const IniFile &ini, const std::string &path, const std::string &full_filename);
|
||||
|
||||
static MD5File::ChecksumResult CheckMD5(const MD5File *file, Subdirectory subdir);
|
||||
};
|
||||
@@ -301,7 +301,7 @@ struct MusicSet : BaseSet<MusicSet, NUM_SONGS_AVAILABLE, false> {
|
||||
/** Number of valid songs in set. */
|
||||
byte num_available;
|
||||
|
||||
bool FillSetDetails(struct IniFile *ini, const std::string &path, const std::string &full_filename);
|
||||
bool FillSetDetails(const IniFile &ini, const std::string &path, const std::string &full_filename);
|
||||
};
|
||||
|
||||
/** All data/functions related with replacing the base music */
|
||||
|
@@ -38,10 +38,15 @@ extern void CheckExternalFiles();
|
||||
* @return true if loading was successful.
|
||||
*/
|
||||
template <class T, size_t Tnum_files, bool Tsearch_in_tars>
|
||||
bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const std::string &path, const std::string &full_filename, bool allow_empty_filename)
|
||||
bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(const IniFile &ini, const std::string &path, const std::string &full_filename, bool allow_empty_filename)
|
||||
{
|
||||
IniGroup *metadata = ini->GetGroup("metadata");
|
||||
IniItem *item;
|
||||
const IniGroup *metadata = ini.GetGroup("metadata");
|
||||
if (metadata == nullptr) {
|
||||
DEBUG(grf, 0, "Base " SET_TYPE "set detail loading: metadata missing.");
|
||||
DEBUG(grf, 0, " Is %s readable for the user running OpenTTD?", full_filename.c_str());
|
||||
return false;
|
||||
}
|
||||
const IniItem *item;
|
||||
|
||||
fetch_metadata("name");
|
||||
this->name = *item->value;
|
||||
@@ -50,10 +55,10 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
||||
this->description[std::string{}] = *item->value;
|
||||
|
||||
/* Add the translations of the descriptions too. */
|
||||
for (item = metadata->item; item != nullptr; item = item->next) {
|
||||
if (item->name.compare(0, 12, "description.") != 0) continue;
|
||||
for (const IniItem &titem : metadata->items) {
|
||||
if (titem.name.compare(0, 12, "description.") != 0) continue;
|
||||
|
||||
this->description[item->name.substr(12)] = item->value.value_or("");
|
||||
this->description[titem.name.substr(12)] = titem.value.value_or("");
|
||||
}
|
||||
|
||||
fetch_metadata("shortname");
|
||||
@@ -68,13 +73,13 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
||||
this->fallback = (item != nullptr && item->value && *item->value != "0" && *item->value != "false");
|
||||
|
||||
/* For each of the file types we want to find the file, MD5 checksums and warning messages. */
|
||||
IniGroup *files = ini->GetGroup("files");
|
||||
IniGroup *md5s = ini->GetGroup("md5s");
|
||||
IniGroup *origin = ini->GetGroup("origin");
|
||||
const IniGroup *files = ini.GetGroup("files");
|
||||
const IniGroup *md5s = ini.GetGroup("md5s");
|
||||
const IniGroup *origin = ini.GetGroup("origin");
|
||||
for (uint i = 0; i < Tnum_files; i++) {
|
||||
MD5File *file = &this->files[i];
|
||||
/* Find the filename first. */
|
||||
item = files->GetItem(BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i]);
|
||||
item = files != nullptr ? files->GetItem(BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i]) : nullptr;
|
||||
if (item == nullptr || (!item->value.has_value() && !allow_empty_filename)) {
|
||||
DEBUG(grf, 0, "No " SET_TYPE " file for: %s (in %s)", BaseSet<T, Tnum_files, Tsearch_in_tars>::file_names[i], full_filename.c_str());
|
||||
return false;
|
||||
@@ -92,7 +97,7 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
||||
file->filename = path + filename;
|
||||
|
||||
/* Then find the MD5 checksum */
|
||||
item = md5s->GetItem(filename);
|
||||
item = md5s != nullptr ? md5s->GetItem(filename) : nullptr;
|
||||
if (item == nullptr || !item->value.has_value()) {
|
||||
DEBUG(grf, 0, "No MD5 checksum specified for: %s (in %s)", filename.c_str(), full_filename.c_str());
|
||||
return false;
|
||||
@@ -118,8 +123,8 @@ bool BaseSet<T, Tnum_files, Tsearch_in_tars>::FillSetDetails(IniFile *ini, const
|
||||
}
|
||||
|
||||
/* Then find the warning message when the file's missing */
|
||||
item = origin->GetItem(filename);
|
||||
if (item == nullptr) item = origin->GetItem("default");
|
||||
item = origin != nullptr ? origin->GetItem(filename) : nullptr;
|
||||
if (item == nullptr) item = origin != nullptr ? origin->GetItem("default") : nullptr;
|
||||
if (item == nullptr || !item->value.has_value()) {
|
||||
DEBUG(grf, 1, "No origin warning message specified for: %s", filename.c_str());
|
||||
file->missing_warning.clear();
|
||||
@@ -158,9 +163,9 @@ bool BaseMedia<Tbase_set>::AddFile(const std::string &filename, size_t basepath_
|
||||
DEBUG(grf, 1, "Checking %s for base " SET_TYPE " set", filename.c_str());
|
||||
|
||||
Tbase_set *set = new Tbase_set();
|
||||
IniFile *ini = new IniFile();
|
||||
IniFile ini{};
|
||||
std::string path{ filename, basepath_length };
|
||||
ini->LoadFromDisk(path, BASESET_DIR);
|
||||
ini.LoadFromDisk(path, BASESET_DIR);
|
||||
|
||||
auto psep = path.rfind(PATHSEPCHAR);
|
||||
if (psep != std::string::npos) {
|
||||
@@ -217,7 +222,6 @@ bool BaseMedia<Tbase_set>::AddFile(const std::string &filename, size_t basepath_
|
||||
delete set;
|
||||
}
|
||||
|
||||
delete ini;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@@ -121,7 +121,7 @@ public:
|
||||
#else
|
||||
const char *default_blitter = "8bpp-optimized";
|
||||
#endif
|
||||
if (GetBlitters().size() == 0) return nullptr;
|
||||
if (GetBlitters().empty()) return nullptr;
|
||||
const char *bname = name.empty() ? default_blitter : name.c_str();
|
||||
|
||||
for (auto &it : GetBlitters()) {
|
||||
|
@@ -91,7 +91,7 @@ public:
|
||||
this->InitNested(1);
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
_exit_game = true;
|
||||
this->Window::Close();
|
||||
@@ -149,7 +149,7 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
/* If we are not set to exit the game, it means the bootstrap failed. */
|
||||
if (!_exit_game) {
|
||||
@@ -207,7 +207,7 @@ public:
|
||||
}
|
||||
|
||||
/** Stop listening to the content client events. */
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
_network_content_client.RemoveCallback(this);
|
||||
this->Window::Close();
|
||||
|
@@ -183,7 +183,7 @@ public:
|
||||
this->vscroll->SetCount(this->bridges.size());
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close(int data = 0) override
|
||||
{
|
||||
this->last_sorting = this->bridges.GetListing();
|
||||
this->Window::Close();
|
||||
|
@@ -780,11 +780,12 @@ static uint GetCargoWeight(const CargoArray &cap, VehicleType vtype)
|
||||
|
||||
static int DrawCargoCapacityInfo(int left, int right, int y, TestedEngineDetails &te, bool refittable)
|
||||
{
|
||||
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
||||
if (te.all_capacities[c] == 0) continue;
|
||||
for (const CargoSpec *cs : _sorted_cargo_specs) {
|
||||
CargoID cid = cs->Index();
|
||||
if (te.all_capacities[cid] == 0) continue;
|
||||
|
||||
SetDParam(0, c);
|
||||
SetDParam(1, te.all_capacities[c]);
|
||||
SetDParam(0, cid);
|
||||
SetDParam(1, te.all_capacities[cid]);
|
||||
SetDParam(2, refittable ? STR_PURCHASE_INFO_REFITTABLE : STR_EMPTY);
|
||||
DrawString(left, right, y, STR_PURCHASE_INFO_CAPACITY);
|
||||
y += FONT_HEIGHT_NORMAL;
|
||||
@@ -1694,7 +1695,14 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
|
||||
list.emplace_back(eid, e->info.variant_id, e->display_flags, 0);
|
||||
|
||||
if (rvi->railveh_type != RAILVEH_WAGON) num_engines++;
|
||||
if (e->info.variant_id != eid && e->info.variant_id != INVALID_ENGINE) variants.push_back(e->info.variant_id);
|
||||
|
||||
/* Add all parent variants of this engine to the variant list */
|
||||
EngineID parent = e->info.variant_id;
|
||||
while (parent != INVALID_ENGINE) {
|
||||
variants.push_back(parent);
|
||||
parent = Engine::Get(parent)->info.variant_id;
|
||||
}
|
||||
|
||||
if (eid == this->sel_engine) sel_id = eid;
|
||||
}
|
||||
|
||||
@@ -1835,8 +1843,13 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
|
||||
/* ensure primary engine of variant group is in list after filtering */
|
||||
std::vector<EngineID> variants;
|
||||
for (const auto &item : this->eng_list) {
|
||||
if (item.engine_id != item.variant_id && item.variant_id != INVALID_ENGINE) variants.push_back(item.variant_id);
|
||||
EngineID parent = item.variant_id;
|
||||
while (parent != INVALID_ENGINE) {
|
||||
variants.push_back(parent);
|
||||
parent = Engine::Get(parent)->info.variant_id;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &variant : variants) {
|
||||
if (std::find(this->eng_list.begin(), this->eng_list.end(), variant) == this->eng_list.end()) {
|
||||
const Engine *e = Engine::Get(variant);
|
||||
@@ -1933,13 +1946,14 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
|
||||
if (cargo == CF_ANY || cargo == CF_ENGINES || cargo == CF_NONE) cargo = CT_INVALID;
|
||||
DoCommandP(this->window_number, sel_eng | (cargo << 24), 0, cmd, callback);
|
||||
|
||||
/* Update last used variant and refresh if necessary. */
|
||||
/* Update last used variant in hierarchy and refresh if necessary. */
|
||||
bool refresh = false;
|
||||
int recursion = 10; /* In case of infinite loop */
|
||||
for (Engine *e = Engine::Get(sel_eng); recursion > 0; e = Engine::Get(e->info.variant_id), --recursion) {
|
||||
EngineID parent = sel_eng;
|
||||
while (parent != INVALID_ENGINE) {
|
||||
Engine *e = Engine::Get(parent);
|
||||
refresh |= (e->display_last_variant != sel_eng);
|
||||
e->display_last_variant = sel_eng;
|
||||
if (e->info.variant_id == INVALID_ENGINE) break;
|
||||
parent = e->info.variant_id;
|
||||
}
|
||||
if (refresh) {
|
||||
InvalidateWindowData(WC_REPLACE_VEHICLE, this->vehicle_type, 0); // Update the autoreplace window
|
||||
@@ -2629,7 +2643,14 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
|
||||
if (!FilterByText(state, engine)) continue;
|
||||
|
||||
list.emplace_back(eid, engine->info.variant_id, engine->display_flags, 0);
|
||||
if (engine->info.variant_id != eid && engine->info.variant_id != INVALID_ENGINE) variants.push_back(engine->info.variant_id);
|
||||
|
||||
/* Add all parent variants of this engine to the variant list */
|
||||
EngineID parent = engine->info.variant_id;
|
||||
while (parent != INVALID_ENGINE) {
|
||||
variants.push_back(parent);
|
||||
parent = Engine::Get(parent)->info.variant_id;
|
||||
}
|
||||
|
||||
if (eid == state.sel_engine) sel_id = eid;
|
||||
}
|
||||
|
||||
@@ -2695,13 +2716,14 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
|
||||
if (cargo == CF_ANY || cargo == CF_ENGINES) cargo = CF_NONE;
|
||||
DoCommandP(this->window_number, selected | (cargo << 24), 0, cmd, callback);
|
||||
|
||||
/* Update last used variant and refresh if necessary. */
|
||||
/* Update last used variant in hierarchy and refresh if necessary. */
|
||||
bool refresh = false;
|
||||
int recursion = 10; /* In case of infinite loop */
|
||||
for (Engine *e = Engine::Get(selected); recursion > 0; e = Engine::Get(e->info.variant_id), --recursion) {
|
||||
EngineID parent = selected;
|
||||
while (parent != INVALID_ENGINE) {
|
||||
Engine *e = Engine::Get(parent);
|
||||
refresh |= (e->display_last_variant != selected);
|
||||
e->display_last_variant = selected;
|
||||
if (e->info.variant_id == INVALID_ENGINE) break;
|
||||
parent = e->info.variant_id;
|
||||
}
|
||||
if (refresh) {
|
||||
InvalidateWindowData(WC_REPLACE_VEHICLE, this->vehicle_type, 0); // Update the autoreplace window
|
||||
|
@@ -217,4 +217,9 @@ static inline bool IsCargoInClass(CargoID c, CargoClass cc)
|
||||
|
||||
using SetCargoBitIterator = SetBitIterator<CargoID, CargoTypes>;
|
||||
|
||||
/** Comparator to sort CargoID by according to desired order. */
|
||||
struct CargoIDComparator {
|
||||
bool operator() (const CargoID &lhs, const CargoID &rhs) const { return _sorted_cargo_types[lhs] < _sorted_cargo_types[rhs]; }
|
||||
};
|
||||
|
||||
#endif /* CARGOTYPE_H */
|
||||
|
@@ -719,10 +719,10 @@ private:
|
||||
if (default_livery != nullptr) {
|
||||
/* Add COLOUR_END to put the colour out of range, but also allow us to show what the default is */
|
||||
default_col = (primary ? default_livery->colour1 : default_livery->colour2) + COLOUR_END;
|
||||
list.emplace_back(new DropDownListColourItem(default_col, false));
|
||||
list.push_back(std::make_unique<DropDownListColourItem>(default_col, false));
|
||||
}
|
||||
for (uint i = 0; i < lengthof(_colour_dropdown); i++) {
|
||||
list.emplace_back(new DropDownListColourItem(i, HasBit(used_colours, i)));
|
||||
list.push_back(std::make_unique<DropDownListColourItem>(i, HasBit(used_colours, i)));
|
||||
}
|
||||
|
||||
byte sel = (default_livery == nullptr || HasBit(livery->in_use, primary ? 0 : 1)) ? (primary ? livery->colour1 : livery->colour2) : default_col;
|
||||
@@ -1032,7 +1032,7 @@ public:
|
||||
this->groups.ForceRebuild();
|
||||
this->BuildGroupList((CompanyID)this->window_number);
|
||||
|
||||
if (this->groups.size() > 0) {
|
||||
if (!this->groups.empty()) {
|
||||
this->sel = this->groups[0]->index;
|
||||
}
|
||||
}
|
||||
@@ -1119,7 +1119,7 @@ public:
|
||||
|
||||
if (!Group::IsValidID(this->sel)) {
|
||||
this->sel = INVALID_GROUP;
|
||||
if (this->groups.size() > 0) this->sel = this->groups[0]->index;
|
||||
if (!this->groups.empty()) this->sel = this->groups[0]->index;
|
||||
}
|
||||
|
||||
this->SetDirty();
|
||||
@@ -2895,7 +2895,7 @@ struct BuyCompanyWindow : Window {
|
||||
this->company_value = hostile_takeover ? CalculateHostileTakeoverValue(c) : c->bankrupt_value;
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close(int data = 0) override
|
||||
{
|
||||
const Company *c = Company::GetIfValid((CompanyID)this->window_number);
|
||||
if (!this->hostile_takeover && c != nullptr && HasBit(c->bankrupt_asked, this->owner) && _current_company == this->owner) {
|
||||
|
@@ -133,7 +133,7 @@ struct IConsoleWindow : Window
|
||||
this->line_offset = GetStringBoundingBox("] ").width + WidgetDimensions::scaled.frametext.left;
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
_iconsole_mode = ICONSOLE_CLOSED;
|
||||
VideoDriver::GetInstance()->EditBoxLostFocus();
|
||||
|
@@ -55,7 +55,7 @@ class Kdtree {
|
||||
/** Create one new node in the tree, return its index in the pool */
|
||||
size_t AddNode(const T &element)
|
||||
{
|
||||
if (this->free_list.size() == 0) {
|
||||
if (this->free_list.empty()) {
|
||||
this->nodes.emplace_back(element);
|
||||
return this->nodes.size() - 1;
|
||||
} else {
|
||||
|
@@ -20,7 +20,7 @@
|
||||
{
|
||||
PoolVector *pools = PoolBase::GetPools();
|
||||
pools->erase(std::find(pools->begin(), pools->end(), this));
|
||||
if (pools->size() == 0) delete pools;
|
||||
if (pools->empty()) delete pools;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -85,7 +85,7 @@ public:
|
||||
constexpr pointer data() const noexcept { return first; }
|
||||
constexpr size_t size() const noexcept { return static_cast<size_t>( last - first ); }
|
||||
constexpr std::ptrdiff_t ssize() const noexcept { return static_cast<std::ptrdiff_t>( last - first ); }
|
||||
constexpr bool empty() const noexcept { return size() == 0; }
|
||||
constexpr bool empty() const noexcept { return this->size() == 0; }
|
||||
|
||||
constexpr iterator begin() const noexcept { return iterator(first); }
|
||||
constexpr iterator end() const noexcept { return iterator(last); }
|
||||
|
@@ -81,14 +81,14 @@ struct SetDateWindow : Window {
|
||||
|
||||
case WID_SD_DAY:
|
||||
for (uint i = 0; i < 31; i++) {
|
||||
list.emplace_back(new DropDownListStringItem(STR_DAY_NUMBER_1ST + i, i + 1, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_DAY_NUMBER_1ST + i, i + 1, false));
|
||||
}
|
||||
selected = this->date.day;
|
||||
break;
|
||||
|
||||
case WID_SD_MONTH:
|
||||
for (uint i = 0; i < 12; i++) {
|
||||
list.emplace_back(new DropDownListStringItem(STR_MONTH_JAN + i, i, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_MONTH_JAN + i, i, false));
|
||||
}
|
||||
selected = this->date.month;
|
||||
break;
|
||||
@@ -96,7 +96,7 @@ struct SetDateWindow : Window {
|
||||
case WID_SD_YEAR:
|
||||
for (Year i = this->min_year; i <= this->max_year; i++) {
|
||||
SetDParam(0, i);
|
||||
list.emplace_back(new DropDownListStringItem(STR_JUST_INT, i, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_JUST_INT, i, false));
|
||||
}
|
||||
selected = this->date.year;
|
||||
break;
|
||||
|
@@ -296,7 +296,7 @@ struct DepotWindow : Window {
|
||||
OrderBackup::Reset();
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
CloseWindowById(WC_BUILD_VEHICLE, this->window_number);
|
||||
CloseWindowById(GetWindowClassForVehicleType(this->type), VehicleListIdentifier(VL_DEPOT_LIST, this->type, this->owner, this->GetDepotIndex()).Pack(), false);
|
||||
@@ -812,7 +812,7 @@ struct DepotWindow : Window {
|
||||
|
||||
case WID_D_SELL_ALL:
|
||||
/* Only open the confirmation window if there are anything to sell */
|
||||
if (this->vehicle_list.size() != 0 || this->wagon_list.size() != 0) {
|
||||
if (!this->vehicle_list.empty() || !this->wagon_list.empty()) {
|
||||
SetDParam(0, this->type);
|
||||
SetDParam(1, this->GetDepotIndex());
|
||||
ShowQuery(
|
||||
@@ -877,7 +877,8 @@ struct DepotWindow : Window {
|
||||
/* Build tooltipstring */
|
||||
std::string details;
|
||||
|
||||
for (CargoID cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
|
||||
for (const CargoSpec *cs : _sorted_cargo_specs) {
|
||||
CargoID cargo_type = cs->Index();
|
||||
if (capacity[cargo_type] == 0) continue;
|
||||
|
||||
SetDParam(0, cargo_type); // {CARGO} #1
|
||||
|
@@ -106,7 +106,7 @@ struct BuildDocksToolbarWindow : Window {
|
||||
if (_settings_client.gui.link_terraform_toolbar) ShowTerraformToolbar(this);
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
if (_game_mode == GM_NORMAL && this->IsWidgetLowered(WID_DT_STATION)) SetViewportCatchmentStation(nullptr, true);
|
||||
if (_settings_client.gui.link_terraform_toolbar) CloseWindowById(WC_SCEN_LAND_GEN, 0, false);
|
||||
@@ -425,7 +425,7 @@ public:
|
||||
this->LowerWidget(_settings_client.gui.station_show_coverage + BDSW_LT_OFF);
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
CloseWindowById(WC_SELECT_STATION, 0);
|
||||
this->PickerWindowBase::Close();
|
||||
|
@@ -110,7 +110,7 @@ void DriverFactoryBase::SelectDriver(const std::string &name, Driver::Type type)
|
||||
*/
|
||||
bool DriverFactoryBase::SelectDriverImpl(const std::string &name, Driver::Type type)
|
||||
{
|
||||
if (GetDrivers().size() == 0) return false;
|
||||
if (GetDrivers().empty()) return false;
|
||||
|
||||
if (name.empty()) {
|
||||
/* Probe for this driver, but do not fall back to dedicated/null! */
|
||||
|
@@ -486,7 +486,8 @@ uint Engine::GetDisplayMaxTractiveEffort() const
|
||||
*/
|
||||
Date Engine::GetLifeLengthInDays() const
|
||||
{
|
||||
return DateAtStartOfYear(this->info.lifelength + _settings_game.vehicle.extend_vehicle_life);
|
||||
/* Assume leap years; this gives the player a bit more than the given amount of years, but never less. */
|
||||
return static_cast<int32_t>(this->info.lifelength + _settings_game.vehicle.extend_vehicle_life) * DAYS_IN_LEAP_YEAR;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -539,7 +540,7 @@ bool Engine::IsVariantHidden(CompanyID c) const
|
||||
* the last display variant rather than the actual parent variant. */
|
||||
const Engine *re = this;
|
||||
const Engine *ve = re->GetDisplayVariant();
|
||||
while (!(ve->IsHidden(c)) && re->info.variant_id != INVALID_ENGINE && re->info.variant_id != re->index) {
|
||||
while (!(ve->IsHidden(c)) && re->info.variant_id != INVALID_ENGINE) {
|
||||
re = Engine::Get(re->info.variant_id);
|
||||
ve = re->GetDisplayVariant();
|
||||
}
|
||||
@@ -668,7 +669,7 @@ void CalcEngineReliability(Engine *e, bool new_month)
|
||||
{
|
||||
/* Get source engine for reliability age. This is normally our engine unless variant reliability syncing is requested. */
|
||||
Engine *re = e;
|
||||
while (re->info.variant_id != INVALID_ENGINE && re->info.variant_id != re->index && (re->info.extra_flags & ExtraEngineFlags::SyncReliability) != ExtraEngineFlags::None) {
|
||||
while (re->info.variant_id != INVALID_ENGINE && (re->info.extra_flags & ExtraEngineFlags::SyncReliability) != ExtraEngineFlags::None) {
|
||||
re = Engine::Get(re->info.variant_id);
|
||||
}
|
||||
|
||||
@@ -725,7 +726,7 @@ void SetYearEngineAgingStops()
|
||||
|
||||
/* Base year ending date on half the model life */
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(ei->base_intro + DateAtStartOfYear(ei->lifelength) / 2, &ymd);
|
||||
ConvertDateToYMD(ei->base_intro + (static_cast<int32_t>(ei->lifelength) * DAYS_IN_LEAP_YEAR) / 2, &ymd);
|
||||
|
||||
_year_engine_aging_stops = std::max(_year_engine_aging_stops, ymd.year);
|
||||
}
|
||||
@@ -768,7 +769,7 @@ void StartupOneEngine(Engine *e, Date aging_date, uint32 seed, Date no_introduce
|
||||
|
||||
/* Get parent variant index for syncing reliability via random seed. */
|
||||
const Engine *re = e;
|
||||
while (re->info.variant_id != INVALID_ENGINE && re->info.variant_id != re->index && (re->info.extra_flags & ExtraEngineFlags::SyncReliability) != ExtraEngineFlags::None) {
|
||||
while (re->info.variant_id != INVALID_ENGINE && (re->info.extra_flags & ExtraEngineFlags::SyncReliability) != ExtraEngineFlags::None) {
|
||||
re = Engine::Get(re->info.variant_id);
|
||||
}
|
||||
|
||||
|
@@ -308,7 +308,7 @@ public:
|
||||
this->Close();
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
SetRedErrorSquare(INVALID_TILE);
|
||||
if (_window_system_initialized) ShowFirstError();
|
||||
|
@@ -14,6 +14,7 @@
|
||||
#include "fios.h"
|
||||
#include "string_func.h"
|
||||
#include "tar_type.h"
|
||||
#include "3rdparty/cpp-btree/btree_set.h"
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
# define access _taccess
|
||||
@@ -84,6 +85,8 @@ static bool IsValidSearchPath(Searchpath sp)
|
||||
static void FillValidSearchPaths(bool only_local_path)
|
||||
{
|
||||
_valid_searchpaths.clear();
|
||||
|
||||
btree::btree_set<std::string_view> seen{};
|
||||
for (Searchpath sp = SP_FIRST_DIR; sp < NUM_SEARCHPATHS; sp++) {
|
||||
if (only_local_path) {
|
||||
switch (sp) {
|
||||
@@ -97,7 +100,11 @@ static void FillValidSearchPaths(bool only_local_path)
|
||||
}
|
||||
}
|
||||
|
||||
if (IsValidSearchPath(sp)) _valid_searchpaths.emplace_back(sp);
|
||||
if (IsValidSearchPath(sp)) {
|
||||
if (seen.count(_searchpaths[sp]) != 0) continue;
|
||||
seen.insert(_searchpaths[sp]);
|
||||
_valid_searchpaths.emplace_back(sp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -409,7 +409,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
/* pause is only used in single-player, non-editor mode, non menu mode */
|
||||
if (!_networking && _game_mode != GM_EDITOR && _game_mode != GM_MENU) {
|
||||
|
@@ -111,7 +111,7 @@ struct GSConfigWindow : public Window {
|
||||
this->RebuildVisibleSettings();
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
HideDropDownMenu(this);
|
||||
CloseWindowByClass(WC_SCRIPT_LIST);
|
||||
@@ -318,7 +318,7 @@ struct GSConfigWindow : public Window {
|
||||
|
||||
DropDownList list;
|
||||
for (int i = config_item.min_value; i <= config_item.max_value; i++) {
|
||||
list.emplace_back(new DropDownListStringItem(config_item.labels.find(i)->second, i, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(config_item.labels.find(i)->second, i, false));
|
||||
}
|
||||
|
||||
ShowDropDownListAt(this, std::move(list), old_val, WID_GSC_SETTING_DROPDOWN, wi_rect, COLOUR_ORANGE);
|
||||
|
@@ -34,7 +34,7 @@ void GameScannerInfo::RegisterAPI(class Squirrel *engine)
|
||||
|
||||
GameInfo *GameScannerInfo::FindInfo(const std::string &name, int version, bool force_exact_match)
|
||||
{
|
||||
if (this->info_list.size() == 0) return nullptr;
|
||||
if (this->info_list.empty()) return nullptr;
|
||||
if (name.empty()) return nullptr;
|
||||
|
||||
if (version == -1) {
|
||||
|
@@ -328,8 +328,8 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = {
|
||||
NWidget(WWT_IMGBTN, COLOUR_ORANGE, WID_GL_START_DATE_UP), SetDataTip(SPR_ARROW_UP, STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWNNAME_DROPDOWN), SetDataTip(STR_JUST_STRING, STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP), SetFill(1, 0),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_TOWN_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_DROPDOWN, COLOUR_ORANGE, WID_GL_INDUSTRY_PULLDOWN), SetDataTip(STR_JUST_STRING1, STR_NULL), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -404,7 +404,7 @@ static DropDownList BuildMapsizeDropDown(int other_dimension)
|
||||
|
||||
for (uint i = MIN_MAP_SIZE_BITS; i <= MAX_MAP_SIZE_BITS; i++) {
|
||||
SetDParam(0, 1LL << i);
|
||||
list.emplace_back(new DropDownListStringItem((i + other_dimension > MAX_MAP_TILES_BITS) ? STR_RED_INT : STR_JUST_INT, i, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>((i + other_dimension > MAX_MAP_TILES_BITS) ? STR_RED_INT : STR_JUST_INT, i, false));
|
||||
}
|
||||
|
||||
return list;
|
||||
@@ -417,20 +417,20 @@ static DropDownList BuildTownNameDropDown()
|
||||
/* Add and sort newgrf townnames generators */
|
||||
const auto &grf_names = GetGRFTownNameList();
|
||||
for (uint i = 0; i < grf_names.size(); i++) {
|
||||
list.emplace_back(new DropDownListStringItem(grf_names[i], BUILTIN_TOWNNAME_GENERATOR_COUNT + i, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(grf_names[i], BUILTIN_TOWNNAME_GENERATOR_COUNT + i, false));
|
||||
}
|
||||
std::sort(list.begin(), list.end(), DropDownListStringItem::NatSortFunc);
|
||||
|
||||
size_t newgrf_size = list.size();
|
||||
/* Insert newgrf_names at the top of the list */
|
||||
if (newgrf_size > 0) {
|
||||
list.emplace_back(new DropDownListItem(-1, false)); // separator line
|
||||
list.push_back(std::make_unique<DropDownListItem>(-1, false)); // separator line
|
||||
newgrf_size++;
|
||||
}
|
||||
|
||||
/* Add and sort original townnames generators */
|
||||
for (uint i = 0; i < BUILTIN_TOWNNAME_GENERATOR_COUNT; i++) {
|
||||
list.emplace_back(new DropDownListStringItem(STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH + i, i, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH + i, i, false));
|
||||
}
|
||||
std::sort(list.begin() + newgrf_size, list.end(), DropDownListStringItem::NatSortFunc);
|
||||
|
||||
|
@@ -696,7 +696,7 @@ int DrawString(int left, int right, int top, std::string_view str, TextColour co
|
||||
}
|
||||
|
||||
Layouter layout(str, INT32_MAX, colour, fontsize);
|
||||
if (layout.size() == 0) return 0;
|
||||
if (layout.empty()) return 0;
|
||||
|
||||
return DrawLayoutLine(*layout.front(), top, left, right, align, underline, true);
|
||||
}
|
||||
|
@@ -39,22 +39,20 @@ class FallbackParagraphLayout : public ParagraphLayouter {
|
||||
public:
|
||||
/** Visual run contains data about the bit of text with the same font. */
|
||||
class FallbackVisualRun : public ParagraphLayouter::VisualRun {
|
||||
std::vector<GlyphID> glyphs; ///< The glyphs we're drawing.
|
||||
std::vector<float> positions; ///< The positions of the glyphs.
|
||||
std::vector<int> glyph_to_char; ///< The char index of the glyphs.
|
||||
|
||||
Font *font; ///< The font used to layout these.
|
||||
GlyphID *glyphs; ///< The glyphs we're drawing.
|
||||
float *positions; ///< The positions of the glyphs.
|
||||
int *glyph_to_char; ///< The char index of the glyphs.
|
||||
int glyph_count; ///< The number of glyphs.
|
||||
|
||||
public:
|
||||
FallbackVisualRun(Font *font, const WChar *chars, int glyph_count, int char_offset, int x);
|
||||
FallbackVisualRun(FallbackVisualRun &&other) noexcept;
|
||||
~FallbackVisualRun() override;
|
||||
const Font *GetFont() const override;
|
||||
int GetGlyphCount() const override;
|
||||
const GlyphID *GetGlyphs() const override;
|
||||
const float *GetPositions() const override;
|
||||
int GetLeading() const override;
|
||||
const int *GetGlyphToCharMap() const override;
|
||||
FallbackVisualRun(Font *font, const char32_t *chars, int glyph_count, int char_offset, int x);
|
||||
const Font *GetFont() const override { return this->font; }
|
||||
int GetGlyphCount() const override { return static_cast<int>(this->glyphs.size()); }
|
||||
const GlyphID *GetGlyphs() const override { return this->glyphs.data(); }
|
||||
const float *GetPositions() const override { return this->positions.data(); }
|
||||
int GetLeading() const override { return this->GetFont()->fc->GetHeight(); }
|
||||
const int *GetGlyphToCharMap() const override { return this->glyph_to_char.data(); }
|
||||
};
|
||||
|
||||
/** A single line worth of VisualRuns. */
|
||||
@@ -111,20 +109,20 @@ public:
|
||||
* @param char_offset This run's offset from the start of the layout input string.
|
||||
* @param x The initial x position for this run.
|
||||
*/
|
||||
FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(Font *font, const WChar *chars, int char_count, int char_offset, int x) :
|
||||
font(font), glyph_count(char_count)
|
||||
FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(Font *font, const char32_t *chars, int char_count, int char_offset, int x) :
|
||||
font(font)
|
||||
{
|
||||
const bool isbuiltin = font->fc->IsBuiltInFont();
|
||||
|
||||
this->glyphs = MallocT<GlyphID>(this->glyph_count);
|
||||
this->glyph_to_char = MallocT<int>(this->glyph_count);
|
||||
this->glyphs.reserve(char_count);
|
||||
this->glyph_to_char.reserve(char_count);
|
||||
|
||||
/* Positions contains the location of the begin of each of the glyphs, and the end of the last one. */
|
||||
this->positions = MallocT<float>(this->glyph_count * 2 + 2);
|
||||
this->positions.resize(char_count * 2 + 2);
|
||||
this->positions[0] = x;
|
||||
|
||||
for (int i = 0; i < this->glyph_count; i++) {
|
||||
this->glyphs[i] = font->fc->MapCharToGlyph(chars[i]);
|
||||
for (int i = 0; i < char_count; i++) {
|
||||
const GlyphID &glyph_id = this->glyphs.emplace_back(font->fc->MapCharToGlyph(chars[i]));
|
||||
if (isbuiltin) {
|
||||
this->positions[2 * i + 1] = font->fc->GetAscender(); // Apply sprite font's ascender.
|
||||
} else if (chars[i] >= SCC_SPRITE_START && chars[i] <= SCC_SPRITE_END) {
|
||||
@@ -132,85 +130,11 @@ FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(Font *font, const
|
||||
} else {
|
||||
this->positions[2 * i + 1] = 0; // No ascender adjustment.
|
||||
}
|
||||
this->positions[2 * i + 2] = this->positions[2 * i] + font->fc->GetGlyphWidth(this->glyphs[i]);
|
||||
this->glyph_to_char[i] = char_offset + i;
|
||||
this->positions[2 * i + 2] = this->positions[2 * i] + font->fc->GetGlyphWidth(glyph_id);
|
||||
this->glyph_to_char.push_back(char_offset + i);
|
||||
}
|
||||
}
|
||||
|
||||
/** Move constructor for visual runs.*/
|
||||
FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(FallbackVisualRun &&other) noexcept : font(other.font), glyph_count(other.glyph_count)
|
||||
{
|
||||
this->positions = other.positions;
|
||||
this->glyph_to_char = other.glyph_to_char;
|
||||
this->glyphs = other.glyphs;
|
||||
|
||||
other.positions = nullptr;
|
||||
other.glyph_to_char = nullptr;
|
||||
other.glyphs = nullptr;
|
||||
}
|
||||
|
||||
/** Free all data. */
|
||||
FallbackParagraphLayout::FallbackVisualRun::~FallbackVisualRun()
|
||||
{
|
||||
free(this->positions);
|
||||
free(this->glyph_to_char);
|
||||
free(this->glyphs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the font associated with this run.
|
||||
* @return The font.
|
||||
*/
|
||||
const Font *FallbackParagraphLayout::FallbackVisualRun::GetFont() const
|
||||
{
|
||||
return this->font;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of glyphs in this run.
|
||||
* @return The number of glyphs.
|
||||
*/
|
||||
int FallbackParagraphLayout::FallbackVisualRun::GetGlyphCount() const
|
||||
{
|
||||
return this->glyph_count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the glyphs of this run.
|
||||
* @return The glyphs.
|
||||
*/
|
||||
const GlyphID *FallbackParagraphLayout::FallbackVisualRun::GetGlyphs() const
|
||||
{
|
||||
return this->glyphs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the positions of this run.
|
||||
* @return The positions.
|
||||
*/
|
||||
const float *FallbackParagraphLayout::FallbackVisualRun::GetPositions() const
|
||||
{
|
||||
return this->positions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the glyph-to-character map for this visual run.
|
||||
* @return The glyph-to-character map.
|
||||
*/
|
||||
const int *FallbackParagraphLayout::FallbackVisualRun::GetGlyphToCharMap() const
|
||||
{
|
||||
return this->glyph_to_char;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the height of this font.
|
||||
* @return The height of the font.
|
||||
*/
|
||||
int FallbackParagraphLayout::FallbackVisualRun::GetLeading() const
|
||||
{
|
||||
return this->GetFont()->fc->GetHeight();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the height of the line.
|
||||
* @return The maximum height of the line.
|
||||
@@ -231,7 +155,7 @@ int FallbackParagraphLayout::FallbackLine::GetLeading() const
|
||||
*/
|
||||
int FallbackParagraphLayout::FallbackLine::GetWidth() const
|
||||
{
|
||||
if (this->size() == 0) return 0;
|
||||
if (this->empty()) return 0;
|
||||
|
||||
/*
|
||||
* The last X position of a run contains is the end of that run.
|
||||
@@ -369,7 +293,7 @@ std::unique_ptr<const ParagraphLayouter::Line> FallbackParagraphLayout::NextLine
|
||||
this->buffer++;
|
||||
}
|
||||
|
||||
if (l->size() == 0 || last_char - begin > 0) {
|
||||
if (l->empty() || last_char - begin > 0) {
|
||||
int w = l->GetWidth();
|
||||
l->emplace_back(iter->second, begin, last_char - begin, begin - this->buffer_begin, w);
|
||||
}
|
||||
|
@@ -132,7 +132,7 @@ ICUParagraphLayout::ICUVisualRun::ICUVisualRun(const ICURun &run, int x) :
|
||||
glyphs(run.glyphs), glyph_to_char(run.glyph_to_char), total_advance(run.total_advance), font(run.font)
|
||||
{
|
||||
/* If there are no positions, the ICURun was not Shaped; that should never happen. */
|
||||
assert(run.positions.size() != 0);
|
||||
assert(!run.positions.empty());
|
||||
this->positions.reserve(run.positions.size());
|
||||
|
||||
/* "positions" is an array of x/y. So we need to alternate. */
|
||||
@@ -380,7 +380,7 @@ std::vector<ICURun> ItemizeStyle(std::vector<ICURun> &runs_current, FontMap &fon
|
||||
runs = ItemizeScript(buff, length, runs);
|
||||
runs = ItemizeStyle(runs, font_mapping);
|
||||
|
||||
if (runs.size() == 0) return nullptr;
|
||||
if (runs.empty()) return nullptr;
|
||||
|
||||
for (auto &run : runs) {
|
||||
run.Shape(buff, length);
|
||||
|
@@ -546,12 +546,13 @@ void GfxLoadSprites()
|
||||
DEBUG(sprite, 2, "Completed loading sprite set %d", _settings_game.game_creation.landscape);
|
||||
}
|
||||
|
||||
bool GraphicsSet::FillSetDetails(IniFile *ini, const std::string &path, const std::string &full_filename)
|
||||
bool GraphicsSet::FillSetDetails(const IniFile &ini, const std::string &path, const std::string &full_filename)
|
||||
{
|
||||
bool ret = this->BaseSet<GraphicsSet, MAX_GFT, true>::FillSetDetails(ini, path, full_filename, false);
|
||||
if (ret) {
|
||||
IniGroup *metadata = ini->GetGroup("metadata");
|
||||
IniItem *item;
|
||||
const IniGroup *metadata = ini.GetGroup("metadata");
|
||||
assert(metadata != nullptr); /* ret can't be true if metadata isn't present. */
|
||||
const IniItem *item;
|
||||
|
||||
fetch_metadata("palette");
|
||||
this->palette = ((*item->value)[0] == 'D' || (*item->value)[0] == 'd') ? PAL_DOS : PAL_WINDOWS;
|
||||
|
@@ -447,7 +447,7 @@ public:
|
||||
this->SortVehicleList();
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close(int data = 0) override
|
||||
{
|
||||
*this->sorting = this->vehgroups.GetListing();
|
||||
this->Window::Close();
|
||||
@@ -591,7 +591,7 @@ public:
|
||||
|
||||
/* Disable all lists management button when the list is empty */
|
||||
this->SetWidgetDisabledState(WID_GL_MANAGE_VEHICLES_DROPDOWN, !this->ShouldShowActionDropdownList() || _local_company != this->vli.company);
|
||||
this->SetWidgetsDisabledState(this->vehicles.size() == 0 || _local_company != this->vli.company || (IsTopLevelGroupID(this->vli.index) && _settings_client.gui.disable_top_veh_list_mass_actions),
|
||||
this->SetWidgetsDisabledState(this->vehicles.empty() || _local_company != this->vli.company || (IsTopLevelGroupID(this->vli.index) && _settings_client.gui.disable_top_veh_list_mass_actions),
|
||||
WID_GL_STOP_ALL,
|
||||
WID_GL_START_ALL);
|
||||
|
||||
|
@@ -122,7 +122,7 @@ struct EndGameWindow : EndGameHighScoreBaseWindow {
|
||||
MarkWholeScreenDirty();
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
if (!_networking) DoCommandP(0, PM_PAUSED_NORMAL, 0, CMD_PAUSE); // unpause
|
||||
if (_game_mode != GM_MENU) ShowHighscoreTable(this->window_number, this->rank);
|
||||
@@ -170,7 +170,7 @@ struct HighScoreWindow : EndGameHighScoreBaseWindow {
|
||||
this->rank = ranking;
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close([[maybe_unused]] int data = 0) override
|
||||
{
|
||||
if (_game_mode != GM_MENU) ShowVitalWindows();
|
||||
|
||||
|
@@ -279,11 +279,12 @@ HotkeyList::~HotkeyList()
|
||||
* Load HotkeyList from IniFile.
|
||||
* @param ini IniFile to load from.
|
||||
*/
|
||||
void HotkeyList::Load(IniFile *ini)
|
||||
void HotkeyList::Load(const IniFile &ini)
|
||||
{
|
||||
IniGroup *group = ini->GetGroup(this->ini_group);
|
||||
const IniGroup *group = ini.GetGroup(this->ini_group);
|
||||
if (group == nullptr) return;
|
||||
for (Hotkey *hotkey = this->items; hotkey->name != nullptr; ++hotkey) {
|
||||
IniItem *item = group->GetItem(hotkey->name);
|
||||
const IniItem *item = group->GetItem(hotkey->name);
|
||||
if (item != nullptr) {
|
||||
hotkey->keycodes.clear();
|
||||
if (item->value.has_value()) ParseHotkeys(hotkey, item->value->c_str());
|
||||
@@ -295,11 +296,11 @@ void HotkeyList::Load(IniFile *ini)
|
||||
* Save HotkeyList to IniFile.
|
||||
* @param ini IniFile to save to.
|
||||
*/
|
||||
void HotkeyList::Save(IniFile *ini) const
|
||||
void HotkeyList::Save(IniFile &ini) const
|
||||
{
|
||||
IniGroup *group = ini->GetGroup(this->ini_group);
|
||||
IniGroup &group = ini.GetOrCreateGroup(this->ini_group);
|
||||
for (const Hotkey *hotkey = this->items; hotkey->name != nullptr; ++hotkey) {
|
||||
IniItem &item = group->GetOrCreateItem(hotkey->name);
|
||||
IniItem &item = group.GetOrCreateItem(hotkey->name);
|
||||
item.SetValue(SaveKeycodes(hotkey));
|
||||
}
|
||||
}
|
||||
@@ -325,8 +326,8 @@ int HotkeyList::CheckMatch(uint16 keycode, bool global_only) const
|
||||
|
||||
static void SaveLoadHotkeys(bool save)
|
||||
{
|
||||
IniFile *ini = new IniFile();
|
||||
ini->LoadFromDisk(_hotkeys_file, NO_DIRECTORY);
|
||||
IniFile ini{};
|
||||
ini.LoadFromDisk(_hotkeys_file, NO_DIRECTORY);
|
||||
|
||||
for (HotkeyList *list : *_hotkey_lists) {
|
||||
if (save) {
|
||||
@@ -336,8 +337,7 @@ static void SaveLoadHotkeys(bool save)
|
||||
}
|
||||
}
|
||||
|
||||
if (save) ini->SaveToDisk(_hotkeys_file);
|
||||
delete ini;
|
||||
if (save) ini.SaveToDisk(_hotkeys_file);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -43,8 +43,8 @@ struct HotkeyList {
|
||||
HotkeyList(const char *ini_group, Hotkey *items, GlobalHotkeyHandlerFunc global_hotkey_handler = nullptr);
|
||||
~HotkeyList();
|
||||
|
||||
void Load(IniFile *ini);
|
||||
void Save(IniFile *ini) const;
|
||||
void Load(const IniFile &ini);
|
||||
void Save(IniFile &ini) const;
|
||||
|
||||
int CheckMatch(uint16 keycode, bool global_only = false) const;
|
||||
|
||||
|
@@ -2797,7 +2797,7 @@ static void CanCargoServiceIndustry(CargoID cargo, Industry *ind, bool *c_accept
|
||||
*/
|
||||
int WhoCanServiceIndustry(Industry *ind)
|
||||
{
|
||||
if (ind->stations_near.size() == 0) return 0; // No stations found at all => nobody services
|
||||
if (ind->stations_near.empty()) return 0; // No stations found at all => nobody services
|
||||
|
||||
int result = 0;
|
||||
for (const Vehicle *v : Vehicle::Iterate()) {
|
||||
|
@@ -1639,7 +1639,7 @@ public:
|
||||
this->industry_editbox.cancel_button = QueryString::ACTION_CLEAR;
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Close(int data = 0) override
|
||||
{
|
||||
this->last_sorting = this->industries.GetListing();
|
||||
this->Window::Close();
|
||||
@@ -1677,7 +1677,7 @@ public:
|
||||
case WID_ID_INDUSTRY_LIST: {
|
||||
int n = 0;
|
||||
Rect ir = r.Shrink(WidgetDimensions::scaled.framerect);
|
||||
if (this->industries.size() == 0) {
|
||||
if (this->industries.empty()) {
|
||||
DrawString(ir, STR_INDUSTRY_DIRECTORY_NONE);
|
||||
break;
|
||||
}
|
||||
@@ -1932,11 +1932,6 @@ enum CargoesFieldType {
|
||||
|
||||
static const uint MAX_CARGOES = 16; ///< Maximum number of cargoes carried in a #CFT_CARGO field in #CargoesField.
|
||||
|
||||
static bool CargoIDSorter(const CargoID &a, const CargoID &b)
|
||||
{
|
||||
return _sorted_cargo_types[a] < _sorted_cargo_types[b];
|
||||
}
|
||||
|
||||
/** Data about a single field in the #IndustryCargoesWindow panel. */
|
||||
struct CargoesField {
|
||||
static int vert_inter_industry_space;
|
||||
@@ -2066,7 +2061,8 @@ struct CargoesField {
|
||||
}
|
||||
}
|
||||
this->u.cargo.num_cargoes = (count < 0) ? static_cast<uint8_t>(insert - std::begin(this->u.cargo.vertical_cargoes)) : count;
|
||||
std::sort(std::begin(this->u.cargo.vertical_cargoes), insert, &CargoIDSorter);
|
||||
CargoIDComparator comparator;
|
||||
std::sort(std::begin(this->u.cargo.vertical_cargoes), insert, comparator);
|
||||
std::fill(insert, std::end(this->u.cargo.vertical_cargoes), CT_INVALID);
|
||||
this->u.cargo.top_end = top_end;
|
||||
this->u.cargo.bottom_end = bottom_end;
|
||||
@@ -2582,8 +2578,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
/* Compute max size of the cargo texts. */
|
||||
this->cargo_textsize.width = 0;
|
||||
this->cargo_textsize.height = 0;
|
||||
for (uint i = 0; i < NUM_CARGO; i++) {
|
||||
const CargoSpec *csp = CargoSpec::Get(i);
|
||||
for (const CargoSpec *csp : CargoSpec::Iterate()) {
|
||||
if (!csp->IsValid()) continue;
|
||||
this->cargo_textsize = maxdim(this->cargo_textsize, GetStringBoundingBox(csp->name));
|
||||
}
|
||||
@@ -3107,7 +3102,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
case WID_IC_CARGO_DROPDOWN: {
|
||||
DropDownList lst;
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
lst.emplace_back(new DropDownListStringItem(cs->name, cs->Index(), false));
|
||||
lst.push_back(std::make_unique<DropDownListStringItem>(cs->name, cs->Index(), false));
|
||||
}
|
||||
if (!lst.empty()) {
|
||||
int selected = (this->ind_cargo >= NUM_INDUSTRYTYPES) ? (int)(this->ind_cargo - NUM_INDUSTRYTYPES) : -1;
|
||||
@@ -3121,7 +3116,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
for (IndustryType ind : _sorted_industry_types) {
|
||||
const IndustrySpec *indsp = GetIndustrySpec(ind);
|
||||
if (!indsp->enabled) continue;
|
||||
lst.emplace_back(new DropDownListStringItem(indsp->name, ind, false));
|
||||
lst.push_back(std::make_unique<DropDownListStringItem>(indsp->name, ind, false));
|
||||
}
|
||||
if (!lst.empty()) {
|
||||
int selected = (this->ind_cargo < NUM_INDUSTRYTYPES) ? (int)this->ind_cargo : -1;
|
||||
|
22
src/ini.cpp
22
src/ini.cpp
@@ -32,9 +32,9 @@
|
||||
|
||||
/**
|
||||
* Create a new ini file with given group names.
|
||||
* @param list_group_names A \c nullptr terminated list with group names that should be loaded as lists instead of variables. @see IGT_LIST
|
||||
* @param list_group_names A list with group names that should be loaded as lists instead of variables. @see IGT_LIST
|
||||
*/
|
||||
IniFile::IniFile(const char * const *list_group_names) : IniLoadFile(list_group_names)
|
||||
IniFile::IniFile(const IniGroupNameList &list_group_names) : IniLoadFile(list_group_names)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -56,20 +56,20 @@ bool IniFile::SaveToDisk(const std::string &filename)
|
||||
std::ofstream os(OTTD2FS(file_new).c_str());
|
||||
if (os.fail()) return false;
|
||||
|
||||
for (const IniGroup *group = this->group; group != nullptr; group = group->next) {
|
||||
os << group->comment << "[" << group->name << "]\n";
|
||||
for (const IniItem *item = group->item; item != nullptr; item = item->next) {
|
||||
os << item->comment;
|
||||
for (const IniGroup &group : this->groups) {
|
||||
os << group.comment << "[" << group.name << "]\n";
|
||||
for (const IniItem &item : group.items) {
|
||||
os << item.comment;
|
||||
|
||||
/* protect item->name with quotes if needed */
|
||||
if (item->name.find(' ') != std::string::npos ||
|
||||
item->name[0] == '[') {
|
||||
os << "\"" << item->name << "\"";
|
||||
if (item.name.find(' ') != std::string::npos ||
|
||||
item.name[0] == '[') {
|
||||
os << "\"" << item.name << "\"";
|
||||
} else {
|
||||
os << item->name;
|
||||
os << item.name;
|
||||
}
|
||||
|
||||
os << " = " << item->value.value_or("") << "\n";
|
||||
os << " = " << item.value.value_or("") << "\n";
|
||||
}
|
||||
}
|
||||
os << this->comment;
|
||||
|
202
src/ini_load.cpp
202
src/ini_load.cpp
@@ -20,18 +20,9 @@
|
||||
* @param parent the group we belong to
|
||||
* @param name the name of the item
|
||||
*/
|
||||
IniItem::IniItem(IniGroup *parent, const std::string &name) : next(nullptr)
|
||||
IniItem::IniItem(const std::string &name)
|
||||
{
|
||||
this->name = StrMakeValid(name);
|
||||
|
||||
*parent->last_item = this;
|
||||
parent->last_item = &this->next;
|
||||
}
|
||||
|
||||
/** Free everything we loaded. */
|
||||
IniItem::~IniItem()
|
||||
{
|
||||
delete this->next;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -48,37 +39,9 @@ void IniItem::SetValue(const std::string_view value)
|
||||
* @param parent the file we belong to
|
||||
* @param name the name of the group
|
||||
*/
|
||||
IniGroup::IniGroup(IniLoadFile *parent, const std::string &name) : next(nullptr), type(IGT_VARIABLES), item(nullptr)
|
||||
IniGroup::IniGroup(const std::string &name, IniGroupType type) : type(type)
|
||||
{
|
||||
this->name = StrMakeValid(name);
|
||||
|
||||
this->last_item = &this->item;
|
||||
*parent->last_group = this;
|
||||
parent->last_group = &this->next;
|
||||
|
||||
if (parent->list_group_names != nullptr) {
|
||||
for (uint i = 0; parent->list_group_names[i] != nullptr; i++) {
|
||||
if (this->name == parent->list_group_names[i]) {
|
||||
this->type = IGT_LIST;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (parent->seq_group_names != nullptr) {
|
||||
for (uint i = 0; parent->seq_group_names[i] != nullptr; i++) {
|
||||
if (this->name == parent->seq_group_names[i]) {
|
||||
this->type = IGT_SEQUENCE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Free everything we loaded. */
|
||||
IniGroup::~IniGroup()
|
||||
{
|
||||
delete this->item;
|
||||
delete this->next;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -86,10 +49,10 @@ IniGroup::~IniGroup()
|
||||
* @param name name of the item to find.
|
||||
* @return the requested item or nullptr if not found.
|
||||
*/
|
||||
IniItem *IniGroup::GetItem(const std::string &name) const
|
||||
const IniItem *IniGroup::GetItem(const std::string &name) const
|
||||
{
|
||||
for (IniItem *item = this->item; item != nullptr; item = item->next) {
|
||||
if (item->name == name) return item;
|
||||
for (const IniItem &item : this->items) {
|
||||
if (item.name == name) return &item;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
@@ -102,12 +65,22 @@ IniItem *IniGroup::GetItem(const std::string &name) const
|
||||
*/
|
||||
IniItem &IniGroup::GetOrCreateItem(const std::string &name)
|
||||
{
|
||||
for (IniItem *item = this->item; item != nullptr; item = item->next) {
|
||||
if (item->name == name) return *item;
|
||||
for (IniItem &item : this->items) {
|
||||
if (item.name == name) return item;
|
||||
}
|
||||
|
||||
/* Item doesn't exist, make a new one. */
|
||||
return *(new IniItem(this, name));
|
||||
return this->CreateItem(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an item with the given name. This does not reuse an existing item of the same name.
|
||||
* @param name name of the item to create.
|
||||
* @return the created item.
|
||||
*/
|
||||
IniItem &IniGroup::CreateItem(const std::string &name)
|
||||
{
|
||||
return this->items.emplace_back(name);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,22 +89,7 @@ IniItem &IniGroup::GetOrCreateItem(const std::string &name)
|
||||
*/
|
||||
void IniGroup::RemoveItem(const std::string &name)
|
||||
{
|
||||
IniItem **prev = &this->item;
|
||||
|
||||
for (IniItem *item = this->item; item != nullptr; prev = &item->next, item = item->next) {
|
||||
if (item->name != name) continue;
|
||||
|
||||
*prev = item->next;
|
||||
/* "last_item" is a pointer to the "real-last-item"->next. */
|
||||
if (this->last_item == &item->next) {
|
||||
this->last_item = prev;
|
||||
}
|
||||
|
||||
item->next = nullptr;
|
||||
delete item;
|
||||
|
||||
return;
|
||||
}
|
||||
this->items.remove_if([&name](const IniItem &item) { return item.name == name; });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -139,81 +97,85 @@ void IniGroup::RemoveItem(const std::string &name)
|
||||
*/
|
||||
void IniGroup::Clear()
|
||||
{
|
||||
delete this->item;
|
||||
this->item = nullptr;
|
||||
this->last_item = &this->item;
|
||||
this->items.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new in-memory Ini file representation.
|
||||
* @param list_group_names A \c nullptr terminated list with group names that should be loaded as lists instead of variables. @see IGT_LIST
|
||||
* @param seq_group_names A \c nullptr terminated list with group names that should be loaded as lists of names. @see IGT_SEQUENCE
|
||||
* @param list_group_names A list with group names that should be loaded as lists instead of variables. @see IGT_LIST
|
||||
* @param seq_group_names A list with group names that should be loaded as lists of names. @see IGT_SEQUENCE
|
||||
*/
|
||||
IniLoadFile::IniLoadFile(const char * const *list_group_names, const char * const *seq_group_names) :
|
||||
group(nullptr),
|
||||
IniLoadFile::IniLoadFile(const IniGroupNameList &list_group_names, const IniGroupNameList &seq_group_names) :
|
||||
list_group_names(list_group_names),
|
||||
seq_group_names(seq_group_names)
|
||||
{
|
||||
this->last_group = &this->group;
|
||||
}
|
||||
|
||||
/** Free everything we loaded. */
|
||||
IniLoadFile::~IniLoadFile()
|
||||
{
|
||||
delete this->group;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the group with the given name. If it doesn't exist
|
||||
* and \a create_new is \c true create a new group.
|
||||
* Get the group with the given name.
|
||||
* @param name name of the group to find.
|
||||
* @param create_new Allow creation of group if it does not exist.
|
||||
* @return The requested group if it exists or was created, else \c nullptr.
|
||||
* @return The requested group or \c nullptr if not found.
|
||||
*/
|
||||
IniGroup *IniLoadFile::GetGroup(const std::string &name, bool create_new)
|
||||
const IniGroup *IniLoadFile::GetGroup(const std::string &name) const
|
||||
{
|
||||
/* does it exist already? */
|
||||
for (IniGroup *group = this->group; group != nullptr; group = group->next) {
|
||||
if (group->name == name) return group;
|
||||
for (const IniGroup &group : this->groups) {
|
||||
if (group.name == name) return &group;
|
||||
}
|
||||
|
||||
if (!create_new) return nullptr;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/* otherwise make a new one */
|
||||
IniGroup *group = new IniGroup(this, name);
|
||||
group->comment = "\n";
|
||||
return group;
|
||||
/**
|
||||
* Get the group with the given name.
|
||||
* @param name name of the group to find.
|
||||
* @return The requested group or \c nullptr if not found.
|
||||
*/
|
||||
IniGroup *IniLoadFile::GetGroup(const std::string &name)
|
||||
{
|
||||
for (IniGroup &group : this->groups) {
|
||||
if (group.name == name) return &group;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the group with the given name, and if it doesn't exist create a new group.
|
||||
* @param name name of the group to find.
|
||||
* @return the requested group.
|
||||
*/
|
||||
IniGroup &IniLoadFile::GetOrCreateGroup(const std::string &name)
|
||||
{
|
||||
for (IniGroup &group : this->groups) {
|
||||
if (group.name == name) return group;
|
||||
}
|
||||
|
||||
/* Group doesn't exist, make a new one. */
|
||||
return this->CreateGroup(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an group with the given name. This does not reuse an existing group of the same name.
|
||||
* @param name name of the group to create.
|
||||
* @return the created group.
|
||||
*/
|
||||
IniGroup &IniLoadFile::CreateGroup(const std::string &name)
|
||||
{
|
||||
IniGroupType type = IGT_VARIABLES;
|
||||
if (std::find(this->list_group_names.begin(), this->list_group_names.end(), name) != this->list_group_names.end()) type = IGT_LIST;
|
||||
if (std::find(this->seq_group_names.begin(), this->seq_group_names.end(), name) != this->seq_group_names.end()) type = IGT_SEQUENCE;
|
||||
|
||||
return this->groups.emplace_back(name, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the group with the given name.
|
||||
* @param name name of the group to remove.
|
||||
*/
|
||||
void IniLoadFile::RemoveGroup(const char *name)
|
||||
void IniLoadFile::RemoveGroup(const std::string &name)
|
||||
{
|
||||
size_t len = strlen(name);
|
||||
IniGroup *prev = nullptr;
|
||||
IniGroup *group;
|
||||
|
||||
/* does it exist already? */
|
||||
for (group = this->group; group != nullptr; prev = group, group = group->next) {
|
||||
if (group->name.compare(0, len, name) == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (group == nullptr) return;
|
||||
|
||||
if (prev != nullptr) {
|
||||
prev->next = prev->next->next;
|
||||
if (this->last_group == &group->next) this->last_group = &prev->next;
|
||||
} else {
|
||||
this->group = this->group->next;
|
||||
if (this->last_group == &group->next) this->last_group = &this->group;
|
||||
}
|
||||
|
||||
group->next = nullptr;
|
||||
delete group;
|
||||
size_t len = name.length();
|
||||
this->groups.remove_if([&name, &len](const IniGroup &group) { return group.name.compare(0, len, name) == 0; });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -224,7 +186,7 @@ void IniLoadFile::RemoveGroup(const char *name)
|
||||
*/
|
||||
void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir, std::string *save)
|
||||
{
|
||||
assert(this->last_group == &this->group);
|
||||
assert(this->groups.empty());
|
||||
|
||||
char buffer[1024];
|
||||
IniGroup *group = nullptr;
|
||||
@@ -281,7 +243,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
|
||||
e--;
|
||||
}
|
||||
s++; // skip [
|
||||
group = new IniGroup(this, std::string(s, e - s));
|
||||
group = &this->CreateGroup(std::string(s, e - s));
|
||||
if (comment_size != 0) {
|
||||
group->comment.assign(comment, comment_size);
|
||||
comment_size = 0;
|
||||
@@ -289,9 +251,9 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
|
||||
} else if (group != nullptr) {
|
||||
if (group->type == IGT_SEQUENCE) {
|
||||
/* A sequence group, use the line as item name without further interpretation. */
|
||||
IniItem *item = new IniItem(group, std::string(buffer, e - buffer));
|
||||
IniItem &item = group->CreateItem(std::string(buffer, e - buffer));
|
||||
if (comment_size) {
|
||||
item->comment.assign(comment, comment_size);
|
||||
item.comment.assign(comment, comment_size);
|
||||
comment_size = 0;
|
||||
}
|
||||
continue;
|
||||
@@ -307,9 +269,9 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
|
||||
}
|
||||
|
||||
/* it's an item in an existing group */
|
||||
IniItem *item = new IniItem(group, std::string(s, t - s));
|
||||
IniItem &item = group->CreateItem(std::string(s, t - s));
|
||||
if (comment_size != 0) {
|
||||
item->comment.assign(comment, comment_size);
|
||||
item.comment.assign(comment, comment_size);
|
||||
comment_size = 0;
|
||||
}
|
||||
|
||||
@@ -326,9 +288,9 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir,
|
||||
|
||||
/* If the value was not quoted and empty, it must be nullptr */
|
||||
if (!quoted && e == t) {
|
||||
item->value.reset();
|
||||
item.value.reset();
|
||||
} else {
|
||||
item->value = StrMakeValid(std::string(t));
|
||||
item.value = StrMakeValid(std::string(t));
|
||||
}
|
||||
} else {
|
||||
/* it's an orphan item */
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#define INI_TYPE_H
|
||||
|
||||
#include "fileio_type.h"
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include <optional>
|
||||
|
||||
@@ -23,48 +24,48 @@ enum IniGroupType {
|
||||
|
||||
/** A single "line" in an ini file. */
|
||||
struct IniItem {
|
||||
IniItem *next; ///< The next item in this group
|
||||
std::string name; ///< The name of this item
|
||||
std::optional<std::string> value; ///< The value of this item
|
||||
std::string comment; ///< The comment associated with this item
|
||||
|
||||
IniItem(struct IniGroup *parent, const std::string &name);
|
||||
~IniItem();
|
||||
IniItem(const std::string &name);
|
||||
|
||||
void SetValue(const std::string_view value);
|
||||
};
|
||||
|
||||
/** A group within an ini file. */
|
||||
struct IniGroup {
|
||||
IniGroup *next; ///< the next group within this file
|
||||
std::list<IniItem> items; ///< all items in the group
|
||||
IniGroupType type; ///< type of group
|
||||
IniItem *item; ///< the first item in the group
|
||||
IniItem **last_item; ///< the last item in the group
|
||||
std::string name; ///< name of group
|
||||
std::string comment; ///< comment for group
|
||||
|
||||
IniGroup(struct IniLoadFile *parent, const std::string &name);
|
||||
~IniGroup();
|
||||
IniGroup(const std::string &name, IniGroupType type);
|
||||
|
||||
IniItem *GetItem(const std::string &name) const;
|
||||
const IniItem *GetItem(const std::string &name) const;
|
||||
IniItem &GetOrCreateItem(const std::string &name);
|
||||
IniItem &CreateItem(const std::string &name);
|
||||
void RemoveItem(const std::string &name);
|
||||
void Clear();
|
||||
};
|
||||
|
||||
/** Ini file that only supports loading. */
|
||||
struct IniLoadFile {
|
||||
IniGroup *group; ///< the first group in the ini
|
||||
IniGroup **last_group; ///< the last group in the ini
|
||||
using IniGroupNameList = std::initializer_list<std::string_view>;
|
||||
|
||||
std::list<IniGroup> groups; ///< all groups in the ini
|
||||
std::string comment; ///< last comment in file
|
||||
const char * const *list_group_names; ///< nullptr terminated list with group names that are lists
|
||||
const char * const *seq_group_names; ///< nullptr terminated list with group names that are sequences.
|
||||
const IniGroupNameList list_group_names; ///< list of group names that are lists
|
||||
const IniGroupNameList seq_group_names; ///< list of group names that are sequences.
|
||||
|
||||
IniLoadFile(const char * const *list_group_names = nullptr, const char * const *seq_group_names = nullptr);
|
||||
virtual ~IniLoadFile();
|
||||
IniLoadFile(const IniGroupNameList &list_group_names = {}, const IniGroupNameList &seq_group_names = {});
|
||||
virtual ~IniLoadFile() { }
|
||||
|
||||
IniGroup *GetGroup(const std::string &name, bool create_new = true);
|
||||
void RemoveGroup(const char *name);
|
||||
const IniGroup *GetGroup(const std::string &name) const;
|
||||
IniGroup *GetGroup(const std::string &name);
|
||||
IniGroup &GetOrCreateGroup(const std::string &name);
|
||||
IniGroup &CreateGroup(const std::string &name);
|
||||
void RemoveGroup(const std::string &name);
|
||||
|
||||
void LoadFromDisk(const std::string &filename, Subdirectory subdir, std::string *save = nullptr);
|
||||
|
||||
@@ -88,7 +89,7 @@ struct IniLoadFile {
|
||||
|
||||
/** Ini file that supports both loading and saving. */
|
||||
struct IniFile : IniLoadFile {
|
||||
IniFile(const char * const *list_group_names = nullptr);
|
||||
IniFile(const IniGroupNameList &list_group_names = {});
|
||||
|
||||
bool SaveToDisk(const std::string &filename);
|
||||
|
||||
|
@@ -4422,7 +4422,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... te n
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... te naby aan 'n ander dorp
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... te veel dorpe
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... daar is nie meer spasie oor op die kaart nie
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE} Die dorp sal nie paaie bou nie. Jy kan dit verander deur die bou van paaie via Stellings-> Omgewings-> Dorpe te aktiveer
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Pad werke in verloop
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan nie die dorp verwyder nie...{}'n Stasie of depot verwys na die dorp of die blok wat deur die dorp besit word kan nie verwyder word nie.
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... daar is geen plek vir 'n standbeeld in die middel van die dorp
|
||||
|
@@ -4137,7 +4137,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... قر
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... قريبة جدا من مدينة أخرى
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... المدن كثيرة جدا
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... لا يوجد فراغ في الخريطة
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}لن تبني البلدية طرق جديدة. بإمكانك تمكين بناء الطرق الجديدة عن طريق الاعدادات --> البيئة--> المدن
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}اعمال الطرق قيد التنفيذ
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}لا يمكن ازالة هذه المدينة{}محطة او ورشة مرتبطة بالمدينة او هناك مربع مملوك للمدينة لا يمكن لزالته
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... لا يوجد مكان مناسب للمجسم بداخل هذة المدينة/البلدة
|
||||
|
@@ -4171,7 +4171,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... mapa
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... beste herritik hurbilegi
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... herri gehiegi
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ez dago leku gehiagorik mapan
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Herriak ez du errepiderik eraikiko. Herriek errepideak eraiki ahal izateko Ezarpen Aurreratuak->Ekonomia->Herriak
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Errepide lanak egiten
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Geltoki edo gordailu bat herriari lotua dago edo ezin izan da herriaren jabegoa den lauki bat ezabatu
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... ez dago leku egokirik estatua batentzat hiri honen erdian
|
||||
|
@@ -4778,7 +4778,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... за
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... занадта блізка да іншага горада
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... занадта шмат гарадоў
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... няма месца на мапе
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Гарады ня будуць будаваць дарогі самі. Вы можаце ўключыць будаўніцтва дарог у раздзеле «Наладкі -> Навак.{NBSP}асяроддзе -> Гарады».
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Ідуць дарожныя работы...
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Немагчыма зьнішчыць горад:{}да яго адносіцца станцыя або дэпо, альбо немагчыма ачысьціць адну з занятых ім клетак.
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... у цэнтры горада няма месца для статуі
|
||||
|
@@ -4867,7 +4867,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... muit
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... muito perto de outra cidade
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... cidades demais
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não há mais espaço no mapa
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}A cidade não irá construir estradas. Você pode ativar a construção através de Configurações->Ambiente->Cidades
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Recapeamento rodoviário em progresso
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Impossível remover cidade...{}Uma estação ou depósito referente à essa cidade não pode ser removido
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há local para uma estátua no centro dessa cidade
|
||||
|
@@ -4251,7 +4251,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... пр
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... прекалено близо до друг град
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... прекалено много градове
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... няма повече място на картата
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Градът няма да изгражда пътища. Можете да активирате строенето на пътища чрез Настройки за напреднали->Икономика->Градове.
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Пътни ремонти в процес
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Градът не може да бъде премахнат...{}Станция или депо има връзка с града, или плочка, собственост на града, не може да бъде отстранена
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... няма подходящо място за статуя в центъра на града
|
||||
|
@@ -4867,7 +4867,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... mass
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... massa prop d'una altra població
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... massa poblacions
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}...no queda espai al mapa.
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}La població no construirà carrers. Pots activar la construcció de carrers via Configuració->Interacció amb l'entorn->Poblacions
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obres en progrés
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}No es pot eliminar aquesta població...{}Hi ha una estació, un dipòsit o una cel·la pertanyent a la població que no pot ser eliminada
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... no hi ha un lloc adequat per situar l'estàtua al centre d'aquesta població
|
||||
|
@@ -4609,7 +4609,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... preb
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... preblizu drugome gradu
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... previše gradova
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... nema više mjesta na karti
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Grad neće graditi ceste. Možete uključiti gradnju cesta putem Postavki->Okolina->Gradovi
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Cestovni radovi u tijeku
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Nije moguće izbrisati ovaj grad...{}Postaja ili spremište se pozivaju na grad ili polja u vlasništvu grada nije moguće ukloniti
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... nema odgovarajućeg mjesta za kip u središtu ovog grada
|
||||
|
@@ -4878,7 +4878,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... moc
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... moc blízko k jinému městu
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... příliš mnoho měst
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... na mapě už není místo
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Město nebude stavět silnice. Můžete to změnit přes Pokročilé nastavení->Ekonomika->Města
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Silnice je v rekonstrukci
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Nelze vybourat město...{}Buď k němu patří stanice nebo depo, anebo se nedá odklidit políčko městem vlastněné
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... v tomto městě není žádné místo vhodné pro umístění sochy
|
||||
|
@@ -4866,7 +4866,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... for
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... for tæt på en anden by
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... for mange byer
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... der er ikke mere plads på kortet
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Byen vil ikke kunne bygge veje. Du kan tillade byer at bygge veje via Avancerede indstillinger->Økonomi->Byer.
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Vejarbejde i gang
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan ikke slette denne by...{}En station eller et depot refererer til byen, eller en brik der er ejet a byen kan ikke fjernes
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... Der er ingen egnede steder at placere en statue
|
||||
|
@@ -4866,7 +4866,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... te d
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... te dicht bij een andere plaats
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... te veel plaatsen
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... er is geen ruimte meer op de kaart
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}De stad bouwt geen wegen. Het bouwen van wegen kan aangezet worden via Instellingen->Omgeving->Steden
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Wegwerkzaamheden in uitvoering
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan deze stad niet verwijderen...{}Een station of depot verwijst naar deze plaats of een door de stad beheerde tegel kan niet worden verwijderd
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... er is geen geschikte plaats voor een standbeeld in het centrum van dit dorp
|
||||
|
@@ -924,10 +924,8 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STR
|
||||
|
||||
STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Open the group window focused on the vehicle's group
|
||||
|
||||
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} no longer accepts {STRING}
|
||||
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} no longer accepts {STRING} or {STRING}
|
||||
STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} now accepts {STRING}
|
||||
STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} now accepts {STRING} and {STRING}
|
||||
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} no longer accepts: {CARGO_LIST}
|
||||
STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{WHITE}{STATION} now accepts: {CARGO_LIST}
|
||||
|
||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Offer of subsidy expired:{}{}{STRING} from {STRING2} to {STRING2} will now not attract a subsidy
|
||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidy withdrawn:{}{}{STRING} service from {STRING2} to {STRING2} is no longer subsidised
|
||||
@@ -4866,7 +4864,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... too
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... too close to another town
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... too many towns
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... there is no more space on the map
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}The town will not build roads. You can enable building of roads via Settings->Environment->Towns
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Road works in progress
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Can't delete this town...{}A station or depot is referring to the town or a town owned tile can't be removed
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... there is no suitable place for a statue in the centre of this town
|
||||
|
@@ -4866,7 +4866,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... too
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... too close to another town
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... too many towns
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... there is no more space on the map
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}The town will not build roads. You can enable building of roads via Advanced Settings->Environment->Towns
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Road works in progress
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Can't delete this town...{}A station or depot is referring to the town or a town owned tile can't be removed
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... there is no suitable place for a statue in the centre of this town
|
||||
|
@@ -4866,7 +4866,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... too
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... too close to another town
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... too many towns
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... there is no more space on the map
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}The town will not build roads. You can enable building of roads via Settings->Environment->Towns
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Road work in progress
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Can't delete this town...{}A station or depot is referring to the town or a town owned tile can't be removed
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... there is no suitable place for a statue in the center of this town
|
||||
|
@@ -4768,7 +4768,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... tro
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... tro proksime al alia urbo
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... tro da urboj
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... spaco mankas sur la mapo
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}La urbo ne konstruos stratojn. Vi povas ebligi stratkonstruadon per Avancitaj Agordoj->Ekonomio->Urboj
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Aktivas vojprilaborado
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Ne eblas forviŝi ĉi tiun urbon...{}Stacidomo aŭ garaĝo havas referencon al la urbo, aŭ ne eblas forviŝi kahelon posedatan de la urbo
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... ne jen estas konvenan lokon por statuo en la centro de ĉi tiu urbo
|
||||
|
@@ -4820,7 +4820,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... liig
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... liiga lähedal teisele asulale
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... liiga palju asulaid
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... pole enam ruumi kaardil
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Asula ei ehita teid. Teedeehituse lubamiseks Põhjalik seadistus->Majandus->Asulad
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Teede ehitamine
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Seda asulat ei saa kõrvaldada...{}Jaam või depoo viitab asulale, või asulale kuuluvat ruutu ei saa kõrvaldada
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... asula keskuses ei leidu kujule sobivat kohta
|
||||
|
@@ -3826,7 +3826,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... ov t
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... ov tætt við eina aðra bygd
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... ov nógvar bygdir
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... tað er einki pláss eftir á kortinum
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Bygdin byggir ikki vegir. Tú kanst tendra vega byggjing í Víðkaðir Innstillingar->Búðskapur->Bygdir
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Veg arbeiði í gongd
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kann ikki strika hesa bygdina...{}Ein støð ella goymsla vísur til bygdina, ella ein puntur ið er ogn hjá bygdini kann ikki beinast burtur
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... einki hóskandi stað til eina standmynd í miðjuni av hesi bygdini
|
||||
|
@@ -4866,7 +4866,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... liia
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... liian lähellä toista kuntaa
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... liian monta kuntaa
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... kartalla ei ole enää tilaa
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Kunta ei rakenna teitä. Voit sallia teiden rakentamisen valikosta Asetukset->Ympäristö->Kunnat
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Tietyöt ovat käynnissä.
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kuntaa ei voida poistaa...{}Asema tai varikko viittaa kuntaan tai kunnan omistamaa ruutua ei voida poistaa
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... tämän kunnan keskustassa ei ole sopivaa paikkaa patsaalle
|
||||
|
@@ -4867,7 +4867,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... trop
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... trop près d'une autre ville
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... trop de villes
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... il n'y a plus d'emplacement sur la carte
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}La ville ne construira pas de routes. Vous pouvez activer la construction des routes sous Paramètres->Environnement->Villes
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Route en travaux
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Impossible de supprimer cette ville...{}Une station ou un dépôt fait référence à cette ville ou une propriété municipale ne peut pas être supprimée.
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... aucun emplacement convenable disponible pour une statue dans ce centre-ville
|
||||
|
@@ -4565,7 +4565,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... ro f
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... ro fhaisg air baile eile
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... tha cus bhailtean ann
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... chan eil rum air fhàgail air a' mhapa
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Cha tog am baile rathad sam bith. ’S urrainn dhut togail rathaidean a chur an comas le Roghainnean->Àrainneachd->Bailtean
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Rathad ga ath-thogail
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Cha ghabh am baile seo sguabadh às...{}Tha stèisean no port no garaids no trèan-lann no cala no hangar a' toirt iomradh air a' bhaile no tha leac ann a tha leis a' bhaile is nach gabh toirt air falbh
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... chan eil ionad freagarrach airson ìomhaigh ann am meadhan a' bhaile seo
|
||||
|
@@ -4812,7 +4812,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... dema
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... demasiado preto doutra cidade
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... hai demasiadas cidades
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... non queda máis espazo no mapa
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}O pobo non construirá estradas. Podes activar a función de construción de estradas en Opcións Avanzadas->Economía->Pobos
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obras na estrada en curso
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Non se pode borrar esta vila...{}Unha estación ou depósito está relacionado coa vila ou un cadro propiedade da vila non pode ser eliminado
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... non hai ningún sitio adecuado para unha estatua no centro desta vila
|
||||
|
@@ -4843,7 +4843,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... zu d
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... zu dicht an einer anderen Stadt
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... zu viele Städte
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... es ist kein Platz mehr auf dem Spielfeld
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Städte bauen im Moment keine Straßen. Städtischer Straßenbau kann mittels Einstellungen->Umgebung->Städte eingestellt werden
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Straßenarbeiten sind im Gange
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Stadt kann nicht gelöscht werden ...{}Eine Station oder ein Depot bezieht sich auf diese Stadt oder ein Feld im städtischen Besitz kann nicht entfernt werden.
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... es gibt keinen geeigneten Standort für die Statue im Zentrum dieser Stadt
|
||||
|
@@ -4865,7 +4865,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... πο
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... πολύ κοντά σε άλλη πόλη
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... πάρα πολλές πόλεις
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... δεν υπάρχει άλλος χώρος στον χάρτη
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Η πόλη δεν θα οικοδομεί δρόμους. Μπορείτε να ενεργοποιήσετε την κατασκευή οδών μέσω τις Προχωρημένες Επιλογές->Οικονομία->Πόλεις
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Έργα οδοποιίας σε εξέλιξη
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Δεν γίνεται να διαγραφεί η πόλη...{}Ένας σταθμός ή ένα αμαξοστάσιο που αναφέρεται στην πόλη ή ένα τετραγωνίδιο της πόλης δεν μπορεί να αφαιρεθεί
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... δεν υπάρχει κατάλληλο μέρος για άγαλμα στο κέντρο αυτής της πόλης
|
||||
|
@@ -4468,7 +4468,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... קר
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... קרוב מידי לעיר אחרת
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... יותר מידי ערים
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... אין יותר מקום על המפה
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}העיר לא תבנה כבישים. באפשרותך לאפשר בניית כבישים בעזרת תפריט הגדרות מתקמדות->כלכלה->ערים
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}עבודות כביש בפעולה
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}לא ניתן למחוק עיר זו...{}תחנה או מוסך מקושר לעיר או שמשבצת בבעלות העיר לא ניתנת להסרה
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... אין אף מיקום מתאים לפסל במרכז עיירה זו
|
||||
|
@@ -254,6 +254,9 @@ STR_COLOUR_WHITE :Fehér
|
||||
STR_COLOUR_RANDOM :Véletlenszerű
|
||||
|
||||
###length 17
|
||||
STR_COLOUR_SECONDARY_ORANGE :Narancssárga
|
||||
STR_COLOUR_SECONDARY_GREY :Szürke
|
||||
STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Ugyanaz mint az elsődleges
|
||||
|
||||
|
||||
# Units used in OpenTTD
|
||||
@@ -569,6 +572,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Az összes üze
|
||||
# About menu
|
||||
###length 11
|
||||
STR_ABOUT_MENU_LAND_BLOCK_INFO :Terület-információ
|
||||
STR_ABOUT_MENU_HELP :Súgó és útmutatók
|
||||
STR_ABOUT_MENU_SEPARATOR :
|
||||
STR_ABOUT_MENU_TOGGLE_CONSOLE :Átváltás konzolra
|
||||
STR_ABOUT_MENU_AI_DEBUG :MI / Játékszkript nyomkövetés
|
||||
@@ -1109,6 +1113,13 @@ STR_GAME_OPTIONS_GUI_SCALE_3X :3x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_4X :4x
|
||||
STR_GAME_OPTIONS_GUI_SCALE_5X :5x
|
||||
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automata felmérés
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Részvétel automata felmérésben
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Ha engedélyezve van, az OpenTTD továbbít egy felmérést a játékból kilépéskor
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Felmérésről és titoktartásról
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Ezzel megnyithatsz egy oldalt a böngészőben ahol további információt érhetsz el az automata felmérésről.
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Felmérés eredményének előnézete
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Mutasd a jelenleg futó játékhoz tartozó felmérés eredményeit.
|
||||
|
||||
STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafika
|
||||
|
||||
@@ -1293,6 +1304,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Balra
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Középen
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Jobbra
|
||||
|
||||
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}másodperc{P 0 "" ek}
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximális kezdeti hitelkeret: {STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálisan kölcsönözhető összeg (az inflációtól eltekintve)
|
||||
@@ -1464,6 +1476,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :nincs*
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :csökkentett
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normál
|
||||
|
||||
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Más vállalat tulajdonában lévő utak és sínek egyszintű kereszteződésének engedélyezése: {STRING}
|
||||
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Engedélyezd más vállalat tulajdonában lévő utak és sínek egyszintű kereszteződésének építését
|
||||
|
||||
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Áthaladó megállóhelyek engedélyezése települési tulajdonú utakon: {STRING}
|
||||
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Áthaladó megállóhelyek építésének engedélyezése települési tulajdonú utakon
|
||||
@@ -1477,6 +1491,8 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Bekapcsolva az
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :A vállalat kezdő színsémája: {STRING}
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :A vállalat színsémája a játék kezdetén
|
||||
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Kezdő vállalat másodlagos színe: {STRING}
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Válassz egy másodlagos színt a vállalatnak, ha NewGRF-et használsz ami ezt lehetővé teszi.
|
||||
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Repülőterek nem avulnak el: {STRING}
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Bekapcsolva minden repülőtértípus örökké elérhető marad bevezetése után
|
||||
@@ -1679,6 +1695,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Kikapcsolva
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Ablakok bezárása jobb gombbal: {STRING}
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :A jobb gombbal való kattintás az ablak területén bezárja az ablakot. Ez a beállítás kikapcsolja a segédletek jobb gombbal való megjelenítését!
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Nem
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Igen
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Igen, a zároltakat kivéve
|
||||
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Játékmentés dátumformátuma: {STRING}
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :A játékmentésekben használt dátum formátuma
|
||||
@@ -2007,6 +2026,8 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Átlagos város
|
||||
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Kapcsolatgrafikon frissítése minden {STRING}{NBSP}másodpercben{P 0:2 "" s}
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :A kapcsolatgrafikon következő újrakalkulálása között eltelt idő. Minden újrakalkulálás során egy komponens tervei kerülnek kiszámításra. Ez azt jelenti, hogy az X érték beállítása nem jelenti azt, hogy az egész grafikon X másodpercenként frissül. Csak néhány komponens lesz frissítve. Minél rövidebbre van állítva, annál több CPU időre van szükség a kiszámításhoz. Ha hosszabbra van állítva, akkor hosszabb időbe telik, amíg az áruelosztás elkezdődik az új útvonalakon.
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :A kapcsolatgrafikon újrakalkulálására szánt idő, {STRING}
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :A kapcsolatgrafikon újrakalkulálására szánt idő. Egy újrakalkulálás megkezdésekor létrejön egy új szál ami ennyi másodpercig futhat. Minél rövidebbre állítod ezt a paramétert annál valószínűbb hogy a számítás nem készül el mire kellene. Ha ez megtörténik akkor a játék megáll amíg el nem készül a számítással ("laggol"). Minél hosszabbra állítod ezt az időt annál hosszabb idő telik el az útvonalak változása és az eloszlás frissítése között.
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Utasok szétosztása: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :A "Szimmetrikus" azt jelenti, hogy megközelítóleg ugyanannyi utas megy majd A-ból B-be, mint B-ből A-ba. Az "Aszimmetrikus" beállítás esetén a különbözö irányokba tetszőleges mennyiségű utas mehet. "Kézi" esetben az utasok nem lesznek automatikusan szétosztva.
|
||||
@@ -2139,6 +2160,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES}
|
||||
# Video initalization errors
|
||||
STR_VIDEO_DRIVER_ERROR :{WHITE}Hiba a videobeállításokban...
|
||||
STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... nem található kompatibilis GPU. Hardveres gyorsítás kikapcsolva.
|
||||
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... A videókártya illesztőprogram hibát okozott. Hardveres gyorsítás kikapcsolva
|
||||
|
||||
# Intro window
|
||||
STR_INTRO_CAPTION :{WHITE}OpenTTD {REV}
|
||||
@@ -2152,6 +2174,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Hálóza
|
||||
|
||||
STR_INTRO_GAME_OPTIONS :{BLACK}Alapbeállítások
|
||||
STR_INTRO_HIGHSCORE :{BLACK}Rekord tábla
|
||||
STR_INTRO_HELP :{BLACK}Súgó és útmutatók
|
||||
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Beállítások
|
||||
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF beállítások
|
||||
STR_INTRO_ONLINE_CONTENT :{BLACK}Letölthető tartalmak
|
||||
@@ -2173,6 +2196,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Játékv
|
||||
|
||||
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}A játék alapvető beállításainak (pl. nyelv, grafikus alapcsomag, stb.) megjelenítése
|
||||
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Rekord tábla megjelenítése
|
||||
STR_INTRO_TOOLTIP_HELP :{BLACK}Férj hozzá a dokumentációhoz és az online tartalmakhoz
|
||||
STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}A beállítások megjelenítése
|
||||
STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}NewGRF beállítások megjelenítése
|
||||
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Új és frissített tartalmak megtekintése és letöltése
|
||||
@@ -2195,6 +2219,14 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Biztosa
|
||||
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Biztosan abba akarod hagyni a pálya szerkesztését?
|
||||
|
||||
# Help window
|
||||
STR_HELP_WINDOW_CAPTION :{BLACK}Súgó és útmutatók
|
||||
STR_HELP_WINDOW_WEBSITES :{BLACK}Weboldalak
|
||||
STR_HELP_WINDOW_DOCUMENTS :{BLACK}Dokumentumok
|
||||
STR_HELP_WINDOW_CHANGELOG :{BLACK}Változtatások listája
|
||||
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Ismert hibák
|
||||
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Útmutató / Wiki
|
||||
STR_HELP_WINDOW_BUGTRACKER :{BLACK}Hiba jelentése
|
||||
STR_HELP_WINDOW_COMMUNITY :{BLACK}Közösség
|
||||
|
||||
# Cheat window
|
||||
STR_CHEATS :{WHITE}Csalások
|
||||
@@ -2471,6 +2503,12 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Nem
|
||||
STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Igen, most az egyszer
|
||||
STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Igen, ne kérdezd újra
|
||||
|
||||
STR_NETWORK_ASK_SURVEY_CAPTION :Részvétel automata felmérésben?
|
||||
STR_NETWORK_ASK_SURVEY_TEXT :Szeretnél részt venni az automata felmérésben?{}Az OpenTTD a játékból kilépéskor egy felmérést fog továbbítani.{}Ezt a beállítást bármikor megváltoztathatod a "Játék beállítások" menüpontban.
|
||||
STR_NETWORK_ASK_SURVEY_PREVIEW :Felmérés eredményének előnézete
|
||||
STR_NETWORK_ASK_SURVEY_LINK :Felmérésről és titoktartásról
|
||||
STR_NETWORK_ASK_SURVEY_NO :Nem
|
||||
STR_NETWORK_ASK_SURVEY_YES :Igen
|
||||
|
||||
STR_NETWORK_SPECTATORS :Megfigyelők
|
||||
|
||||
@@ -2677,6 +2715,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Építhe
|
||||
STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Hidak átlátszóságának bekapcsolása. Ctrl+kattintással zárolható
|
||||
STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Tereptárgyak (adótornyok, világítótornyok stb.) átlátszóságának bekapcsolása. Ctrl+kattintással zárolható
|
||||
STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Felsővezetékek átlátszóságának bekapcsolása. Ctrl+kattintással zárolható
|
||||
STR_TRANSPARENT_TEXT_TOOLTIP :BLACK}Töltő és ár/bevétel feliratok átlátszóságának bekapcsolása. Ctrl+kattintással zárolható
|
||||
STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Az objektum ne átlátszó legyen, hanem láthatatlan
|
||||
|
||||
# Linkgraph legend window
|
||||
@@ -3407,6 +3446,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Objektum
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} {HEX}-ban
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Objektum
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Pályatípus
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Út típus
|
||||
|
||||
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF változó 60+x paraméter (hexadecimális)
|
||||
|
||||
@@ -3813,6 +3853,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Részlet
|
||||
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Részletes információk megtekintése az infrastruktúráról
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Adományozz pénzt
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Utalj pénzt ennek a vállalatnak
|
||||
STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Erőszakos átvétel
|
||||
STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Vedd át erőszakkal a vállalat vezetését
|
||||
|
||||
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Új arc
|
||||
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Új arc választása az elnöknek
|
||||
@@ -3828,6 +3870,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Elnök neve
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Mennyi pénzt szeretnél adományozni?
|
||||
|
||||
STR_BUY_COMPANY_MESSAGE :{WHITE}Vállalatunk vagyontárgyait eladásra kínáljuk: járművek, terület és hálózat tulajdonok, bankszámla{}{}Megveszed {COMPANY} vállalatot {CURRENCY_LONG}-ért?
|
||||
STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}A {COMPANY} erőszakos átvételével megvásárolod minden vagyonát, visszafizeted minden adósságát és kifizeted 2 évi nyereségét.{}{}Mindezek becsült értéke {CURRENCY_LONG}.{}{}Biztosan folytatni akarod ezt az átvételt?
|
||||
|
||||
# Company infrastructure window
|
||||
STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}{COMPANY} infrastruktúrája
|
||||
@@ -3899,6 +3942,7 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Lista ke
|
||||
STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}A listán szereplő járműveknek utasítás küldése
|
||||
STR_VEHICLE_LIST_REPLACE_VEHICLES :Járművek lecserélése
|
||||
STR_VEHICLE_LIST_SEND_FOR_SERVICING :Javításra küld
|
||||
STR_VEHICLE_LIST_CREATE_GROUP :Csoport létrehozása
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Idei nyereség: {CURRENCY_LONG} (Tavalyi: {CURRENCY_LONG})
|
||||
STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}]
|
||||
STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING}
|
||||
@@ -4716,6 +4760,10 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
|
||||
|
||||
|
||||
# Textfile window
|
||||
STR_TEXTFILE_JUMPLIST :{WHITE}Tartalomjegyzék
|
||||
STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Ugrás egy fejezetre a jelenlegi fileban ezzel a listával
|
||||
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Lépj vissza a navigáció történetben
|
||||
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Lépj előre a navigáció történetben
|
||||
STR_TEXTFILE_WRAP_TEXT :{WHITE}Szöveg törése
|
||||
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Szöveg törése az ablakban, hogy minden kiférjen és ne kelljen görgetni
|
||||
STR_TEXTFILE_VIEW_README :{BLACK}Readme megtekintése
|
||||
@@ -4725,6 +4773,8 @@ STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licenc
|
||||
STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} {STRING} readme-je
|
||||
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}A(z) {STRING} {STRING} változásainak listája
|
||||
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}A(z) {STRING} {STRING} licence
|
||||
STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Felmérés eredményének előnézete
|
||||
STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD dokumentum '{STRING}'
|
||||
|
||||
|
||||
# Vehicle loading indicators
|
||||
@@ -4859,7 +4909,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... túl
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... túl közel van egy másik településhez
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... túl sok a település
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... nincs több hely a térképen
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}A település nem fog utakat építeni. Az útépítést a Haladó beállítások->Környezet->Települések menüben engedélyezheted
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Útkarbantartás folyamatban
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Nem törölheted ezt a várost...{}Egy állomás vagy járműtelep hivatkozik a városra, vagy egy városi tulajdonú mező nem eltávolítható
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... nincs megfelelő hely egy szobornak a város központjában
|
||||
|
@@ -4059,7 +4059,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... of n
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... of nálægt öðrum bæ
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... of margir bæir
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... það er ekkert laust svæði á kortinu
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Bærinn getur ekki lagt vegi. Því er hægt að breyta í Ítarlegar stillingar->Efnahagur->Bæir.
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Vegaframkvæmdir standa yfir
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Ekki hægt að eyða bæ...{}Stöð eða skýli vísar í þennan bæ eða ekki hægt að fjarlægja reit í eigu bæjarins.
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... það er enginn ákjósanlegur staður fyrir styttu í miðju þessa bæjar
|
||||
|
@@ -191,6 +191,9 @@ STR_COLOUR_WHITE :Putih
|
||||
STR_COLOUR_RANDOM :Acak
|
||||
|
||||
###length 17
|
||||
STR_COLOUR_SECONDARY_PALE_GREEN :Hijau Pucat
|
||||
STR_COLOUR_SECONDARY_SECONDARY_PINK :Merah Muda
|
||||
STR_COLOUR_SECONDARY_BROWN :Cokelat
|
||||
|
||||
|
||||
# Units used in OpenTTD
|
||||
@@ -506,6 +509,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Hapus semua pes
|
||||
# About menu
|
||||
###length 11
|
||||
STR_ABOUT_MENU_LAND_BLOCK_INFO :Informasi area daratan
|
||||
STR_ABOUT_MENU_HELP :Bantuan & panduan
|
||||
STR_ABOUT_MENU_SEPARATOR :
|
||||
STR_ABOUT_MENU_TOGGLE_CONSOLE :Hidup/matikan Layar Konsol
|
||||
STR_ABOUT_MENU_AI_DEBUG :Debug skrip AI/Permainan
|
||||
@@ -2091,6 +2095,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Multi Pe
|
||||
|
||||
STR_INTRO_GAME_OPTIONS :{BLACK}Pengaturan Permainan
|
||||
STR_INTRO_HIGHSCORE :{BLACK}Tabel Nilai Tertinggi
|
||||
STR_INTRO_HELP :{BLACK}Bantuan & Panduan
|
||||
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Pengaturan
|
||||
STR_INTRO_NEWGRF_SETTINGS :{BLACK}Pengaturan NewGRF
|
||||
STR_INTRO_ONLINE_CONTENT :{BLACK}Cari Konten Daring
|
||||
@@ -2134,6 +2139,9 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Apakah
|
||||
STR_ABANDON_SCENARIO_QUERY :{YELLOW}Apakah anda yakin untuk mengabaikan skenario ini ?
|
||||
|
||||
# Help window
|
||||
STR_HELP_WINDOW_WEBSITES :{BLACK}Situs web
|
||||
STR_HELP_WINDOW_DOCUMENTS :{BLACK}Dokumen
|
||||
STR_HELP_WINDOW_COMMUNITY :{BLACK}Komunitas
|
||||
|
||||
# Cheat window
|
||||
STR_CHEATS :{WHITE}Kode Curang
|
||||
@@ -3769,6 +3777,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nama Manajer
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Masukkan jumlah uang yang ingin anda berikan
|
||||
|
||||
STR_BUY_COMPANY_MESSAGE :{WHITE}Kami mencari perusahaan transporasi untuk mengambil alih perusahaan kami.{}{}Anda ingin membeli {COMPANY} senilai {CURRENCY_LONG}?
|
||||
STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Dengan mengambil alih {COMPANY} secara agresif, kamu akan membeli seluruh aset, membayarkan seluruh hutang, dan membayar profit selama dua tahun.{}{}Estimasi jumlahnya adalah {CURRENCY_LONG}.{}{}Apa kamu ingin melanjutkan pengambilalihan ini?
|
||||
|
||||
# Company infrastructure window
|
||||
STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastruktur milik {COMPANY}
|
||||
@@ -4601,8 +4610,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Salah sa
|
||||
STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Jendela "Debug" skrip AI hanya tersedia untuk server
|
||||
|
||||
# AI configuration window
|
||||
STR_AI_CONFIG_CAPTION_AI :{WHITE}Konfigurasi AI
|
||||
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Konfigurasi Game Script
|
||||
STR_AI_CONFIG_CAPTION_AI :{WHITE}Pengaturan AI
|
||||
STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Pengaturan Game Script
|
||||
STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Skrip Permainan yang akan di jalankan di permainan berikutnya
|
||||
STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI yg akan dijalankan pada permainan berikutnya
|
||||
STR_AI_CONFIG_HUMAN_PLAYER :Pemain Manusia
|
||||
@@ -4659,6 +4668,7 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
|
||||
|
||||
|
||||
# Textfile window
|
||||
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
|
||||
STR_TEXTFILE_WRAP_TEXT :{WHITE}Mengebatkan teks
|
||||
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Mengebatkan teks dari jendela sehingga akan muat tanpa menggulir
|
||||
STR_TEXTFILE_VIEW_README :{BLACK}Lihat readme
|
||||
@@ -4803,7 +4813,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... terl
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... terlalu dekat dengan kota lain
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... terlalu banyak kota
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... tidak ada lagi ruang tersisa dalam peta
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Kota tidak akan membangun jalan. Anda dapat mengaktifkan pembangunan jalan pada menu Pengaturan Lanjutan->Ekonomi->Kota
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Jalan sedang dikerjakan
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Tidak dapat menghancurkan kota ini...{}Suatu stasiun atau depo tergantung pada kota ini atau kotak milik kota tidak dapat dihapus
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... tidak ada tempat yang cocok untuk patung di tengah kota ini
|
||||
|
@@ -4670,7 +4670,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... rogh
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... roghearr do bhaile eile
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... an iomarca bailte
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... níl a thuilleadh spáis ar an léarscáil
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Ní thógfaidh an baile seo bóithre. Is féidir leat tógáil bóithre a chumasú in Ardsocruithe->Geilleagar->Bailte.
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Tá oibreacha bóthair ar bun
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Ní féidir an baile seo a scriosadh...{}Ní féidir stáisiún nó iosta atá ag tagairt don bhaile nó do thíle atá faoi úinéireacht an bhaile a bhaint
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... níl aon suíomh oiriúnach do dhealbh i lár an bhaile seo
|
||||
|
@@ -4907,7 +4907,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... trop
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... troppo vicino ad un'altra città
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... troppe città
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... non c'è altro spazio sulla mappa
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Alla città non è permesso costruire strade. È possibile abilitare la costruzione di strade in Impostazioni -> Ambiente -> Città
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Lavori stradali in corso
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Impossibile eliminare la città...{}Una stazione o un deposito fa ancora riferimento alla città o una casella di proprietà della città non può essere rimossa
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... non ci sono spazi adeguati per una statua nel centro di questa città
|
||||
|
@@ -4791,7 +4791,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}マッ
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}他の街に近すぎます
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}街数の制限を超えています
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}マップに空きスペースがありません
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}この街は自動では道路を敷設しません。「設定→環境→街」から道路の敷設を許可できます
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}道路補修工事中です
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}街を削除できません{}この街名を参照する停留施設・車庫か、街が所有するタイルが除去できません
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}街の中心部に像を建てるのに適した場所がありません
|
||||
|
@@ -4867,7 +4867,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... 지
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... 다른 도시와 너무 가깝습니다
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... 도시가 너무 많습니다
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... 지도에 더 이상 공간이 없습니다
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}도시가 도로를 짓지 않을 것입니다. [설정→환경→도시]에서 도로를 지을 수 있도록 설정을 변경하실 수 있습니다.
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}도로 작업이 진행 중입니다
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}이 도시를 삭제할 수 없습니다...{}도시나 도시 소유의 땅에 역, 정류장, 항구, 공항 또는 차량기지, 차고지, 정박소 등이 존재하면 도시를 삭제할 수 없습니다.
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... 이 도시의 중심에 동상을 세우기 적합한 장소가 없습니다
|
||||
|
@@ -4558,7 +4558,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... nimi
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... nimis prope aliud oppidum
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... nimis oppida adsunt
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... plus spatium tabulae deest
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Oppidum non vias struet. Potes hanc optionem mutare in Electionibus->Circumiecta->Oppida
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Constructio viaria agitur
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Non licet oppidum delere...{}Statio receptaculumve est oppido sive non licet tegulam oppidi removere
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... non est locus effigiei idoneus in medio oppidi
|
||||
|
@@ -4769,7 +4769,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... pār
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... pārāk tuvu citai pilsētai
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... pārāk daudz pilsētu
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... uz kartes nav vairāk vietas
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Pilsēta ceļus nebūvēs. Jūs varat ieslēgt ceļu būvi caur Papildu iestatījumi->Ekonomika->Pilsētas
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Notiek ceļa remonts
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Šo pilsētu nevar dzēst...{}Kāda stacija vai depo attiecas uz pilsētu. Vai pilsētai pieder nenoņemams lauciņš
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... šās pilsētas centrā statujai nav piemērotas vietas
|
||||
|
@@ -4964,7 +4964,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... per
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... per arti kito miesto
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... per daug miestų
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... daugiau nera vietos zemelapyje
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Miestas nestatys kelių. Jūs galite įjungti kelių statybą per „Išplėstinės nuostatos>Aplinka>Miestai“.
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Vyksta kelio darbai
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Negalima panaikinti šio miesto...{}Mieste yra stotelė arba depas, arba miestui priklausantis vienas iš laukelių negali būti pašalintas
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... nėra tinkamos vietos statulai šio miesto centre
|
||||
|
@@ -4762,7 +4762,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... ze n
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... ze no un enger anerer Stad
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... ze vill Stied
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... et ass keng Plaz méi op der Kaart
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Stied bauen keng Stroossen. Du kanns de Bau iwwert Astellungen->Economie->Stied aschalten
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Stroossenarbeschten amgaangen
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kann des Stad net läschen...{}Eng Statioun oder Schapp huet den Numm vun dëser Stad oder en Stéck dat der Stad gehéiert kann net ewechgeholl ginn
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... et gëtt keng gëeegent Plaz fir eng Statu am Stadzentrum
|
||||
|
@@ -3965,7 +3965,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... terl
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... terlalu hampir ke bandar lain
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... bandar terlalu banyak
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ruang tidak mencukupi di dalam peta
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Bandar ini tidak akan membina jalan. Anda boleh membenarkan pembinaan jalan melalui Tetapan Lanjutan->Ekonomi->Bandar
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Kerja-kerja jalanraya sedang berjalan
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Tidak boleh padam bandar ini...{}Tidak boleh dipadamkan kerana terdapat sebuah stesen atau depoh yang dipunyai bandar atau petak bandar
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... tiada lokasi sesuai untuk arca di tengah bandar
|
||||
|
@@ -4692,7 +4692,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}...{NBSP
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}...{NBSP}for nær en annen by
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}...{NBSP}for mange byer
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... det er ikke mer plass på kartet
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Byen kommer ikke til å bygge veier. Du kan aktivere bygging av veier via Innstillinger->Miljø->Byer
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Veiarbeid i gang
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan ikke fjerne denne byen...{}En stasjon eller garasje/stall/hangar/dokk henviser til byen eller en by-eid rute som ikke kan fjernes
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... det er ingen passende steder for en statue i sentrum av denne byen
|
||||
|
@@ -4194,7 +4194,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... for
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... for nær ein annan by
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... for mange byar
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... det er ikkje meir plass på kartet
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Byen byggjer ikkje vegar. Du kan tillete veg-bygging i Avanserte innstillingar -> Økonomi -> Byar
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Vegarbeid pågår
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan ikkje fjerne denne byen...{}Ein stasjon eller garasje/stall/hangar/dokk refererar til byen eller ei by-egd rute som ikkje kan fjernast
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... det er ingen passande plass til statue i sentrum av denne byen
|
||||
|
@@ -5252,7 +5252,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... zbyt
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... zbyt blisko innego miasta
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... zbyt wiele miast
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... nie ma więcej miejsca na mapie
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Miasto nie będzie budować dróg. Możesz zezwolić na budowę dróg poprzez Ustawienia->Środowisko->Miasta
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trwają roboty drogowe
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Nie można usunąć tego miasta...{}Stacja lub zajezdnia przynależy do tego miasta lub obszar miasta nie może być usunięty
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... w centrum tego miasta nie ma odpowiedniego miejsca na pomnik
|
||||
|
@@ -4867,7 +4867,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... muit
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... muito perto de outra localidade
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... demasiadas localidades
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não existe mais espaço no mapa
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}A localidade não construirá estradas. Pode-se permitir a construção de estradas por Opções Avançadas->Economia->Localidades
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabalhos na estrada em curso
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível eliminar esta localidade...{}Uma estação ou depósito refere-se à localidade ou não é possível remover terreno pertencente à mesma
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há um sítio adequado para uma estátua no centro desta localidade
|
||||
|
@@ -3399,6 +3399,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Analizea
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} la {HEX}
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Obiect
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tip şină
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tip de drum
|
||||
|
||||
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parametru variabilă 60+x NewGRF (hexadecimal)
|
||||
|
||||
@@ -4717,6 +4718,8 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN
|
||||
STR_TEXTFILE_JUMPLIST :{WHITE}Cuprins
|
||||
STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Săriți rapid la o secțiune din fișierul afișat prin această listă
|
||||
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
|
||||
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Reveniți în istoricul navigației
|
||||
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Reveniți înainte în istoricul navigației
|
||||
STR_TEXTFILE_WRAP_TEXT :{WHITE}Încadrează textul
|
||||
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Încadrează textul ferestrei ca să fie vizibil integral, fără derulare
|
||||
STR_TEXTFILE_VIEW_README :{BLACK}Vezi fișierul readme
|
||||
@@ -4862,7 +4865,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... prea
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... prea aproape de alt oraş
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... prea multe oraşe
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... nu mai este loc pe hartă
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Orașul nu va construi drumuri. Poți activa construirea drumurilor din Setări avansate -> Economie -> Orașe
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Lucrari la drum in curs de desfasurare
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Acest oraș nu poate fi șters...{}O stație sau un depou face referire la acest oraș, sau o parcelă deținută de oraș nu poate fi eliminată
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... nu există niciun loc potrivit pentru o statuie în centrul acestui oraș
|
||||
|
@@ -5053,7 +5053,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... сл
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... слишком близко к другому городу
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... слишком много городов
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... нет места на карте
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Города не будут строить дороги сами. Вы можете включить строительство дорог в разделе «Настройки -> Окр.{NBSP}среда -> Города».
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Идут дорожные работы...
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Невозможно уничтожить город:{}к нему относится станция или депо, либо невозможно очистить одну из занимаемых им клеток.
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... в центре города нет места для статуи
|
||||
|
@@ -4963,7 +4963,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... prev
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... drugo naselje je previše blizu
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... ima previše naselja
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... više ne postoji slobodnog prostora na terenu
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Naselje neće graditi kolovoze. Možete uključiti gradnju kolovoza preko Napredna Podešavanja->Okruženje->Naselja
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Putni radovi u toku
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Nije moguće obrisati naselje...{}Stanica ili depo na zemljištvu naselja se ne može ukloniti
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... ne postoji odgovarajuće mesto za spomenik u centru ovog naselja
|
||||
|
@@ -175,7 +175,7 @@ STR_COLOUR_DEFAULT :默认
|
||||
STR_COLOUR_DARK_BLUE :深蓝色
|
||||
STR_COLOUR_PALE_GREEN :浅绿色
|
||||
STR_COLOUR_PINK :粉红色
|
||||
STR_COLOUR_YELLOW :黄 色
|
||||
STR_COLOUR_YELLOW :黄 色
|
||||
STR_COLOUR_RED :红 色
|
||||
STR_COLOUR_LIGHT_BLUE :淡蓝色
|
||||
STR_COLOUR_GREEN :绿 色
|
||||
@@ -193,13 +193,13 @@ STR_COLOUR_RANDOM :随机
|
||||
###length 17
|
||||
STR_COLOUR_SECONDARY_DARK_BLUE :深蓝色
|
||||
STR_COLOUR_SECONDARY_PALE_GREEN :浅绿色
|
||||
STR_COLOUR_SECONDARY_SECONDARY_PINK :粉色
|
||||
STR_COLOUR_SECONDARY_YELLOW :黄 色
|
||||
STR_COLOUR_SECONDARY_RED :红 色
|
||||
STR_COLOUR_SECONDARY_SECONDARY_PINK :粉红色
|
||||
STR_COLOUR_SECONDARY_YELLOW :黄 色
|
||||
STR_COLOUR_SECONDARY_RED :红 色
|
||||
STR_COLOUR_SECONDARY_LIGHT_BLUE :淡蓝色
|
||||
STR_COLOUR_SECONDARY_GREEN :绿 色
|
||||
STR_COLOUR_SECONDARY_DARK_GREEN :深绿色
|
||||
STR_COLOUR_SECONDARY_BLUE :蓝 色
|
||||
STR_COLOUR_SECONDARY_BLUE :蓝 色
|
||||
STR_COLOUR_SECONDARY_CREAM :奶油色
|
||||
STR_COLOUR_SECONDARY_MAUVE :深紫色
|
||||
STR_COLOUR_SECONDARY_PURPLE :紫 色
|
||||
@@ -954,7 +954,7 @@ STR_GAME_OPTIONS_CAPTION :{WHITE}游戏
|
||||
|
||||
STR_GAME_OPTIONS_TAB_GENERAL :通用
|
||||
STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}选择通用设定
|
||||
STR_GAME_OPTIONS_TAB_GRAPHICS :图形包
|
||||
STR_GAME_OPTIONS_TAB_GRAPHICS :图像
|
||||
STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}选择图形组设定
|
||||
STR_GAME_OPTIONS_TAB_SOUND :音效
|
||||
STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}选择音乐和音效的设定
|
||||
@@ -2216,7 +2216,7 @@ STR_LIVERY_DIESEL :内燃机车
|
||||
STR_LIVERY_ELECTRIC :电力机车
|
||||
STR_LIVERY_MONORAIL :单轨机车
|
||||
STR_LIVERY_MAGLEV :磁悬浮机车
|
||||
STR_LIVERY_DMU :DMU 机车
|
||||
STR_LIVERY_DMU :内燃动车组
|
||||
STR_LIVERY_EMU :电力动车组
|
||||
STR_LIVERY_PASSENGER_WAGON_STEAM :客运机车(蒸汽)
|
||||
STR_LIVERY_PASSENGER_WAGON_DIESEL :客运机车(内燃机)
|
||||
@@ -4866,7 +4866,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}太靠
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}太靠近另一个城镇了
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}城镇太多了
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}地图上没有多余的地方了
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}城镇不会修建道路{}您可以在“设置->环境->城镇”选项下开启建设道路的功能
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}正在进行道路工程
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}无法删除城镇...{}城镇范围内还有车站、车库或无法移除的区块
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... 城市中心没有合适的地方放置公司塑像
|
||||
|
@@ -4880,7 +4880,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... prí
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... príliš blízko iného mesta
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... príliš veľa miest
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... nie je miesto na mape
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Mesto nebude stavať cesty. Môžete povoliť budovanie ciest cez Pokročilé nasvavenia->Ekonomika->Mestá.
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Prebiehajú cestné práce
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Toto mesto nie je možné odstrániť...{}Stanica alebo depo sa odvoláva na mesto, alebo parcela vo vlastníctve mesta nemôže byť odstránená
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... v centre mesta sa nenachádza žiadne vhodné miesto pre sochu
|
||||
|
@@ -4447,7 +4447,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... preb
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... preblizu drugemu mestu
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... preveliko število mest
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ni več prostora na zemljevidu
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Mesta ne bodo gradila cest. Lahko omogočiš gradnjo cest v Napredne nastavitve->Ekonomija->Mesta
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Cestna dela napredujejo
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Ni mogoče zbrisati mesta...{}Postaja ali garaža se nanaša na to mesto ali pa področje v lastnini mesta ne more biti odstranjeno
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... ni primernega mesta za kip v centru tega mesta
|
||||
|
@@ -4759,7 +4759,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... dema
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... demasiado cerca de otro municipio
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... demasiados municipios
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... no hay más espacio en el mapa
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}El municipio no construirá carreteras. Puedes activar la función de construcción de carreteras en Configuración->Ambiente->Municipios
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obras de carretera en progreso
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}No se puede borrar este municipio...{}Quedan estaciones o depósitos relacionados con él, o una propiedad suya no puede ser retirada
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... no existe un lugar apropiado para una estatua en el centro de este municipio
|
||||
|
@@ -4760,7 +4760,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... dema
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... demasiado cerca de otra localidad
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... demasiadas localidades
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ya no hay espacio en el mapa
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}La localidad no construirá carreteras. Se puede activar esta función en Configuración->Entorno->Localidades
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Obras de carretera en progreso
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}No se puede eliminar esta localidad...{}Aún tiene una estación o depósito, o una de sus casillas no se puede quitar
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... no hay lugar apto para una estatua en el centro de esta localidad
|
||||
|
@@ -4845,7 +4845,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... för
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... för nära en annan stad
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... för många städer
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... det finns ingen plats kvar på kartan
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Staden kommer inte bygga vägar. Du kan tillåta att staden bygger vägar via Inställningar->Miljö->Städer
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Vägarbete pågår
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kan inte ta bort den här staden...{}En station eller depå refererar till staden eller så kan inte en stadsägd ruta tas bort.
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... det finns ingen lämplig plats för en staty i stadens centrum
|
||||
|
@@ -4278,7 +4278,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... ப
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... மற்றொரு நகரத்திற்கு மிகவும் அருகாமையில் உள்ளது
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... மிகவும் அதிகமான நகரங்கள்
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... படத்தில் வேறு வெற்றுஇடம் இல்லை
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}நகராட்சி சாலைகளை அமைக்காது. இந்த அமைப்பினை மாற்ற செல்க சிறப்பு அமைப்புகள் -> பொருளாதாரம் -> நகரங்கள்
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}சாலைப் பணிகள் நடந்துக் கொண்டிருக்கின்றன
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}இந்த நகரத்தினை நீக்க இயலாது ...{} ஒரு நிலையமோ அல்லது பணிமனையோ நகரத்தின் பெயரில் உள்ளது மற்றும் நகரத்திற்குச் சொந்தமான கட்டங்களை நீக்க முடியாது.
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... நகரத்தின் நடுவில் சிலையினை அமைக்க தகுந்த இடமில்லை
|
||||
|
@@ -4411,7 +4411,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... ต
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... ใกล้กับเมืองอื่นมากเกินไป
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... มีเมืองมากเกินไป
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... มีพื้นที่บนแผนที่ไม่มากพอ
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}เมืองจะไม่สามารถสร้างถนนได้ในอนาคต. คุณสามารถเปิดใช้งานสร้างถนนของเมือง ใน Advanced Settings->Economy->Towns
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}กำลังอยู่ระหว่างการปรับปรุงถนน
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}ไม่สามารถทำลายเมืองได้{}สถานีหรือโรงเก็บนี้เป็นทรัพย์สินของเมืองไม่สามารถทำลายหรือเคลื่อนย้ายได้
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... ที่นี่ไม่มีสถานที่เหมาะสมในการสร้างอนุเสาวรีย์ในใจกลางเมือง
|
||||
|
@@ -191,6 +191,23 @@ STR_COLOUR_WHITE :白
|
||||
STR_COLOUR_RANDOM :隨機
|
||||
|
||||
###length 17
|
||||
STR_COLOUR_SECONDARY_DARK_BLUE :暗藍
|
||||
STR_COLOUR_SECONDARY_PALE_GREEN :淡綠
|
||||
STR_COLOUR_SECONDARY_SECONDARY_PINK :粉紅
|
||||
STR_COLOUR_SECONDARY_YELLOW :黃
|
||||
STR_COLOUR_SECONDARY_RED :紅
|
||||
STR_COLOUR_SECONDARY_LIGHT_BLUE :淺藍
|
||||
STR_COLOUR_SECONDARY_GREEN :綠
|
||||
STR_COLOUR_SECONDARY_DARK_GREEN :暗綠
|
||||
STR_COLOUR_SECONDARY_BLUE :藍
|
||||
STR_COLOUR_SECONDARY_CREAM :奶黃
|
||||
STR_COLOUR_SECONDARY_MAUVE :淡紫
|
||||
STR_COLOUR_SECONDARY_PURPLE :紫
|
||||
STR_COLOUR_SECONDARY_ORANGE :橙
|
||||
STR_COLOUR_SECONDARY_BROWN :棕
|
||||
STR_COLOUR_SECONDARY_GREY :灰
|
||||
STR_COLOUR_SECONDARY_WHITE :白
|
||||
STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :與主色調相同
|
||||
|
||||
|
||||
# Units used in OpenTTD
|
||||
@@ -198,6 +215,7 @@ STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}
|
||||
STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}公里/小時
|
||||
STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}米/秒
|
||||
STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}格/日
|
||||
STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}節
|
||||
|
||||
STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}匹
|
||||
STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}匹
|
||||
@@ -505,6 +523,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :刪除所有訊
|
||||
# About menu
|
||||
###length 11
|
||||
STR_ABOUT_MENU_LAND_BLOCK_INFO :土地資訊
|
||||
STR_ABOUT_MENU_HELP :幫助和手冊
|
||||
STR_ABOUT_MENU_SEPARATOR :
|
||||
STR_ABOUT_MENU_TOGGLE_CONSOLE :切換主控台
|
||||
STR_ABOUT_MENU_AI_DEBUG :AI/遊戲腳本除錯
|
||||
@@ -933,12 +952,26 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}將主
|
||||
# Game options window
|
||||
STR_GAME_OPTIONS_CAPTION :{WHITE}遊戲選項
|
||||
|
||||
STR_GAME_OPTIONS_TAB_GENERAL :基本
|
||||
STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}選擇基本設定
|
||||
STR_GAME_OPTIONS_TAB_GRAPHICS :圖形集
|
||||
STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}選擇圖形設定
|
||||
STR_GAME_OPTIONS_TAB_SOUND :音效
|
||||
|
||||
STR_GAME_OPTIONS_VOLUME :音量
|
||||
STR_GAME_OPTIONS_SFX_VOLUME :音效
|
||||
STR_GAME_OPTIONS_MUSIC_VOLUME :音樂
|
||||
|
||||
STR_GAME_OPTIONS_VOLUME_0 :0%
|
||||
STR_GAME_OPTIONS_VOLUME_25 :25%
|
||||
STR_GAME_OPTIONS_VOLUME_50 :50%
|
||||
STR_GAME_OPTIONS_VOLUME_75 :75%
|
||||
STR_GAME_OPTIONS_VOLUME_100 :100%
|
||||
|
||||
STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}幣值單位
|
||||
STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}選擇幣值單位
|
||||
|
||||
STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING})
|
||||
|
||||
###length 42
|
||||
STR_GAME_OPTIONS_CURRENCY_GBP :英鎊
|
||||
@@ -990,6 +1023,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}選擇
|
||||
# Autosave dropdown
|
||||
###length 5
|
||||
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :關閉
|
||||
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :每10分鐘
|
||||
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :每30分鐘
|
||||
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :每60分鐘
|
||||
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :每120分鐘
|
||||
|
||||
STR_GAME_OPTIONS_LANGUAGE :{BLACK}語言
|
||||
STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}選擇要用的介面語言
|
||||
@@ -1026,6 +1063,9 @@ STR_GAME_OPTIONS_GUI_SCALE_3X :3倍
|
||||
STR_GAME_OPTIONS_GUI_SCALE_4X :4倍
|
||||
STR_GAME_OPTIONS_GUI_SCALE_5X :5倍
|
||||
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}自動問卷
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}參與自動問卷
|
||||
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}關於問卷和隱私
|
||||
|
||||
STR_GAME_OPTIONS_GRAPHICS :{BLACK}圖形
|
||||
|
||||
@@ -1156,6 +1196,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}展開
|
||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}折疊所有選項
|
||||
STR_CONFIG_SETTING_RESET_ALL :{BLACK}重設所有數值
|
||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(沒有適用的解釋)
|
||||
STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR}
|
||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}預設值:{ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}設定種類:{ORANGE}{STRING}
|
||||
STR_CONFIG_SETTING_TYPE_CLIENT :用戶端設定 (存檔時不保存;影響所有遊戲)
|
||||
@@ -1209,6 +1250,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :靠左
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :置中
|
||||
STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :靠右
|
||||
|
||||
STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}秒
|
||||
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大貸款額:{STRING}
|
||||
STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最多可借多少錢(此設定的值排除了通貨膨脹因素)。
|
||||
@@ -1380,6 +1422,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :無
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :減少
|
||||
STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :正常
|
||||
|
||||
STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :可在競爭對手所有的道路或鐵路上建造平交道:{STRING}
|
||||
|
||||
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :可在市鎮所屬道路上建設路邊車站:{STRING}
|
||||
STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :容許在市鎮擁有的道路上建造直通型車站。
|
||||
@@ -1393,6 +1436,7 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :如啟用此選
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :初始公司顏色:{STRING}
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :選擇公司的初始顏色。
|
||||
|
||||
STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :初始公司副色調:{STRING}
|
||||
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :機場永不過期:{STRING}
|
||||
STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :如啟用此選項,所有機場一經面世,就永遠可以選擇建設。
|
||||
@@ -1595,6 +1639,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :無
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :右鍵關閉視窗:{STRING}
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :在視窗內以右鍵點擊可關閉視窗。可用右鍵關閉工具提示。
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :否
|
||||
STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :是
|
||||
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :使用 {STRING} 時間格式作為存檔檔名
|
||||
STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :在存檔的檔名中使用的日期格式。
|
||||
@@ -1921,6 +1967,7 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :無
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :初始城市規模倍率:{STRING}
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :設定遊戲開始時城市的大小 (相對於一般市鎮而言)。
|
||||
|
||||
STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :每{STRING}更新貨物分配圖
|
||||
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :乘客分配方式:{STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :設使有交通路線連接甲、乙兩站。「對稱」指甲站往乙站的乘客數量與乙站往甲站的乘客數量大致相同。「不對稱」指任何一站往另一站的乘客數量皆由系統隨意決定。「手動」指系統不會自動分配乘客的目的地。
|
||||
@@ -1947,12 +1994,14 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION :如果最短路
|
||||
STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :貨物分配功能在派送貨物時,會優先使用最短路徑,至其飽和後改用第二短的路徑,如此類推。當所有路徑皆飽和但仍未滿足需求,系統會由容量較大的路徑開始繼續加載貨物。{}由於路徑飽和度難以準確估算,此設定容許您定義一值,使短路徑達至該飽和度後,系統便開始加載容量較大的路徑。{}如果此設定的值少於100%,即使系統高估路徑容量,也不會使過多的貨物滯留車站。
|
||||
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度單位:{STRING}
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :速度單位(航海):{STRING}
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :在界面上以所選擇的單位表示速度。
|
||||
###length 5
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :英制(英里/小時)
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :米制(公里/小時)
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :國際單位(米/秒)
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :遊戲單位 (格/日)
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :節
|
||||
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :車輛功率單位:{STRING}
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :在界面上以所選擇的單位表示車輛的功率。
|
||||
@@ -2064,6 +2113,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}多人
|
||||
|
||||
STR_INTRO_GAME_OPTIONS :{BLACK}遊戲選項
|
||||
STR_INTRO_HIGHSCORE :{BLACK}積分排行榜
|
||||
STR_INTRO_HELP :{BLACK}幫助和手冊
|
||||
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}設定
|
||||
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF 設定
|
||||
STR_INTRO_ONLINE_CONTENT :{BLACK}檢查線上內容
|
||||
@@ -2107,6 +2157,16 @@ STR_ABANDON_GAME_QUERY :{YELLOW}你要
|
||||
STR_ABANDON_SCENARIO_QUERY :{YELLOW}你確定要離開這個場景嗎?
|
||||
|
||||
# Help window
|
||||
STR_HELP_WINDOW_CAPTION :{WHITE}幫助和手冊
|
||||
STR_HELP_WINDOW_WEBSITES :{BLACK}網站
|
||||
STR_HELP_WINDOW_DOCUMENTS :{BLACK}文檔
|
||||
STR_HELP_WINDOW_README :{BLACK}Readme
|
||||
STR_HELP_WINDOW_CHANGELOG :{BLACK}修訂紀錄
|
||||
STR_HELP_WINDOW_LICENSE :{BLACK}許可協議
|
||||
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
|
||||
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}手冊/維基
|
||||
STR_HELP_WINDOW_BUGTRACKER :{BLACK}回報漏洞
|
||||
STR_HELP_WINDOW_COMMUNITY :{BLACK}社區
|
||||
|
||||
# Cheat window
|
||||
STR_CHEATS :{WHITE}作弊
|
||||
@@ -2383,6 +2443,10 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}否
|
||||
STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}是,僅此一次
|
||||
STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}是,且不再詢問
|
||||
|
||||
STR_NETWORK_ASK_SURVEY_CAPTION :是否參與自動問卷?
|
||||
STR_NETWORK_ASK_SURVEY_LINK :關於問卷和隱私
|
||||
STR_NETWORK_ASK_SURVEY_NO :否
|
||||
STR_NETWORK_ASK_SURVEY_YES :是
|
||||
|
||||
STR_NETWORK_SPECTATORS :旁觀者
|
||||
|
||||
@@ -2673,7 +2737,9 @@ STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}選擇
|
||||
STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}選擇要興建的車站種類
|
||||
|
||||
STR_STATION_CLASS_DFLT :預設車站
|
||||
STR_STATION_CLASS_DFLT_STATION :預設車站
|
||||
STR_STATION_CLASS_WAYP :號誌站
|
||||
STR_STATION_CLASS_WAYP_WAYPOINT :預設號誌站
|
||||
|
||||
# Signal window
|
||||
STR_BUILD_SIGNAL_CAPTION :{WHITE}號誌選擇
|
||||
@@ -3316,6 +3382,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}檢查
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} 於 {HEX}
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :物件
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :鐵路種類
|
||||
STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :道路類型
|
||||
|
||||
STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x 參數(16 進位)
|
||||
|
||||
@@ -3722,6 +3789,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}詳情
|
||||
STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}顯示基礎建設數目的詳細資料
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}給予資金
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}將資金給予此公司
|
||||
STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}敵意收購
|
||||
|
||||
STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}新臉孔
|
||||
STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}選擇總經理的新臉孔
|
||||
@@ -3808,6 +3876,7 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}管理
|
||||
STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}向清單所有車輛發出指示
|
||||
STR_VEHICLE_LIST_REPLACE_VEHICLES :替換車輛
|
||||
STR_VEHICLE_LIST_SEND_FOR_SERVICING :送去維護
|
||||
STR_VEHICLE_LIST_CREATE_GROUP :建立群組
|
||||
STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}今年盈利:{CURRENCY_LONG} (去年盈利:{CURRENCY_LONG})
|
||||
|
||||
STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :送到機廠
|
||||
@@ -4528,6 +4597,8 @@ STR_TIMETABLE_EXPECTED :{BLACK}實際
|
||||
STR_TIMETABLE_SCHEDULED :{BLACK}表定時間
|
||||
STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}切換顯示 (根據實際情況的) 預期時間 或 表定時間
|
||||
|
||||
STR_TIMETABLE_ARRIVAL :到: {COLOUR}{DATE_TINY}
|
||||
STR_TIMETABLE_DEPARTURE :發: {COLOUR}{DATE_TINY}
|
||||
|
||||
|
||||
# Date window (for timetable)
|
||||
@@ -4571,6 +4642,7 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}下局
|
||||
STR_AI_CONFIG_HUMAN_PLAYER :人類玩家
|
||||
STR_AI_CONFIG_RANDOM_AI :隨機 AI
|
||||
STR_AI_CONFIG_NONE :(無)
|
||||
STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM}
|
||||
STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}競爭對手數目上限:{ORANGE}{COMMA}
|
||||
|
||||
STR_AI_CONFIG_MOVE_UP :{BLACK}向上移
|
||||
@@ -4621,6 +4693,8 @@ STR_AI_SETTINGS_SETTING :{STRING}:{ORA
|
||||
|
||||
|
||||
# Textfile window
|
||||
STR_TEXTFILE_JUMPLIST :{WHITE}目錄
|
||||
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
|
||||
STR_TEXTFILE_WRAP_TEXT :{WHITE}強迫文字換行
|
||||
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}強迫寬於視窗的文字自動換行
|
||||
STR_TEXTFILE_VIEW_README :{BLACK}檢視Readme
|
||||
@@ -4630,6 +4704,7 @@ STR_TEXTFILE_VIEW_LICENCE :{BLACK}授權
|
||||
STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}{STRING}的 Readme
|
||||
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING}{STRING}的修訂紀錄
|
||||
STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING}{STRING}的授權條款
|
||||
STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD 文檔 '{STRING}'
|
||||
|
||||
|
||||
# Vehicle loading indicators
|
||||
@@ -4764,7 +4839,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... 太
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... 太接近另一個市鎮
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... 已有太多市鎮
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... 地圖沒有足夠空間
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}市鎮不會自動興建道路。你可以在 [設定] -> [環境] -> [市鎮] 啟用市鎮自行興建道路的功能。
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}道路施工中
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}無法刪除此市鎮...{}市鎮範圍內還有車站或機廠或無法移除的區塊
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... 市中心沒有適合的空間建造雕像
|
||||
@@ -5086,6 +5160,7 @@ STR_ERROR_NO_BUOY :{WHITE}沒有
|
||||
STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}無法為車輛加入時刻表...
|
||||
STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}車輛只能在車站停靠等候
|
||||
STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}此車輛不會停靠此站
|
||||
STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... 時刻表並不完整
|
||||
|
||||
# Sign related errors
|
||||
STR_ERROR_TOO_MANY_SIGNS :{WHITE}... 已有太多標誌
|
||||
@@ -5565,17 +5640,21 @@ STR_VEHICLE_NAME :{VEHICLE}
|
||||
STR_WAYPOINT_NAME :{WAYPOINT}
|
||||
|
||||
STR_JUST_CARGO :{CARGO_LONG}
|
||||
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
|
||||
STR_JUST_CHECKMARK :{CHECKMARK}
|
||||
STR_JUST_COMMA :{COMMA}
|
||||
STR_JUST_CURRENCY_SHORT :{CURRENCY_SHORT}
|
||||
STR_JUST_CURRENCY_LONG :{CURRENCY_LONG}
|
||||
STR_JUST_CARGO_LIST :{CARGO_LIST}
|
||||
STR_JUST_DECIMAL :{DECIMAL}
|
||||
STR_JUST_INT :{NUM}
|
||||
STR_JUST_DATE_TINY :{DATE_TINY}
|
||||
STR_JUST_DATE_SHORT :{DATE_SHORT}
|
||||
STR_JUST_DATE_LONG :{DATE_LONG}
|
||||
STR_JUST_DATE_ISO :{DATE_ISO}
|
||||
STR_JUST_STRING :{STRING}
|
||||
STR_JUST_STRING1 :{STRING}
|
||||
STR_JUST_STRING2 :{STRING}
|
||||
STR_JUST_STRING_STRING :{STRING}{STRING}
|
||||
STR_JUST_RAW_STRING :{STRING}
|
||||
STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING}
|
||||
|
@@ -4866,7 +4866,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... hari
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... başka bir şehire çok yakın
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... çok fazla şehir var
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... haritada boş yer yok
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Kasaba yol yapmayacak. Yol yapımını Gelişmiş Ayarlar->Ekonomi->Şehirler'den etkinleştirebilirsiniz
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Yol çalışmaları
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Bu kasaba silinemiyor...{}Bir istasyon veya garaj kasabaya atıfta bulunuyor ya da bir kasaba karesi kaldırılamıyor
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... bu şehrin merkezinde heykel için uygun bir yer yok
|
||||
|
@@ -4924,7 +4924,6 @@ STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... на
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... надто близько до іншого міста
|
||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... забагато міст
|
||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... на карті немає вільного місця
|
||||
STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Місто не будуватиме дороги. Ви можете дозволити будівництво доріг через налаштування->Довкілля->Міста
|
||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Дорога ремонтується
|
||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Не можна видалити це місто...{}Станція або депо, що відносяться до міста або знаходяться на землі у власності міста, не можуть бути видалені
|
||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... немає придатного місця для статуї в центрі цього міста
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user