Merge branch 'master' into jgrpp
# Conflicts: # src/airport_gui.cpp # src/blitter/32bpp_optimized.cpp # src/blitter/32bpp_simple.cpp # src/blitter/32bpp_sse2.cpp # src/blitter/8bpp_optimized.cpp # src/blitter/8bpp_simple.cpp # src/blitter/null.cpp # src/build_vehicle_gui.cpp # src/company_gui.cpp # src/crashlog.cpp # src/dropdown.cpp # src/dropdown_type.h # src/genworld_gui.cpp # src/gfx.cpp # src/main_gui.cpp # src/newgrf_debug_gui.cpp # src/news_gui.cpp # src/news_type.h # src/openttd.cpp # src/order_gui.cpp # src/settings.cpp # src/settings_gui.cpp # src/signs.cpp # src/smallmap_gui.cpp # src/spritecache.cpp # src/spriteloader/grf.cpp # src/texteff.cpp # src/toolbar_gui.cpp # src/town_cmd.cpp # src/vehicle.cpp # src/vehicle_gui.cpp # src/video/opengl.cpp # src/viewport.cpp # src/waypoint_cmd.cpp # src/zoom_type.h
This commit is contained in:
@@ -148,6 +148,7 @@ add_files(
|
||||
driver.cpp
|
||||
driver.h
|
||||
dropdown.cpp
|
||||
dropdown_common_type.h
|
||||
dropdown_func.h
|
||||
dropdown_type.h
|
||||
economy.cpp
|
||||
|
@@ -23,6 +23,7 @@
|
||||
#include "newgrf_airport.h"
|
||||
#include "newgrf_callbacks.h"
|
||||
#include "dropdown_type.h"
|
||||
#include "dropdown_func.h"
|
||||
#include "core/geometry_func.hpp"
|
||||
#include "hotkeys.h"
|
||||
#include "vehicle_func.h"
|
||||
@@ -233,7 +234,7 @@ class BuildAirportWindow : public PickerWindowBase {
|
||||
DropDownList list;
|
||||
|
||||
for (uint i = 0; AirportClass::IsClassIDValid((AirportClassID)i); i++) {
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(AirportClass::Get((AirportClassID)i)->name, i, false));
|
||||
list.push_back(MakeDropDownListStringItem(AirportClass::Get((AirportClassID)i)->name, i, false));
|
||||
}
|
||||
|
||||
return list;
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include "core/geometry_func.hpp"
|
||||
#include "rail_gui.h"
|
||||
#include "road_gui.h"
|
||||
#include "dropdown_type.h"
|
||||
#include "dropdown_func.h"
|
||||
|
||||
#include "widgets/autoreplace_widget.h"
|
||||
@@ -562,8 +563,8 @@ public:
|
||||
|
||||
case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: {
|
||||
DropDownList list;
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_REPLACE_ENGINES, 1, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_REPLACE_WAGONS, 0, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_REPLACE_ENGINES, 1));
|
||||
list.push_back(MakeDropDownListStringItem(STR_REPLACE_WAGONS, 0));
|
||||
ShowDropDownList(this, std::move(list), this->replace_engines ? 1 : 0, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN);
|
||||
break;
|
||||
}
|
||||
|
@@ -317,9 +317,9 @@ template <bool Tpal_to_rgb> Sprite *Blitter_32bppOptimized::EncodeInternal(const
|
||||
ZoomLevel zoom_max;
|
||||
uint8_t missing_zoom_levels = 0;
|
||||
|
||||
if (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font) {
|
||||
zoom_min = ZOOM_LVL_NORMAL;
|
||||
zoom_max = ZOOM_LVL_NORMAL;
|
||||
if (sprite[ZOOM_LVL_MIN].type == SpriteType::Font) {
|
||||
zoom_min = ZOOM_LVL_MIN;
|
||||
zoom_max = ZOOM_LVL_MIN;
|
||||
} else {
|
||||
zoom_min = _settings_client.gui.zoom_min;
|
||||
zoom_max = (ZoomLevel) std::min(_settings_client.gui.zoom_max, ZOOM_LVL_DRAW_SPR);
|
||||
@@ -478,10 +478,10 @@ template <bool Tpal_to_rgb> Sprite *Blitter_32bppOptimized::EncodeInternal(const
|
||||
missing_zoom_levels = UINT8_MAX;
|
||||
}
|
||||
|
||||
dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs;
|
||||
dest_sprite->height = sprite[ZOOM_LVL_MIN].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_MIN].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs;
|
||||
dest_sprite->next = nullptr;
|
||||
dest_sprite->missing_zoom_levels = missing_zoom_levels;
|
||||
|
||||
|
@@ -137,19 +137,19 @@ void Blitter_32bppSimple::DrawColourMappingRect(void *dst, int width, int height
|
||||
Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator)
|
||||
{
|
||||
Blitter_32bppSimple::Pixel *dst;
|
||||
Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_NORMAL].height * (size_t)sprite[ZOOM_LVL_NORMAL].width * sizeof(*dst));
|
||||
Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_MIN].height * (size_t)sprite[ZOOM_LVL_MIN].width * sizeof(*dst));
|
||||
|
||||
dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs;
|
||||
dest_sprite->height = sprite[ZOOM_LVL_MIN].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_MIN].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs;
|
||||
dest_sprite->next = nullptr;
|
||||
dest_sprite->missing_zoom_levels = 0;
|
||||
|
||||
dst = (Blitter_32bppSimple::Pixel *)dest_sprite->data;
|
||||
SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite[ZOOM_LVL_NORMAL].data;
|
||||
SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite[ZOOM_LVL_MIN].data;
|
||||
|
||||
for (int i = 0; i < sprite[ZOOM_LVL_NORMAL].height * sprite[ZOOM_LVL_NORMAL].width; i++) {
|
||||
for (int i = 0; i < sprite[ZOOM_LVL_MIN].height * sprite[ZOOM_LVL_MIN].width; i++) {
|
||||
if (src->m == 0) {
|
||||
dst[i].r = src->r;
|
||||
dst[i].g = src->g;
|
||||
|
@@ -26,10 +26,10 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &spri
|
||||
* Second uint32_t of a line = the number of transparent pixels from the right.
|
||||
* Then all RGBA then all MV.
|
||||
*/
|
||||
ZoomLevel zoom_min = ZOOM_LVL_NORMAL;
|
||||
ZoomLevel zoom_max = ZOOM_LVL_NORMAL;
|
||||
ZoomLevel zoom_min = ZOOM_LVL_MIN;
|
||||
ZoomLevel zoom_max = ZOOM_LVL_MIN;
|
||||
uint8_t missing_zoom_levels = 0;
|
||||
if (sprite[ZOOM_LVL_NORMAL].type != SpriteType::Font) {
|
||||
if (sprite[ZOOM_LVL_MIN].type != SpriteType::Font) {
|
||||
zoom_min = _settings_client.gui.zoom_min;
|
||||
zoom_max = (ZoomLevel) std::min(_settings_client.gui.zoom_max, ZOOM_LVL_DRAW_SPR);
|
||||
if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_DRAW_SPR;
|
||||
@@ -62,10 +62,10 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &spri
|
||||
}
|
||||
|
||||
Sprite *dst_sprite = (Sprite *) allocator(sizeof(Sprite) + sizeof(SpriteData) + all_sprites_size);
|
||||
dst_sprite->height = sprite[ZOOM_LVL_NORMAL].height;
|
||||
dst_sprite->width = sprite[ZOOM_LVL_NORMAL].width;
|
||||
dst_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs;
|
||||
dst_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs;
|
||||
dst_sprite->height = sprite[ZOOM_LVL_MIN].height;
|
||||
dst_sprite->width = sprite[ZOOM_LVL_MIN].width;
|
||||
dst_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs;
|
||||
dst_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs;
|
||||
dst_sprite->next = nullptr;
|
||||
dst_sprite->missing_zoom_levels = missing_zoom_levels;
|
||||
memcpy(dst_sprite->data, &sd, sizeof(SpriteData));
|
||||
|
@@ -28,7 +28,7 @@
|
||||
#endif
|
||||
|
||||
#define META_LENGTH 2 ///< Number of uint32_t inserted before each line of pixels in a sprite.
|
||||
#define MARGIN_NORMAL_THRESHOLD (zoom == ZOOM_LVL_OUT_32X ? 8 : 4) ///< Minimum width to use margins with BM_NORMAL.
|
||||
#define MARGIN_NORMAL_THRESHOLD (zoom == ZOOM_LVL_OUT_8X ? 8 : 4) ///< Minimum width to use margins with BM_NORMAL.
|
||||
#define MARGIN_REMAP_THRESHOLD 4 ///< Minimum width to use margins with BM_COLOUR_REMAP.
|
||||
|
||||
#undef ALIGN
|
||||
|
@@ -129,9 +129,9 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &spri
|
||||
ZoomLevel zoom_min;
|
||||
ZoomLevel zoom_max;
|
||||
|
||||
if (sprite[ZOOM_LVL_NORMAL].type == SpriteType::Font) {
|
||||
zoom_min = ZOOM_LVL_NORMAL;
|
||||
zoom_max = ZOOM_LVL_NORMAL;
|
||||
if (sprite[ZOOM_LVL_MIN].type == SpriteType::Font) {
|
||||
zoom_min = ZOOM_LVL_MIN;
|
||||
zoom_max = ZOOM_LVL_MIN;
|
||||
} else {
|
||||
zoom_min = _settings_client.gui.zoom_min;
|
||||
zoom_max = (ZoomLevel) std::min(_settings_client.gui.zoom_max, ZOOM_LVL_DRAW_SPR);
|
||||
@@ -222,10 +222,10 @@ Sprite *Blitter_8bppOptimized::Encode(const SpriteLoader::SpriteCollection &spri
|
||||
/* Allocate the exact amount of memory we need */
|
||||
Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + size);
|
||||
|
||||
dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs;
|
||||
dest_sprite->height = sprite[ZOOM_LVL_MIN].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_MIN].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs;
|
||||
dest_sprite->next = nullptr;
|
||||
dest_sprite->missing_zoom_levels = 0;
|
||||
memcpy(dest_sprite->data, temp_dst, size);
|
||||
|
@@ -65,18 +65,18 @@ void Blitter_8bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, Zoom
|
||||
Sprite *Blitter_8bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator)
|
||||
{
|
||||
Sprite *dest_sprite;
|
||||
dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_NORMAL].height * (size_t)sprite[ZOOM_LVL_NORMAL].width);
|
||||
dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_MIN].height * (size_t)sprite[ZOOM_LVL_MIN].width);
|
||||
|
||||
dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs;
|
||||
dest_sprite->height = sprite[ZOOM_LVL_MIN].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_MIN].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs;
|
||||
dest_sprite->next = nullptr;
|
||||
dest_sprite->missing_zoom_levels = 0;
|
||||
|
||||
/* Copy over only the 'remap' channel, as that is what we care about in 8bpp */
|
||||
for (int i = 0; i < sprite[ZOOM_LVL_NORMAL].height * sprite[ZOOM_LVL_NORMAL].width; i++) {
|
||||
dest_sprite->data[i] = sprite[ZOOM_LVL_NORMAL].data[i].m;
|
||||
for (int i = 0; i < sprite[ZOOM_LVL_MIN].height * sprite[ZOOM_LVL_MIN].width; i++) {
|
||||
dest_sprite->data[i] = sprite[ZOOM_LVL_MIN].data[i].m;
|
||||
}
|
||||
|
||||
return dest_sprite;
|
||||
|
@@ -94,7 +94,7 @@ public:
|
||||
* @param name the blitter to select.
|
||||
* @post Sets the blitter so GetCurrentBlitter() returns it too.
|
||||
*/
|
||||
static Blitter *SelectBlitter(const std::string &name)
|
||||
static Blitter *SelectBlitter(const std::string_view name)
|
||||
{
|
||||
BlitterFactory *b = GetBlitterFactory(name);
|
||||
if (b == nullptr) return nullptr;
|
||||
@@ -112,17 +112,17 @@ public:
|
||||
* @param name the blitter factory to select.
|
||||
* @return The blitter factory, or nullptr when there isn't one with the wanted name.
|
||||
*/
|
||||
static BlitterFactory *GetBlitterFactory(const std::string &name)
|
||||
static BlitterFactory *GetBlitterFactory(const std::string_view name)
|
||||
{
|
||||
#if defined(DEDICATED)
|
||||
const char *default_blitter = "null";
|
||||
const std::string_view default_blitter = "null";
|
||||
#elif defined(WITH_COCOA)
|
||||
const char *default_blitter = "32bpp-anim";
|
||||
const std::string_view default_blitter = "32bpp-anim";
|
||||
#else
|
||||
const char *default_blitter = "8bpp-optimized";
|
||||
const std::string_view default_blitter = "8bpp-optimized";
|
||||
#endif
|
||||
if (GetBlitters().empty()) return nullptr;
|
||||
const char *bname = name.empty() ? default_blitter : name.c_str();
|
||||
const std::string_view bname = name.empty() ? default_blitter : name;
|
||||
|
||||
for (auto &it : GetBlitters()) {
|
||||
BlitterFactory *b = it.second;
|
||||
|
@@ -20,10 +20,10 @@ Sprite *Blitter_Null::Encode(const SpriteLoader::SpriteCollection &sprite, Alloc
|
||||
Sprite *dest_sprite;
|
||||
dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite));
|
||||
|
||||
dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs;
|
||||
dest_sprite->height = sprite[ZOOM_LVL_MIN].height;
|
||||
dest_sprite->width = sprite[ZOOM_LVL_MIN].width;
|
||||
dest_sprite->x_offs = sprite[ZOOM_LVL_MIN].x_offs;
|
||||
dest_sprite->y_offs = sprite[ZOOM_LVL_MIN].y_offs;
|
||||
dest_sprite->next = nullptr;
|
||||
dest_sprite->missing_zoom_levels = 0;
|
||||
|
||||
|
@@ -25,6 +25,7 @@
|
||||
#include "window_func.h"
|
||||
#include "date_func.h"
|
||||
#include "vehicle_func.h"
|
||||
#include "dropdown_type.h"
|
||||
#include "dropdown_func.h"
|
||||
#include "engine_gui.h"
|
||||
#include "cargotype.h"
|
||||
@@ -1408,23 +1409,23 @@ struct BuildVehicleWindowBase : Window {
|
||||
DropDownList list;
|
||||
|
||||
/* Add item for disabling filtering. */
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY, false));
|
||||
list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY, false));
|
||||
/* Specific filters for trains. */
|
||||
if (this->vehicle_type == VEH_TRAIN) {
|
||||
if (!hide_engines) {
|
||||
/* Add item for locomotives only in case of trains. */
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ENGINES), CargoFilterCriteria::CF_ENGINES, false));
|
||||
list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ENGINES), CargoFilterCriteria::CF_ENGINES, false));
|
||||
}
|
||||
|
||||
/* Add item for vehicles not carrying anything, e.g. train engines.
|
||||
* This could also be useful for eyecandy vehicles of other types, but is likely too confusing for joe, */
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE, false));
|
||||
list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE, false));
|
||||
}
|
||||
|
||||
/* Add cargos */
|
||||
Dimension d = GetLargestCargoIconSize();
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
list.push_back(std::make_unique<DropDownListIconItem>(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false));
|
||||
list.push_back(MakeDropDownListIconItem(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false));
|
||||
}
|
||||
|
||||
return list;
|
||||
|
@@ -173,7 +173,7 @@ static void DrawTile_Clear(TileInfo *ti, DrawTileProcParams params)
|
||||
break;
|
||||
|
||||
case CLEAR_FIELDS:
|
||||
if (params.min_visible_height <= 4 * ZOOM_LVL_BASE) {
|
||||
if (params.min_visible_height <= (4 * ZOOM_BASE)) {
|
||||
DrawGroundSprite(GetSpriteIDForFields(ti->tileh, GetFieldType(ti->tile)), PAL_NONE);
|
||||
DrawClearLandFence(ti);
|
||||
}
|
||||
|
@@ -1346,6 +1346,7 @@ CommandCost CmdRenamePresident(TileIndex tile, DoCommandFlag flags, uint32_t p1,
|
||||
}
|
||||
}
|
||||
|
||||
InvalidateWindowClassesData(WC_COMPANY, 1);
|
||||
MarkWholeScreenDirty();
|
||||
CompanyAdminUpdate(c);
|
||||
}
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include "strings_func.h"
|
||||
#include "date_func.h"
|
||||
#include "dropdown_type.h"
|
||||
#include "dropdown_common_type.h"
|
||||
#include "tilehighlight_func.h"
|
||||
#include "company_base.h"
|
||||
#include "core/geometry_func.hpp"
|
||||
@@ -592,26 +593,6 @@ void ShowCompanyFinances(CompanyID company)
|
||||
new CompanyFinancesWindow(&_company_finances_desc, company);
|
||||
}
|
||||
|
||||
/* List of colours for the livery window */
|
||||
static const StringID _colour_dropdown[] = {
|
||||
STR_COLOUR_DARK_BLUE,
|
||||
STR_COLOUR_PALE_GREEN,
|
||||
STR_COLOUR_PINK,
|
||||
STR_COLOUR_YELLOW,
|
||||
STR_COLOUR_RED,
|
||||
STR_COLOUR_LIGHT_BLUE,
|
||||
STR_COLOUR_GREEN,
|
||||
STR_COLOUR_DARK_GREEN,
|
||||
STR_COLOUR_BLUE,
|
||||
STR_COLOUR_CREAM,
|
||||
STR_COLOUR_MAUVE,
|
||||
STR_COLOUR_PURPLE,
|
||||
STR_COLOUR_ORANGE,
|
||||
STR_COLOUR_BROWN,
|
||||
STR_COLOUR_GREY,
|
||||
STR_COLOUR_WHITE,
|
||||
};
|
||||
|
||||
/* Association of liveries to livery classes */
|
||||
static const LiveryClass _livery_class[LS_END] = {
|
||||
LC_OTHER,
|
||||
@@ -629,7 +610,7 @@ static const LiveryClass _livery_class[LS_END] = {
|
||||
template <SpriteID TSprite = SPR_SQUARE>
|
||||
class DropDownListColourItem : public DropDownIcon<DropDownString<DropDownListItem>> {
|
||||
public:
|
||||
DropDownListColourItem(int colour, bool masked) : DropDownIcon<DropDownString<DropDownListItem>>(TSprite, GENERAL_SPRITE_COLOUR(colour % COLOUR_END), colour < COLOUR_END ? _colour_dropdown[colour] : STR_COLOUR_DEFAULT, colour, masked)
|
||||
DropDownListColourItem(int colour, bool masked) : DropDownIcon<DropDownString<DropDownListItem>>(TSprite, GENERAL_SPRITE_COLOUR(colour % COLOUR_END), colour < COLOUR_END ? (STR_COLOUR_DARK_BLUE + colour) : STR_COLOUR_DEFAULT, colour, masked)
|
||||
{
|
||||
}
|
||||
};
|
||||
@@ -687,8 +668,8 @@ private:
|
||||
default_col = (primary ? default_livery->colour1 : default_livery->colour2) + COLOUR_END;
|
||||
list.push_back(std::make_unique<DropDownListColourItem<>>(default_col, false));
|
||||
}
|
||||
for (uint i = 0; i < lengthof(_colour_dropdown); i++) {
|
||||
list.push_back(std::make_unique<DropDownListColourItem<>>(i, HasBit(used_colours, i)));
|
||||
for (Colours colour = COLOUR_BEGIN; colour != COLOUR_END; colour++) {
|
||||
list.push_back(std::make_unique<DropDownListColourItem<>>(colour, HasBit(used_colours, colour)));
|
||||
}
|
||||
|
||||
uint8_t sel;
|
||||
@@ -823,8 +804,8 @@ public:
|
||||
case WID_SCL_PRI_COL_DROPDOWN: {
|
||||
this->square = GetSpriteSize(SPR_SQUARE);
|
||||
int string_padding = this->square.width + WidgetDimensions::scaled.hsep_normal + padding.width;
|
||||
for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) {
|
||||
size->width = std::max(size->width, GetStringBoundingBox(*id).width + string_padding);
|
||||
for (Colours colour = COLOUR_BEGIN; colour != COLOUR_END; colour++) {
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DARK_BLUE + colour).width + string_padding);
|
||||
}
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + string_padding);
|
||||
break;
|
||||
@@ -2585,6 +2566,14 @@ struct CompanyWindow : Window
|
||||
}
|
||||
}
|
||||
|
||||
void OnResize() override
|
||||
{
|
||||
NWidgetResizeBase *wid = this->GetWidget<NWidgetResizeBase>(WID_C_FACE_TITLE);
|
||||
SetDParam(0, this->owner);
|
||||
int y = GetStringHeight(STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE, wid->current_x);
|
||||
if (wid->UpdateVerticalSize(y)) this->ReInit(0, 0);
|
||||
}
|
||||
|
||||
void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
|
||||
{
|
||||
switch (widget) {
|
||||
@@ -2728,7 +2717,6 @@ struct CompanyWindow : Window
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Some data on this window has become invalid.
|
||||
* @param data Information about the changed data.
|
||||
@@ -2736,8 +2724,7 @@ struct CompanyWindow : Window
|
||||
*/
|
||||
void OnInvalidateData(int data = 0, bool gui_scope = true) override
|
||||
{
|
||||
if (this->window_number == _local_company) return;
|
||||
|
||||
if (this->window_number != _local_company) {
|
||||
if (_settings_game.economy.allow_shares) { // Shares are allowed
|
||||
const Company *c = Company::Get(this->window_number);
|
||||
|
||||
@@ -2757,6 +2744,12 @@ struct CompanyWindow : Window
|
||||
this->DisableWidget(WID_C_SELL_SHARE);
|
||||
}
|
||||
}
|
||||
|
||||
if (gui_scope && data == 1) {
|
||||
/* Manually call OnResize to adjust minimum height of president name widget. */
|
||||
OnResize();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static WindowDesc _company_desc(__FILE__, __LINE__,
|
||||
|
@@ -498,19 +498,17 @@ char *CrashLog::LogGamelog(char *buffer, const char *last) const
|
||||
*/
|
||||
char *CrashLog::LogRecentNews(char *buffer, const char *last) const
|
||||
{
|
||||
uint total = 0;
|
||||
for (NewsItem *news = _latest_news; news != nullptr; news = news->prev) {
|
||||
total++;
|
||||
}
|
||||
uint total = static_cast<uint>(GetNews().size());
|
||||
uint show = std::min<uint>(total, 32);
|
||||
buffer += seprintf(buffer, last, "Recent news messages (%u of %u):\n", show, total);
|
||||
|
||||
int i = 0;
|
||||
for (NewsItem *news = _latest_news; i < 32 && news != nullptr; news = news->prev, i++) {
|
||||
CalTime::YearMonthDay ymd = CalTime::ConvertDateToYMD(news->date);
|
||||
for (const auto &news : GetNews()) {
|
||||
CalTime::YearMonthDay ymd = CalTime::ConvertDateToYMD(news.date);
|
||||
buffer += seprintf(buffer, last, "(%i-%02i-%02i) StringID: %u, Type: %u, Ref1: %u, %u, Ref2: %u, %u\n",
|
||||
ymd.year.base(), ymd.month + 1, ymd.day, news->string_id, news->type,
|
||||
news->reftype1, news->ref1, news->reftype2, news->ref2);
|
||||
ymd.year.base(), ymd.month + 1, ymd.day, news.string_id, news.type,
|
||||
news.reftype1, news.ref1, news.reftype2, news.ref2);
|
||||
if (++i > 32) break;
|
||||
}
|
||||
buffer += seprintf(buffer, last, "\n");
|
||||
return buffer;
|
||||
|
@@ -16,6 +16,7 @@
|
||||
#include "core/geometry_func.hpp"
|
||||
#include "settings_type.h"
|
||||
#include "dropdown_type.h"
|
||||
#include "dropdown_func.h"
|
||||
|
||||
#include "widgets/date_widget.h"
|
||||
|
||||
@@ -81,14 +82,14 @@ struct SetDateWindow : Window {
|
||||
|
||||
case WID_SD_DAY:
|
||||
for (uint i = 0; i < 31; i++) {
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_DAY_NUMBER_1ST + i, i + 1, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_DAY_NUMBER_1ST + i, i + 1));
|
||||
}
|
||||
selected = this->date.day;
|
||||
break;
|
||||
|
||||
case WID_SD_MONTH:
|
||||
for (uint i = 0; i < 12; i++) {
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_MONTH_JAN + i, i, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_MONTH_JAN + i, i));
|
||||
}
|
||||
selected = this->date.month;
|
||||
break;
|
||||
@@ -96,7 +97,7 @@ struct SetDateWindow : Window {
|
||||
case WID_SD_YEAR:
|
||||
for (EconTime::Year i = this->min_year; i <= this->max_year; i++) {
|
||||
SetDParam(0, i);
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_JUST_INT, i.base(), false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_JUST_INT, i.base()));
|
||||
}
|
||||
selected = this->date.year.base();
|
||||
break;
|
||||
@@ -206,7 +207,7 @@ struct SetMinutesWindow : SetDateWindow
|
||||
case WID_SD_DAY:
|
||||
for (uint i = 0; i < 60; i++) {
|
||||
SetDParam(0, i);
|
||||
list.emplace_back(new DropDownListStringItem(STR_JUST_INT, i, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_JUST_INT, i, false));
|
||||
}
|
||||
selected = this->minutes.ClockMinute();
|
||||
break;
|
||||
@@ -214,7 +215,7 @@ struct SetMinutesWindow : SetDateWindow
|
||||
case WID_SD_MONTH:
|
||||
for (uint i = 0; i < 24; i++) {
|
||||
SetDParam(0, i);
|
||||
list.emplace_back(new DropDownListStringItem(STR_JUST_INT, i, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_JUST_INT, i, false));
|
||||
}
|
||||
selected = this->minutes.ClockHour();
|
||||
|
||||
|
@@ -8,18 +8,49 @@
|
||||
/** @file dropdown.cpp Implementation of the dropdown widget. */
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "window_gui.h"
|
||||
#include "dropdown_type.h"
|
||||
#include "dropdown_func.h"
|
||||
#include "dropdown_common_type.h"
|
||||
#include "string_func.h"
|
||||
#include "strings_func.h"
|
||||
#include "window_gui.h"
|
||||
#include "window_func.h"
|
||||
#include "guitimer_func.h"
|
||||
#include "zoom_func.h"
|
||||
#include "dropdown_type.h"
|
||||
|
||||
#include "widgets/dropdown_widget.h"
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListDividerItem()
|
||||
{
|
||||
return std::make_unique<DropDownListDividerItem>(-1);
|
||||
}
|
||||
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListStringItem(StringID str, int value, bool masked, bool shaded)
|
||||
{
|
||||
return std::make_unique<DropDownListStringItem>(str, value, masked, shaded);
|
||||
}
|
||||
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListStringItem(const std::string &str, int value, bool masked, bool shaded)
|
||||
{
|
||||
return std::make_unique<DropDownListStringItem>(str, value, masked, shaded);
|
||||
}
|
||||
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListIconItem(SpriteID sprite, PaletteID palette, StringID str, int value, bool masked, bool shaded)
|
||||
{
|
||||
return std::make_unique<DropDownListIconItem>(sprite, palette, str, value, masked, shaded);
|
||||
}
|
||||
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListIconItem(const Dimension &dim, SpriteID sprite, PaletteID palette, StringID str, int value, bool masked, bool shaded)
|
||||
{
|
||||
return std::make_unique<DropDownListIconItem>(dim, sprite, palette, str, value, masked, shaded);
|
||||
}
|
||||
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListCheckedItem(bool checked, StringID str, int value, bool masked, bool shaded)
|
||||
{
|
||||
return std::make_unique<DropDownListCheckedItem>(checked, str, value, masked, shaded);
|
||||
}
|
||||
|
||||
static constexpr NWidgetPart _nested_dropdown_menu_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
@@ -451,7 +482,7 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, WidgetID
|
||||
|
||||
for (uint i = 0; strings[i] != INVALID_STRING_ID; i++) {
|
||||
if (i >= 32 || !HasBit(hidden_mask, i)) {
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(strings[i], i, i < 32 && HasBit(disabled_mask, i)));
|
||||
list.push_back(MakeDropDownListStringItem(strings[i], i, i < 32 && HasBit(disabled_mask, i)));
|
||||
}
|
||||
}
|
||||
|
||||
|
180
src/dropdown_common_type.h
Normal file
180
src/dropdown_common_type.h
Normal file
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* This file is part of OpenTTD.
|
||||
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** @file dropdown_common_type.h Common drop down list components. */
|
||||
|
||||
#ifndef DROPDOWN_COMMON_TYPE_H
|
||||
#define DROPDOWN_COMMON_TYPE_H
|
||||
|
||||
#include "gfx_func.h"
|
||||
#include "gfx_type.h"
|
||||
#include "palette_func.h"
|
||||
#include "string_func.h"
|
||||
#include "strings_func.h"
|
||||
#include "table/strings.h"
|
||||
#include "window_gui.h"
|
||||
|
||||
/**
|
||||
* Drop down divider component.
|
||||
* @tparam TBase Base component.
|
||||
* @tparam TFs Font size -- used to determine height.
|
||||
*/
|
||||
template <class TBase, FontSize TFs = FS_NORMAL>
|
||||
class DropDownDivider : public TBase {
|
||||
public:
|
||||
template <typename... Args>
|
||||
explicit DropDownDivider(Args&&... args) : TBase(std::forward<Args>(args)...) {}
|
||||
|
||||
bool Selectable() const override { return false; }
|
||||
uint Height() const override { return std::max<uint>(GetCharacterHeight(TFs), this->TBase::Height()); }
|
||||
|
||||
void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const override
|
||||
{
|
||||
uint8_t c1 = GetColourGradient(bg_colour, SHADE_DARK);
|
||||
uint8_t c2 = GetColourGradient(bg_colour, SHADE_LIGHTEST);
|
||||
|
||||
int mid = CenterBounds(full.top, full.bottom, 0);
|
||||
GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1);
|
||||
GfxFillRect(full.left, mid, full.right, mid + WidgetDimensions::scaled.bevel.top - 1, c2);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Drop down string component.
|
||||
* @tparam TBase Base component.
|
||||
* @tparam TFs Font size.
|
||||
* @tparam TEnd Position string at end if true, or start if false.
|
||||
*/
|
||||
template <class TBase, FontSize TFs = FS_NORMAL, bool TEnd = false>
|
||||
class DropDownString : public TBase {
|
||||
std::string string; ///< String to be drawn.
|
||||
Dimension dim; ///< Dimensions of string.
|
||||
public:
|
||||
template <typename... Args>
|
||||
explicit DropDownString(StringID string, Args&&... args) : TBase(std::forward<Args>(args)...)
|
||||
{
|
||||
this->SetString(GetString(string));
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
explicit DropDownString(const std::string &string, Args&&... args) : TBase(std::forward<Args>(args)...)
|
||||
{
|
||||
SetDParamStr(0, string);
|
||||
this->SetString(GetString(STR_JUST_RAW_STRING));
|
||||
}
|
||||
|
||||
void SetString(std::string &&string)
|
||||
{
|
||||
this->string = std::move(string);
|
||||
this->dim = GetStringBoundingBox(this->string, TFs);
|
||||
}
|
||||
|
||||
uint Height() const override
|
||||
{
|
||||
return std::max<uint>(this->dim.height, this->TBase::Height());
|
||||
}
|
||||
|
||||
uint Width() const override { return this->dim.width + this->TBase::Width(); }
|
||||
|
||||
void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override
|
||||
{
|
||||
bool rtl = TEnd ^ (_current_text_dir == TD_RTL);
|
||||
DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), this->string, this->GetColour(sel), SA_CENTER, false, TFs);
|
||||
this->TBase::Draw(full, r.Indent(this->dim.width, rtl), sel, bg_colour);
|
||||
}
|
||||
|
||||
void SetColourFlags(TextColour colour_flags) { this->colour_flags = colour_flags; }
|
||||
|
||||
/**
|
||||
* Natural sorting comparator function for DropDownList::sort().
|
||||
* @param first Left side of comparison.
|
||||
* @param second Right side of comparison.
|
||||
* @return true if \a first precedes \a second.
|
||||
* @warning All items in the list need to be derivates of DropDownListStringItem.
|
||||
*/
|
||||
static bool NatSortFunc(std::unique_ptr<const DropDownListItem> const &first, std::unique_ptr<const DropDownListItem> const &second)
|
||||
{
|
||||
const std::string &str1 = static_cast<const DropDownString*>(first.get())->string;
|
||||
const std::string &str2 = static_cast<const DropDownString*>(second.get())->string;
|
||||
return StrNaturalCompare(str1, str2) < 0;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Drop down icon component.
|
||||
* @tparam TBase Base component.
|
||||
* @tparam TEnd Position icon at end if true, or start if false.
|
||||
*/
|
||||
template <class TBase, bool TEnd = false>
|
||||
class DropDownIcon : public TBase {
|
||||
SpriteID sprite; ///< Sprite ID to be drawn.
|
||||
PaletteID palette; ///< Palette ID to use.
|
||||
Dimension dsprite; ///< Bounding box dimensions of sprite.
|
||||
Dimension dbounds; ///< Bounding box dimensions of bounds.
|
||||
public:
|
||||
template <typename... Args>
|
||||
explicit DropDownIcon(SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward<Args>(args)...), sprite(sprite), palette(palette)
|
||||
{
|
||||
this->dsprite = GetSpriteSize(this->sprite);
|
||||
this->dbounds = this->dsprite;
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
explicit DropDownIcon(const Dimension &dim, SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward<Args>(args)...), sprite(sprite), palette(palette), dbounds(dim)
|
||||
{
|
||||
this->dsprite = GetSpriteSize(this->sprite);
|
||||
}
|
||||
|
||||
uint Height() const override { return std::max(this->dbounds.height, this->TBase::Height()); }
|
||||
uint Width() const override { return this->dbounds.width + WidgetDimensions::scaled.hsep_normal + this->TBase::Width(); }
|
||||
|
||||
void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override
|
||||
{
|
||||
bool rtl = TEnd ^ (_current_text_dir == TD_RTL);
|
||||
Rect ir = r.WithWidth(this->dbounds.width, rtl);
|
||||
DrawSprite(this->sprite, this->palette, CenterBounds(ir.left, ir.right, this->dsprite.width), CenterBounds(r.top, r.bottom, this->dsprite.height));
|
||||
this->TBase::Draw(full, r.Indent(this->dbounds.width + WidgetDimensions::scaled.hsep_normal, rtl), sel, bg_colour);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Drop down checkmark component.
|
||||
* @tparam TBase Base component.
|
||||
* @tparam TFs Font size.
|
||||
* @tparam TEnd Position checkmark at end if true, or start if false.
|
||||
*/
|
||||
template <class TBase, bool TEnd = false, FontSize TFs = FS_NORMAL>
|
||||
class DropDownCheck : public TBase {
|
||||
bool checked; ///< Is item checked.
|
||||
Dimension dim; ///< Dimension of checkmark.
|
||||
public:
|
||||
template <typename... Args>
|
||||
explicit DropDownCheck(bool checked, Args&&... args) : TBase(std::forward<Args>(args)...), checked(checked)
|
||||
{
|
||||
this->dim = GetStringBoundingBox(STR_JUST_CHECKMARK, TFs);
|
||||
}
|
||||
|
||||
uint Height() const override { return std::max<uint>(this->dim.height, this->TBase::Height()); }
|
||||
uint Width() const override { return this->dim.width + WidgetDimensions::scaled.hsep_wide + this->TBase::Width(); }
|
||||
|
||||
void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override
|
||||
{
|
||||
bool rtl = TEnd ^ (_current_text_dir == TD_RTL);
|
||||
if (this->checked) {
|
||||
DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), STR_JUST_CHECKMARK, this->GetColour(sel), SA_CENTER, false, TFs);
|
||||
}
|
||||
this->TBase::Draw(full, r.Indent(this->dim.width + WidgetDimensions::scaled.hsep_wide, rtl), sel, bg_colour);
|
||||
}
|
||||
};
|
||||
|
||||
/* Commonly used drop down list items. */
|
||||
using DropDownListDividerItem = DropDownDivider<DropDownListItem>;
|
||||
using DropDownListStringItem = DropDownString<DropDownListItem>;
|
||||
using DropDownListIconItem = DropDownIcon<DropDownString<DropDownListItem>>;
|
||||
using DropDownListCheckedItem = DropDownCheck<DropDownString<DropDownListItem>>;
|
||||
|
||||
#endif /* DROPDOWN_COMMON_TYPE_H */
|
@@ -21,4 +21,12 @@ int HideDropDownMenu(Window *pw);
|
||||
|
||||
void GetParentWindowInfo(Window *w, WindowClass &parent_wc, WindowNumber &parent_wn);
|
||||
|
||||
/* Helper functions for commonly used drop down list items. */
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListDividerItem();
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListStringItem(StringID str, int value, bool masked = false, bool shaded = false);
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListStringItem(const std::string &str, int value, bool masked = false, bool shaded = false);
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListIconItem(SpriteID sprite, PaletteID palette, StringID str, int value, bool masked = false, bool shaded = false);
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListIconItem(const Dimension &dim, SpriteID sprite, PaletteID palette, StringID str, int value, bool masked = false, bool shaded = false);
|
||||
std::unique_ptr<DropDownListItem> MakeDropDownListCheckedItem(bool checked, StringID str, int value, bool masked = false, bool shaded = false);
|
||||
|
||||
#endif /* DROPDOWN_FUNC_H */
|
||||
|
@@ -13,9 +13,6 @@
|
||||
#include "window_type.h"
|
||||
#include "gfx_func.h"
|
||||
#include "gfx_type.h"
|
||||
#include "string_func.h"
|
||||
#include "strings_func.h"
|
||||
#include "table/strings.h"
|
||||
#include "window_gui.h"
|
||||
#include <vector>
|
||||
|
||||
@@ -58,159 +55,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Drop down divider component.
|
||||
* @tparam TBase Base component.
|
||||
* @tparam TFs Font size -- used to determine height.
|
||||
*/
|
||||
template<class TBase, FontSize TFs = FS_NORMAL>
|
||||
class DropDownDivider : public TBase {
|
||||
public:
|
||||
template <typename... Args>
|
||||
explicit DropDownDivider(Args&&... args) : TBase(std::forward<Args>(args)...) {}
|
||||
|
||||
bool Selectable() const override { return false; }
|
||||
uint Height() const override { return std::max<uint>(GetCharacterHeight(TFs), this->TBase::Height()); }
|
||||
|
||||
void Draw(const Rect &full, const Rect &, bool, Colours bg_colour) const override
|
||||
{
|
||||
uint8_t c1 = GetColourGradient(bg_colour, SHADE_DARK);
|
||||
uint8_t c2 = GetColourGradient(bg_colour, SHADE_LIGHTEST);
|
||||
|
||||
int mid = CenterBounds(full.top, full.bottom, 0);
|
||||
GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1);
|
||||
GfxFillRect(full.left, mid, full.right, mid + WidgetDimensions::scaled.bevel.top - 1, c2);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Drop down string component.
|
||||
* @tparam TBase Base component.
|
||||
* @tparam TFs Font size.
|
||||
* @tparam TEnd Position string at end if true, or start if false.
|
||||
*/
|
||||
template<class TBase, FontSize TFs = FS_NORMAL, bool TEnd = false>
|
||||
class DropDownString : public TBase {
|
||||
std::string string; ///< String to be drawn.
|
||||
Dimension dim; ///< Dimensions of string.
|
||||
public:
|
||||
template <typename... Args>
|
||||
explicit DropDownString(StringID string, Args&&... args) : TBase(std::forward<Args>(args)...)
|
||||
{
|
||||
this->SetString(GetString(string));
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
explicit DropDownString(const std::string &string, Args&&... args) : TBase(std::forward<Args>(args)...)
|
||||
{
|
||||
SetDParamStr(0, string);
|
||||
this->SetString(GetString(STR_JUST_RAW_STRING));
|
||||
}
|
||||
|
||||
void SetString(std::string &&string)
|
||||
{
|
||||
this->string = std::move(string);
|
||||
this->dim = GetStringBoundingBox(this->string, TFs);
|
||||
}
|
||||
|
||||
uint Height() const override
|
||||
{
|
||||
return std::max<uint>(this->dim.height, this->TBase::Height());
|
||||
}
|
||||
|
||||
uint Width() const override { return this->dim.width + this->TBase::Width(); }
|
||||
|
||||
void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override
|
||||
{
|
||||
bool rtl = TEnd ^ (_current_text_dir == TD_RTL);
|
||||
DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), this->string, this->GetColour(sel), SA_CENTER, false, TFs);
|
||||
this->TBase::Draw(full, r.Indent(this->dim.width, rtl), sel, bg_colour);
|
||||
}
|
||||
|
||||
void SetColourFlags(TextColour colour_flags) { this->colour_flags = colour_flags; }
|
||||
|
||||
/**
|
||||
* Natural sorting comparator function for DropDownList::sort().
|
||||
* @param first Left side of comparison.
|
||||
* @param second Right side of comparison.
|
||||
* @return true if \a first precedes \a second.
|
||||
* @warning All items in the list need to be derivates of DropDownListStringItem.
|
||||
*/
|
||||
static bool NatSortFunc(std::unique_ptr<const DropDownListItem> const &first, std::unique_ptr<const DropDownListItem> const &second)
|
||||
{
|
||||
const std::string &str1 = static_cast<const DropDownString*>(first.get())->string;
|
||||
const std::string &str2 = static_cast<const DropDownString*>(second.get())->string;
|
||||
return StrNaturalCompare(str1, str2) < 0;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Drop down icon component.
|
||||
* @tparam TBase Base component.
|
||||
* @tparam TEnd Position icon at end if true, or start if false.
|
||||
*/
|
||||
template<class TBase, bool TEnd = false>
|
||||
class DropDownIcon : public TBase {
|
||||
SpriteID sprite; ///< Sprite ID to be drawn.
|
||||
PaletteID palette; ///< Palette ID to use.
|
||||
Dimension dsprite; ///< Bounding box dimensions of sprite.
|
||||
Dimension dbounds; ///< Bounding box dimensions of bounds.
|
||||
public:
|
||||
template <typename... Args>
|
||||
explicit DropDownIcon(SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward<Args>(args)...), sprite(sprite), palette(palette)
|
||||
{
|
||||
this->dsprite = GetSpriteSize(this->sprite);
|
||||
this->dbounds = this->dsprite;
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
explicit DropDownIcon(const Dimension &dim, SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward<Args>(args)...), sprite(sprite), palette(palette), dbounds(dim)
|
||||
{
|
||||
this->dsprite = GetSpriteSize(this->sprite);
|
||||
}
|
||||
|
||||
uint Height() const override { return std::max(this->dbounds.height, this->TBase::Height()); }
|
||||
uint Width() const override { return this->dbounds.width + WidgetDimensions::scaled.hsep_normal + this->TBase::Width(); }
|
||||
|
||||
void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override
|
||||
{
|
||||
bool rtl = TEnd ^ (_current_text_dir == TD_RTL);
|
||||
Rect ir = r.WithWidth(this->dbounds.width, rtl);
|
||||
DrawSprite(this->sprite, this->palette, CenterBounds(ir.left, ir.right, this->dsprite.width), CenterBounds(r.top, r.bottom, this->dsprite.height));
|
||||
this->TBase::Draw(full, r.Indent(this->dbounds.width + WidgetDimensions::scaled.hsep_normal, rtl), sel, bg_colour);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Drop down checkmark component.
|
||||
* @tparam TBase Base component.
|
||||
* @tparam TFs Font size.
|
||||
* @tparam TEnd Position checkmark at end if true, or start if false.
|
||||
*/
|
||||
template<class TBase, bool TEnd = false, FontSize TFs = FS_NORMAL>
|
||||
class DropDownCheck : public TBase {
|
||||
bool checked; ///< Is item checked.
|
||||
Dimension dim; ///< Dimension of checkmark.
|
||||
public:
|
||||
template <typename... Args>
|
||||
explicit DropDownCheck(bool checked, Args&&... args) : TBase(std::forward<Args>(args)...), checked(checked)
|
||||
{
|
||||
this->dim = GetStringBoundingBox(STR_JUST_CHECKMARK, TFs);
|
||||
}
|
||||
|
||||
uint Height() const override { return std::max<uint>(this->dim.height, this->TBase::Height()); }
|
||||
uint Width() const override { return this->dim.width + WidgetDimensions::scaled.hsep_wide + this->TBase::Width(); }
|
||||
|
||||
void Draw(const Rect &full, const Rect &r, bool sel, Colours bg_colour) const override
|
||||
{
|
||||
bool rtl = TEnd ^ (_current_text_dir == TD_RTL);
|
||||
if (this->checked) {
|
||||
DrawStringMultiLine(r.WithWidth(this->dim.width, rtl), STR_JUST_CHECKMARK, this->GetColour(sel), SA_CENTER, false, TFs);
|
||||
}
|
||||
this->TBase::Draw(full, r.Indent(this->dim.width + WidgetDimensions::scaled.hsep_wide, rtl), sel, bg_colour);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Drop down unselectable component.
|
||||
* @tparam TBase Base component.
|
||||
@@ -224,12 +68,6 @@ public:
|
||||
bool Selectable() const override { return false; }
|
||||
};
|
||||
|
||||
/* Commonly used drop down list items. */
|
||||
using DropDownListDividerItem = DropDownDivider<DropDownListItem>;
|
||||
using DropDownListStringItem = DropDownString<DropDownListItem>;
|
||||
using DropDownListIconItem = DropDownIcon<DropDownString<DropDownListItem>>;
|
||||
using DropDownListCheckedItem = DropDownCheck<DropDownString<DropDownListItem>>;
|
||||
|
||||
/**
|
||||
* A drop down list is a collection of drop down list items.
|
||||
*/
|
||||
|
@@ -275,8 +275,8 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa)
|
||||
|
||||
/* FreeType has rendered the glyph, now we allocate a sprite and copy the image into it */
|
||||
SpriteLoader::SpriteCollection spritecollection;
|
||||
SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_NORMAL];
|
||||
sprite.AllocateData(ZOOM_LVL_NORMAL, static_cast<size_t>(width) * height);
|
||||
SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN];
|
||||
sprite.AllocateData(ZOOM_LVL_MIN, static_cast<size_t>(width) * height);
|
||||
sprite.type = SpriteType::Font;
|
||||
sprite.colours = (aa ? SCC_PAL | SCC_ALPHA : SCC_PAL);
|
||||
sprite.width = width;
|
||||
|
@@ -23,12 +23,12 @@ static const int ASCII_LETTERSTART = 32; ///< First printable ASCII letter.
|
||||
|
||||
/**
|
||||
* Scale traditional pixel dimensions to font zoom level, for drawing sprite fonts.
|
||||
* @param value Pixel amount at #ZOOM_LVL_BASE (traditional "normal" interface size).
|
||||
* @param value Pixel amount at #ZOOM_BASE (traditional "normal" interface size).
|
||||
* @return Pixel amount at _font_zoom (current interface size).
|
||||
*/
|
||||
static int ScaleFontTrad(int value)
|
||||
{
|
||||
return UnScaleByZoom(value * ZOOM_LVL_BASE, _font_zoom);
|
||||
return UnScaleByZoom(value * ZOOM_BASE, _font_zoom);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -14,6 +14,7 @@
|
||||
#include "../window_func.h"
|
||||
#include "../network/network.h"
|
||||
#include "../network/network_content.h"
|
||||
#include "../dropdown_type.h"
|
||||
#include "../dropdown_func.h"
|
||||
#include "../settings_type.h"
|
||||
|
||||
@@ -324,7 +325,7 @@ struct GSConfigWindow : public Window {
|
||||
|
||||
DropDownList list;
|
||||
for (int i = config_item.min_value; i <= config_item.max_value; i++) {
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(config_item.labels.find(i)->second, i, false));
|
||||
list.push_back(MakeDropDownListStringItem(config_item.labels.find(i)->second, i));
|
||||
}
|
||||
|
||||
ShowDropDownListAt(this, std::move(list), old_val, WID_GSC_SETTING_DROPDOWN, wi_rect, COLOUR_ORANGE);
|
||||
|
@@ -20,6 +20,7 @@
|
||||
#include "string_func.h"
|
||||
#include "gui.h"
|
||||
#include "dropdown_type.h"
|
||||
#include "dropdown_common_type.h"
|
||||
#include "dropdown_func.h"
|
||||
#include "querystring_gui.h"
|
||||
#include "town.h"
|
||||
@@ -392,7 +393,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.push_back(std::make_unique<DropDownListStringItem>((i + other_dimension > MAX_MAP_TILES_BITS) ? STR_RED_INT : STR_JUST_INT, i, false));
|
||||
list.push_back(MakeDropDownListStringItem((i + other_dimension > MAX_MAP_TILES_BITS) ? STR_RED_INT : STR_JUST_INT, i, false));
|
||||
}
|
||||
|
||||
return list;
|
||||
@@ -405,20 +406,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.push_back(std::make_unique<DropDownListStringItem>(grf_names[i], BUILTIN_TOWNNAME_GENERATOR_COUNT + i, false));
|
||||
list.push_back(MakeDropDownListStringItem(grf_names[i], BUILTIN_TOWNNAME_GENERATOR_COUNT + i));
|
||||
}
|
||||
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.push_back(std::make_unique<DropDownListDividerItem>(-1, false)); // separator line
|
||||
list.push_back(MakeDropDownListDividerItem()); // separator line
|
||||
newgrf_size++;
|
||||
}
|
||||
|
||||
/* Add and sort original townnames generators */
|
||||
for (uint i = 0; i < BUILTIN_TOWNNAME_GENERATOR_COUNT; i++) {
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH + i, i, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH + i, i));
|
||||
}
|
||||
std::sort(list.begin() + newgrf_size, list.end(), DropDownListStringItem::NatSortFunc);
|
||||
|
||||
|
20
src/gfx.cpp
20
src/gfx.cpp
@@ -79,11 +79,11 @@ struct GfxBlitterCtx {
|
||||
};
|
||||
|
||||
static void GfxMainBlitterViewport(const GfxBlitterCtx &ctx, const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE);
|
||||
static void GfxMainBlitter(const GfxBlitterCtx &ctx, const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZOOM_LVL_NORMAL);
|
||||
static void GfxMainBlitter(const GfxBlitterCtx &ctx, const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZOOM_LVL_MIN);
|
||||
|
||||
static ReusableBuffer<uint8_t> _cursor_backup;
|
||||
|
||||
ZoomLevel _gui_zoom = ZOOM_LVL_OUT_4X; ///< GUI Zoom level
|
||||
ZoomLevel _gui_zoom = ZOOM_LVL_NORMAL; ///< GUI Zoom level
|
||||
ZoomLevel _font_zoom = _gui_zoom; ///< Sprite font Zoom level (not clamped)
|
||||
int _gui_scale = MIN_INTERFACE_SCALE; ///< GUI scale, 100 is 100%.
|
||||
int _gui_scale_cfg; ///< GUI scale in config.
|
||||
@@ -113,7 +113,7 @@ uint32_t _gfx_debug_flags;
|
||||
/**
|
||||
* Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
|
||||
*
|
||||
* @pre dpi->zoom == ZOOM_LVL_NORMAL, right >= left, bottom >= top
|
||||
* @pre dpi->zoom == ZOOM_LVL_MIN, right >= left, bottom >= top
|
||||
* @param blitter Blitter to use
|
||||
* @param dpi Draw pixel info
|
||||
* @param left Minimum X (inclusive)
|
||||
@@ -132,7 +132,7 @@ void GfxFillRect(Blitter *blitter, const DrawPixelInfo *dpi, int left, int top,
|
||||
const int otop = top;
|
||||
const int oleft = left;
|
||||
|
||||
if (dpi->zoom != ZOOM_LVL_NORMAL) return;
|
||||
if (dpi->zoom != ZOOM_LVL_MIN) return;
|
||||
if (left > right || top > bottom) return;
|
||||
if (right < dpi->left || left >= dpi->left + dpi->width) return;
|
||||
if (bottom < dpi->top || top >= dpi->top + dpi->height) return;
|
||||
@@ -219,7 +219,7 @@ static std::vector<LineSegment> MakePolygonSegments(const std::vector<Point> &sh
|
||||
* The odd-even winding rule is used, i.e. self-intersecting polygons will have holes in them.
|
||||
* Left and top edges are inclusive, right and bottom edges are exclusive.
|
||||
* @note For rectangles the GfxFillRect function will be faster.
|
||||
* @pre dpi->zoom == ZOOM_LVL_NORMAL
|
||||
* @pre dpi->zoom == ZOOM_LVL_MIN
|
||||
* @param shape List of points on the polygon.
|
||||
* @param colour An 8 bit palette index (FILLRECT_OPAQUE and FILLRECT_CHECKER) or a recolour spritenumber (FILLRECT_RECOLOUR).
|
||||
* @param mode
|
||||
@@ -232,7 +232,7 @@ void GfxFillPolygon(const std::vector<Point> &shape, int colour, FillRectMode mo
|
||||
{
|
||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||
const DrawPixelInfo *dpi = _cur_dpi;
|
||||
if (dpi->zoom != ZOOM_LVL_NORMAL) return;
|
||||
if (dpi->zoom != ZOOM_LVL_MIN) return;
|
||||
|
||||
std::vector<LineSegment> segments = MakePolygonSegments(shape, Point{ dpi->left, dpi->top });
|
||||
|
||||
@@ -1289,7 +1289,7 @@ std::unique_ptr<uint32_t[]> DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel
|
||||
|
||||
static void GfxMainBlitterViewport(const GfxBlitterCtx &ctx, const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub, SpriteID sprite_id)
|
||||
{
|
||||
GfxBlitter<ZOOM_LVL_BASE, false>(ctx, sprite, x, y, mode, sub, sprite_id, ctx.dpi->zoom);
|
||||
GfxBlitter<ZOOM_BASE, false>(ctx, sprite, x, y, mode, sub, sprite_id, ctx.dpi->zoom);
|
||||
}
|
||||
|
||||
static void GfxMainBlitter(const GfxBlitterCtx &ctx, const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub, SpriteID sprite_id, ZoomLevel zoom)
|
||||
@@ -1632,7 +1632,7 @@ void DrawDirtyBlocks()
|
||||
_cur_dpi->height = _screen.height;
|
||||
_cur_dpi->pitch = _screen.pitch;
|
||||
_cur_dpi->dst_ptr = _screen.dst_ptr;
|
||||
_cur_dpi->zoom = ZOOM_LVL_NORMAL;
|
||||
_cur_dpi->zoom = ZOOM_LVL_MIN;
|
||||
|
||||
_dirty_viewport = vp;
|
||||
_dirty_viewport_disp_flags = w->viewport_widget->disp_flags;
|
||||
@@ -1932,7 +1932,7 @@ bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int heigh
|
||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||
const DrawPixelInfo *o = _cur_dpi;
|
||||
|
||||
n->zoom = ZOOM_LVL_NORMAL;
|
||||
n->zoom = ZOOM_LVL_MIN;
|
||||
|
||||
assert(width > 0);
|
||||
assert(height > 0);
|
||||
@@ -2158,7 +2158,7 @@ void UpdateGUIZoom()
|
||||
_gui_scale = Clamp(_gui_scale_cfg, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE);
|
||||
}
|
||||
|
||||
int8_t new_zoom = ScaleGUITrad(1) <= 1 ? ZOOM_LVL_OUT_4X : ScaleGUITrad(1) >= 4 ? ZOOM_LVL_MIN : ZOOM_LVL_OUT_2X;
|
||||
int8_t new_zoom = ScaleGUITrad(1) <= 1 ? ZOOM_LVL_NORMAL : ScaleGUITrad(1) >= 4 ? ZOOM_LVL_IN_4X : ZOOM_LVL_IN_2X;
|
||||
/* Font glyphs should not be clamped to min/max zoom. */
|
||||
_font_zoom = static_cast<ZoomLevel>(new_zoom);
|
||||
/* Ensure the gui_zoom is clamped between min/max. */
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include "clear_func.h"
|
||||
#include "tree_map.h"
|
||||
#include "scope.h"
|
||||
#include "debug_fmt.h"
|
||||
#include "table/tree_land.h"
|
||||
#include "blitter/32bpp_base.hpp"
|
||||
|
||||
@@ -54,25 +55,25 @@ static SpriteFile &LoadGrfFile(const std::string &filename, uint load_index, boo
|
||||
|
||||
SpriteFile &file = OpenCachedSpriteFile(filename, BASESET_DIR, needs_palette_remap);
|
||||
|
||||
DEBUG(sprite, 2, "Reading grf-file '%s'", filename.c_str());
|
||||
Debug(sprite, 2, "Reading grf-file '{}'", filename);
|
||||
|
||||
uint8_t container_ver = file.GetContainerVersion();
|
||||
if (container_ver == 0) usererror("Base grf '%s' is corrupt", filename.c_str());
|
||||
if (container_ver == 0) UserError("Base grf '{}' is corrupt", filename);
|
||||
ReadGRFSpriteOffsets(file);
|
||||
if (container_ver >= 2) {
|
||||
/* Read compression. */
|
||||
uint8_t compression = file.ReadByte();
|
||||
if (compression != 0) usererror("Unsupported compression format");
|
||||
if (compression != 0) UserError("Unsupported compression format");
|
||||
}
|
||||
|
||||
while (LoadNextSprite(load_index, file, sprite_id)) {
|
||||
load_index++;
|
||||
sprite_id++;
|
||||
if (load_index >= MAX_SPRITES) {
|
||||
usererror("Too many sprites. Recompile with higher MAX_SPRITES value or remove some custom GRF files.");
|
||||
UserError("Too many sprites. Recompile with higher MAX_SPRITES value or remove some custom GRF files.");
|
||||
}
|
||||
}
|
||||
DEBUG(sprite, 2, "Currently %i sprites are loaded", load_index);
|
||||
Debug(sprite, 2, "Currently {} sprites are loaded", load_index);
|
||||
|
||||
return file;
|
||||
}
|
||||
@@ -91,15 +92,15 @@ static void LoadGrfFileIndexed(const std::string &filename, const SpriteID *inde
|
||||
|
||||
SpriteFile &file = OpenCachedSpriteFile(filename, BASESET_DIR, needs_palette_remap);
|
||||
|
||||
DEBUG(sprite, 2, "Reading indexed grf-file '%s'", filename.c_str());
|
||||
Debug(sprite, 2, "Reading indexed grf-file '{}'", filename);
|
||||
|
||||
uint8_t container_ver = file.GetContainerVersion();
|
||||
if (container_ver == 0) usererror("Base grf '%s' is corrupt", filename.c_str());
|
||||
if (container_ver == 0) UserError("Base grf '{}' is corrupt", filename);
|
||||
ReadGRFSpriteOffsets(file);
|
||||
if (container_ver >= 2) {
|
||||
/* Read compression. */
|
||||
uint8_t compression = file.ReadByte();
|
||||
if (compression != 0) usererror("Unsupported compression format");
|
||||
if (compression != 0) UserError("Unsupported compression format");
|
||||
}
|
||||
|
||||
while ((start = *index_tbl++) != END) {
|
||||
@@ -124,40 +125,31 @@ void CheckExternalFiles()
|
||||
|
||||
const GraphicsSet *used_set = BaseGraphics::GetUsedSet();
|
||||
|
||||
DEBUG(grf, 1, "Using the %s base graphics set", used_set->name.c_str());
|
||||
|
||||
static const size_t ERROR_MESSAGE_LENGTH = 256;
|
||||
static const size_t MISSING_FILE_MESSAGE_LENGTH = 128;
|
||||
|
||||
/* Allocate for a message for each missing file and for one error
|
||||
* message per set.
|
||||
*/
|
||||
char error_msg[MISSING_FILE_MESSAGE_LENGTH * (GraphicsSet::NUM_FILES + SoundsSet::NUM_FILES) + 2 * ERROR_MESSAGE_LENGTH];
|
||||
error_msg[0] = '\0';
|
||||
char *add_pos = error_msg;
|
||||
const char *last = lastof(error_msg);
|
||||
Debug(grf, 1, "Using the {} base graphics set", used_set->name);
|
||||
|
||||
std::string error_msg;
|
||||
auto output_iterator = std::back_inserter(error_msg);
|
||||
if (used_set->GetNumInvalid() != 0) {
|
||||
/* Not all files were loaded successfully, see which ones */
|
||||
add_pos += seprintf(add_pos, last, "Trying to load graphics set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name.c_str());
|
||||
fmt::format_to(output_iterator, "Trying to load graphics set '{}', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", used_set->name);
|
||||
for (uint i = 0; i < GraphicsSet::NUM_FILES; i++) {
|
||||
MD5File::ChecksumResult res = GraphicsSet::CheckMD5(&used_set->files[i], BASESET_DIR);
|
||||
if (res != MD5File::CR_MATCH) add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", used_set->files[i].filename.c_str(), res == MD5File::CR_MISMATCH ? "corrupt" : "missing", used_set->files[i].missing_warning.c_str());
|
||||
if (res != MD5File::CR_MATCH) fmt::format_to(output_iterator, "\t{} is {} ({})\n", used_set->files[i].filename, res == MD5File::CR_MISMATCH ? "corrupt" : "missing", used_set->files[i].missing_warning);
|
||||
}
|
||||
add_pos += seprintf(add_pos, last, "\n");
|
||||
fmt::format_to(output_iterator, "\n");
|
||||
}
|
||||
|
||||
const SoundsSet *sounds_set = BaseSounds::GetUsedSet();
|
||||
if (sounds_set->GetNumInvalid() != 0) {
|
||||
add_pos += seprintf(add_pos, last, "Trying to load sound set '%s', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", sounds_set->name.c_str());
|
||||
fmt::format_to(output_iterator, "Trying to load sound set '{}', but it is incomplete. The game will probably not run correctly until you properly install this set or select another one. See section 4.1 of README.md.\n\nThe following files are corrupted or missing:\n", sounds_set->name);
|
||||
|
||||
static_assert(SoundsSet::NUM_FILES == 1);
|
||||
/* No need to loop each file, as long as there is only a single
|
||||
* sound file. */
|
||||
add_pos += seprintf(add_pos, last, "\t%s is %s (%s)\n", sounds_set->files->filename.c_str(), SoundsSet::CheckMD5(sounds_set->files, BASESET_DIR) == MD5File::CR_MISMATCH ? "corrupt" : "missing", sounds_set->files->missing_warning.c_str());
|
||||
fmt::format_to(output_iterator, "\t{} is {} ({})\n", sounds_set->files->filename, SoundsSet::CheckMD5(sounds_set->files, BASESET_DIR) == MD5File::CR_MISMATCH ? "corrupt" : "missing", sounds_set->files->missing_warning);
|
||||
}
|
||||
|
||||
if (add_pos != error_msg) ShowInfoF("%s", error_msg);
|
||||
if (!error_msg.empty()) ShowInfoI(error_msg);
|
||||
}
|
||||
|
||||
void InitGRFGlobalVars()
|
||||
@@ -271,9 +263,9 @@ static void LoadSpriteTables()
|
||||
LoadNewGRF(SPR_NEWGRFS_BASE, 2);
|
||||
|
||||
uint total_extra_graphics = SPR_NEWGRFS_BASE - SPR_OPENTTD_BASE;
|
||||
DEBUG(sprite, 4, "Checking sprites from fallback grf");
|
||||
Debug(sprite, 4, "Checking sprites from fallback grf");
|
||||
_missing_extra_graphics = GetSpriteCountForFile(master_filename, SPR_OPENTTD_BASE, SPR_NEWGRFS_BASE);
|
||||
DEBUG(sprite, 1, "%u extra sprites, %u from baseset, %u from fallback", total_extra_graphics, total_extra_graphics - _missing_extra_graphics, _missing_extra_graphics);
|
||||
Debug(sprite, 1, "{} extra sprites, {} from baseset, {} from fallback", total_extra_graphics, total_extra_graphics - _missing_extra_graphics, _missing_extra_graphics);
|
||||
|
||||
/* The original baseset extra graphics intentionally make use of the fallback graphics.
|
||||
* Let's say everything which provides less than 500 sprites misses the rest intentionally. */
|
||||
@@ -286,19 +278,19 @@ static void LoadSpriteTables()
|
||||
}
|
||||
|
||||
|
||||
static void RealChangeBlitter(const char *repl_blitter)
|
||||
static void RealChangeBlitter(const std::string_view repl_blitter)
|
||||
{
|
||||
const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName();
|
||||
if (strcmp(cur_blitter, repl_blitter) == 0) return;
|
||||
const std::string_view cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName();
|
||||
if (cur_blitter == repl_blitter) return;
|
||||
|
||||
DEBUG(driver, 1, "Switching blitter from '%s' to '%s'... ", cur_blitter, repl_blitter);
|
||||
Debug(driver, 1, "Switching blitter from '{}' to '{}'... ", cur_blitter, repl_blitter);
|
||||
Blitter *new_blitter = BlitterFactory::SelectBlitter(repl_blitter);
|
||||
if (new_blitter == nullptr) NOT_REACHED();
|
||||
DEBUG(driver, 1, "Successfully switched to %s.", repl_blitter);
|
||||
Debug(driver, 1, "Successfully switched to {}.", repl_blitter);
|
||||
|
||||
if (!VideoDriver::GetInstance()->AfterBlitterChange()) {
|
||||
/* Failed to switch blitter, let's hope we can return to the old one. */
|
||||
if (BlitterFactory::SelectBlitter(cur_blitter) == nullptr || !VideoDriver::GetInstance()->AfterBlitterChange()) usererror("Failed to reinitialize video driver. Specify a fixed blitter in the config");
|
||||
if (BlitterFactory::SelectBlitter(cur_blitter) == nullptr || !VideoDriver::GetInstance()->AfterBlitterChange()) UserError("Failed to reinitialize video driver. Specify a fixed blitter in the config");
|
||||
}
|
||||
|
||||
/* Clear caches that might have sprites for another blitter. */
|
||||
@@ -337,7 +329,7 @@ static bool SwitchNewGRFBlitter()
|
||||
|
||||
/* Search the best blitter. */
|
||||
static const struct {
|
||||
const char *name;
|
||||
const std::string_view name;
|
||||
uint animation; ///< 0: no support, 1: do support, 2: both
|
||||
uint min_base_depth, max_base_depth, min_grf_depth, max_grf_depth;
|
||||
} replacement_blitters[] = {
|
||||
@@ -357,23 +349,22 @@ static bool SwitchNewGRFBlitter()
|
||||
};
|
||||
|
||||
const bool animation_wanted = HasBit(_display_opt, DO_FULL_ANIMATION);
|
||||
const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName();
|
||||
const std::string_view cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName();
|
||||
|
||||
for (uint i = 0; i < lengthof(replacement_blitters); i++) {
|
||||
if (animation_wanted && (replacement_blitters[i].animation == 0)) continue;
|
||||
if (!animation_wanted && (replacement_blitters[i].animation == 1)) continue;
|
||||
for (const auto &replacement_blitter : replacement_blitters) {
|
||||
if (animation_wanted && (replacement_blitter.animation == 0)) continue;
|
||||
if (!animation_wanted && (replacement_blitter.animation == 1)) continue;
|
||||
|
||||
if (!IsInsideMM(depth_wanted_by_base, replacement_blitters[i].min_base_depth, replacement_blitters[i].max_base_depth + 1)) continue;
|
||||
if (!IsInsideMM(depth_wanted_by_grf, replacement_blitters[i].min_grf_depth, replacement_blitters[i].max_grf_depth + 1)) continue;
|
||||
const char *repl_blitter = replacement_blitters[i].name;
|
||||
if (!IsInsideMM(depth_wanted_by_base, replacement_blitter.min_base_depth, replacement_blitter.max_base_depth + 1)) continue;
|
||||
if (!IsInsideMM(depth_wanted_by_grf, replacement_blitter.min_grf_depth, replacement_blitter.max_grf_depth + 1)) continue;
|
||||
|
||||
if (strcmp(repl_blitter, cur_blitter) == 0) {
|
||||
if (replacement_blitter.name == cur_blitter) {
|
||||
return false;
|
||||
}
|
||||
if (BlitterFactory::GetBlitterFactory(repl_blitter) == nullptr) continue;
|
||||
if (BlitterFactory::GetBlitterFactory(replacement_blitter.name) == nullptr) continue;
|
||||
|
||||
/* Inform the video driver we want to switch blitter as soon as possible. */
|
||||
VideoDriver::GetInstance()->QueueOnMainThread(std::bind(&RealChangeBlitter, repl_blitter));
|
||||
VideoDriver::GetInstance()->QueueOnMainThread(std::bind(&RealChangeBlitter, replacement_blitter.name));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -518,7 +509,7 @@ void GfxDetermineMainColours()
|
||||
/** Initialise and load all the sprites. */
|
||||
void GfxLoadSprites()
|
||||
{
|
||||
DEBUG(sprite, 2, "Loading sprite set %d", _settings_game.game_creation.landscape);
|
||||
Debug(sprite, 2, "Loading sprite set {}", _settings_game.game_creation.landscape);
|
||||
|
||||
_grf_bug_too_many_strings = false;
|
||||
|
||||
@@ -533,7 +524,7 @@ void GfxLoadSprites()
|
||||
UpdateRouteStepSpriteSize();
|
||||
UpdateCursorSize();
|
||||
|
||||
DEBUG(sprite, 2, "Completed loading sprite set %d", _settings_game.game_creation.landscape);
|
||||
Debug(sprite, 2, "Completed loading sprite set {}", _settings_game.game_creation.landscape);
|
||||
}
|
||||
|
||||
GraphicsSet::GraphicsSet()
|
||||
|
@@ -119,7 +119,7 @@ static std::unique_ptr<NWidgetBase> MakeNWidgetCompanyLines()
|
||||
{
|
||||
auto vert = std::make_unique<NWidgetVertical>(NC_EQUALSIZE);
|
||||
vert->SetPadding(2, 2, 2, 2);
|
||||
uint sprite_height = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_OUT_4X).height;
|
||||
uint sprite_height = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_NORMAL).height;
|
||||
|
||||
for (WidgetID widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) {
|
||||
auto panel = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_BROWN, widnum);
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include "string_func.h"
|
||||
#include "sortlist_type.h"
|
||||
#include "dropdown_func.h"
|
||||
#include "dropdown_common_type.h"
|
||||
#include "company_base.h"
|
||||
#include "core/geometry_func.hpp"
|
||||
#include "core/random_func.hpp"
|
||||
@@ -1793,14 +1794,14 @@ public:
|
||||
DropDownList list;
|
||||
|
||||
/* Add item for disabling filtering. */
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY, false));
|
||||
list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_ANY), CargoFilterCriteria::CF_ANY));
|
||||
/* Add item for industries not producing anything, e.g. power plants */
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE, false));
|
||||
list.push_back(MakeDropDownListStringItem(this->GetCargoFilterLabel(CargoFilterCriteria::CF_NONE), CargoFilterCriteria::CF_NONE));
|
||||
|
||||
/* Add cargos */
|
||||
Dimension d = GetLargestCargoIconSize();
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
list.push_back(std::make_unique<DropDownListIconItem>(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false));
|
||||
list.push_back(MakeDropDownListIconItem(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index()));
|
||||
}
|
||||
|
||||
return list;
|
||||
@@ -3151,7 +3152,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
} else {
|
||||
DropDownList list;
|
||||
auto add_item = [&](StringID string, int result) {
|
||||
std::unique_ptr<DropDownListStringItem> item(new DropDownListStringItem(string, result, false));
|
||||
std::unique_ptr<DropDownListStringItem> item = std::make_unique<DropDownListStringItem>(string, result, false);
|
||||
item->SetColourFlags(TC_FORCED);
|
||||
list.emplace_back(std::move(item));
|
||||
};
|
||||
@@ -3167,7 +3168,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
DropDownList lst;
|
||||
Dimension d = GetLargestCargoIconSize();
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
lst.push_back(std::make_unique<DropDownListIconItem>(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index(), false));
|
||||
lst.push_back(MakeDropDownListIconItem(d, cs->GetCargoIcon(), PAL_NONE, cs->name, cs->Index()));
|
||||
}
|
||||
if (!lst.empty()) {
|
||||
int selected = (this->ind_cargo >= NUM_INDUSTRYTYPES) ? (int)(this->ind_cargo - NUM_INDUSTRYTYPES) : -1;
|
||||
@@ -3181,7 +3182,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
for (IndustryType ind : _sorted_industry_types) {
|
||||
const IndustrySpec *indsp = GetIndustrySpec(ind);
|
||||
if (!indsp->enabled) continue;
|
||||
lst.push_back(std::make_unique<DropDownListStringItem>(indsp->name, ind, false));
|
||||
lst.push_back(MakeDropDownListStringItem(indsp->name, ind));
|
||||
}
|
||||
if (!lst.empty()) {
|
||||
int selected = (this->ind_cargo < NUM_INDUSTRYTYPES) ? (int)this->ind_cargo : -1;
|
||||
|
@@ -110,8 +110,8 @@ inline std::tuple<Slope, int> GetFoundationPixelSlope(TileIndex tile)
|
||||
inline Point RemapCoords(int x, int y, int z)
|
||||
{
|
||||
Point pt;
|
||||
pt.x = (y - x) * 2 * ZOOM_LVL_BASE;
|
||||
pt.y = (y + x - z) * ZOOM_LVL_BASE;
|
||||
pt.x = (y - x) * 2 * ZOOM_BASE;
|
||||
pt.y = (y + x - z) * ZOOM_BASE;
|
||||
return pt;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ inline Point RemapCoords2(int x, int y)
|
||||
*/
|
||||
inline Point InverseRemapCoords(int x, int y)
|
||||
{
|
||||
Point pt = {(y * 2 - x) >> (2 + ZOOM_LVL_SHIFT), (y * 2 + x) >> (2 + ZOOM_LVL_SHIFT)};
|
||||
Point pt = {(y * 2 - x) >> (2 + ZOOM_BASE_SHIFT), (y * 2 + x) >> (2 + ZOOM_BASE_SHIFT)};
|
||||
return pt;
|
||||
}
|
||||
|
||||
|
@@ -4258,9 +4258,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Beraamde
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Stoor van speletjie is nog besig,{}wag asb tot dit klaar is!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Outostoor het misluk
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan nie skyf lees nie
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Speletjie Spaar Misluk{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan nie lêer uitvee nie
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Speletjie Laai Misluk{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne fout: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Gebreekte gespaarde spel - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spaarspeletjie is gemaak met nuwer uitgawe
|
||||
|
@@ -4058,9 +4058,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}الدخ
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}الحفظ مازال جاريا الآن{}الرجاء الأنتظار حتر ينتهي
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}فشل الحفظ التلقائي
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}لا يمكن قرائة القرص
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}فشل حفظ اللعبة{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}لا يمكن حذف الملف
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}فشل فتح اللعبة{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :خطأ داخلي: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :لعبه محفوظه غير صالحه - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :اللعبة حفظت بنسخة أحدث
|
||||
|
@@ -4014,9 +4014,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Gutxi go
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Oraindik artxiboa gordetzen,{}mesedez itxaron amaitu arte!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Gordetze automatikoak huts egin du
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ezin izan da driverra irakurri
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Jokoa gordetzeak huts egin du{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ezin izan da artxiboa ezabatu
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Jokoa kargatzeak huts egin du{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Barne akatsa: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Gordetako jokoa hautsia dago - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Gordetako jokoa bertsio berriago batekin egin da
|
||||
|
@@ -5250,9 +5250,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Мерк
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ідзе захаваньне,{}калі ласка, дачакайцеся завяршэньня!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Памылка аўтазахаваньня
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Не атрымалася прачытаць дыск
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Немагчыма захаваць гульню{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Немагчыма выдаліць файл
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Немагчыма загрузіць гульню{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Унутраная памылка: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Файл пашкоджаны — {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Захаваньне зроблена ў больш новай вэрсіі
|
||||
|
@@ -270,7 +270,7 @@ STR_UNITS_PERIODS :{NUM}{NBSP}per
|
||||
# Common window strings
|
||||
STR_LIST_FILTER_TITLE :{BLACK}Filtro:
|
||||
STR_LIST_FILTER_OSKTITLE :{BLACK}Inserir uma ou mais palavras-chave para filtrar a lista
|
||||
STR_LIST_FILTER_TOOLTIP :{BLACK}Digite uma ou mais palavras-chave para procurar na lista
|
||||
STR_LIST_FILTER_TOOLTIP :{BLACK}Introduza uma ou mais palavras-chave para procurar na lista
|
||||
|
||||
STR_TOOLTIP_GROUP_ORDER :{BLACK}Escolher a ordem de agrupamento
|
||||
STR_TOOLTIP_SORT_ORDER :{BLACK}Escolher a ordenação (descendente/ascendente)
|
||||
@@ -405,7 +405,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construi
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construir infraestrutura rodoviária
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construir infraestrutura para bondes
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construir infraestrutura hidroviária
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroportos
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroporto
|
||||
STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir menu de paisagismo, menu de árvores ou colocar uma placa
|
||||
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Abrir janela de som/música
|
||||
STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Abrir última mensagem/notícia, histórico de mensagens ou apagar todas as mensagens
|
||||
@@ -418,7 +418,7 @@ STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD
|
||||
STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor de Cenário
|
||||
STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Mover a data inicial 1 ano para trás
|
||||
STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Mover a data inicial 1 ano para frente
|
||||
STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para digitar o ano de início
|
||||
STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para alterar o ano de início
|
||||
STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Abrir mapa, visualização extra, lista de placas, de localidades ou de indústrias
|
||||
STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Abrir menu de paisagismo ou gerar um novo mundo
|
||||
STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Construir ou gerar localidades
|
||||
@@ -506,7 +506,7 @@ STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de
|
||||
STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de linha de bonde
|
||||
|
||||
# Waterways construction menu
|
||||
STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de hidrovias
|
||||
STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de hidrovia
|
||||
|
||||
# Aairport construction menu
|
||||
STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construção de aeroporto
|
||||
@@ -668,7 +668,7 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total:
|
||||
|
||||
STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Número de veículos que geraram lucro no último ano. Isso inclui veículos rodoviários, trens, embarcações e aeronaves
|
||||
STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Número de veículos que geraram lucro no último período. Isso inclui veículos rodoviários, trens, embarcações e aeronaves
|
||||
STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Número de estações atendidas recentemente. Estações de trem, paradas de ônibus, aeroportos, etc. são contados separadamente, mesmo que pertençam à mesma estação
|
||||
STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Número de estações atendidas recentemente. Estações de trem, paradas de ônibus, aeroportos, etc., são contados separadamente, mesmo que pertençam à mesma estação
|
||||
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Lucro do veículo com o menor rendimento (apenas veículos com mais de dois anos são considerados)
|
||||
STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Lucro do veículo com o menor rendimento (apenas veículos com mais de dois períodos são considerados)
|
||||
STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Quantia de dinheiro obtida no trimestre com o menor lucro dos últimos 12 trimestres
|
||||
@@ -680,7 +680,7 @@ STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}O montan
|
||||
STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Total de pontos de pontos possíveis
|
||||
|
||||
# Music window
|
||||
STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jukebox de Jazz
|
||||
STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jukebox de Música
|
||||
STR_MUSIC_PLAYLIST_ALL :{TINY_FONT}{BLACK}Todos
|
||||
STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Antigo
|
||||
STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Moderno
|
||||
@@ -1530,8 +1530,8 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da me
|
||||
STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tempo de exibição de mensagens de erro numa janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente
|
||||
|
||||
STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING}
|
||||
STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o cursor deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Outro modo de exibir os textos de ajuda é fixar este valor em 0 e clicar com o botão direito do mouse
|
||||
STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o cursor por {COMMA} milissegundo{P 0 "" s}
|
||||
STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tempo que o ponteiro do mouse deve ficar sobre algum elemento da interface para que os textos de ajuda sejam mostrados. Outro modo de exibir os textos de ajuda é fixar este valor em 0 e clicar com o botão direito do mouse
|
||||
STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Manter o ponteiro por {COMMA} milissegundo{P 0 "" s}
|
||||
###setting-zero-is-special
|
||||
STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botão direito
|
||||
|
||||
@@ -1673,7 +1673,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Mover o mapa
|
||||
STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Desativado
|
||||
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION :Teclado virtual: {STRING}
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Escolher o método para mostrar o teclado virtual para inserir texto em caixas de diálogo usando o cursor. Isto é útil para dispositivos pequenos que não possuem teclados
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Escolher o método para mostrar o teclado virtual para inserir texto em caixas de diálogo usando apenas o cursor. Isto é útil para dispositivos pequenos que não possuem teclados
|
||||
###length 4
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Desativado
|
||||
STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Clique duplo
|
||||
@@ -1736,7 +1736,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar chegada
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar os horários previstos de chegada e de partida nos quadros de horários
|
||||
|
||||
STR_CONFIG_SETTING_QUICKGOTO :Criação rápida de ordens de veículos: {STRING}
|
||||
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pré-selecionar o cursor 'Ir Para' ao abrir a janela de ordens
|
||||
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pré-selecionar o 'cursor Ir para' ao abrir a janela de ordens
|
||||
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo de trilho padrão (ao iniciar novo/abrir jogo): {STRING}
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de trilho a ser selecionado ao iniciar novo/abrir um jogo. 'Primeiro disponível' seleciona o tipo de trilho mais antigo. 'Último disponível' seleciona o tipo mais novo de trilho e 'Mais utilizado' seleciona o tipo que é mais usado atualmente
|
||||
@@ -1749,7 +1749,7 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Mostrar caminho
|
||||
STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Usar uma cor diferente nos trajetos reservados para auxiliar na solução de problemas com trens que se recusam a entrar em seções controlados por sinais de caminho
|
||||
|
||||
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Manter as ferramentas de construção ativas após o uso: {STRING}
|
||||
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter as ferramentas de construção de pontes, túneis, etc. abertas após o uso
|
||||
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Manter as ferramentas de construção de pontes, túneis, etc., abertas após o uso
|
||||
|
||||
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Remover automaticamente os sinais durante a construção de ferrovias: {STRING}
|
||||
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Remover automaticamente os sinais durante a construção de ferrovias se os sinais estiverem no caminho. Isso pode, potencialmente, causar acidentes de trens
|
||||
@@ -2420,8 +2420,8 @@ STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Adiciona
|
||||
STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Iniciar servidor
|
||||
STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Iniciar um servidor próprio
|
||||
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Digitar o seu nome
|
||||
STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Digitar o endereço de servidor ou código de convite
|
||||
STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Introduza o seu nome
|
||||
STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Endereço do servidor ou código de convite
|
||||
|
||||
# Start new multiplayer server
|
||||
STR_NETWORK_START_SERVER_CAPTION :{WHITE}Iniciar novo jogo multijogador
|
||||
@@ -2440,7 +2440,7 @@ STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} em
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Número máximo de empresas:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitar o servidor a um certo número de empresas
|
||||
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Coloque o nome para o jogo em rede
|
||||
STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Introduza um nome para o jogo em rede
|
||||
|
||||
# Network connecting window
|
||||
STR_NETWORK_CONNECTING_CAPTION :{WHITE}Conectando...
|
||||
@@ -2461,8 +2461,8 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Obtendo
|
||||
|
||||
STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconectar
|
||||
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Digite a senha
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Digite a senha
|
||||
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduza a senha
|
||||
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduza a senha
|
||||
|
||||
# Network company list added strings
|
||||
STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jogadores conectados
|
||||
@@ -2560,7 +2560,7 @@ STR_NETWORK_CHAT_CLIENT :[Privado] {STRI
|
||||
STR_NETWORK_CHAT_TO_CLIENT :[Privado] Para {STRING}: {WHITE}{STRING}
|
||||
STR_NETWORK_CHAT_ALL :[Todos] {STRING}: {WHITE}{STRING}
|
||||
STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING}
|
||||
STR_NETWORK_CHAT_OSKTITLE :{BLACK}Digitar a mensagem para conversar na rede
|
||||
STR_NETWORK_CHAT_OSKTITLE :{BLACK}Introduza a mensagem para conversar na rede
|
||||
|
||||
# Network messages
|
||||
STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Não foram encontradas interfaces de rede ou o jogo foi compilado sem ENABLE_NETWORK
|
||||
@@ -2646,14 +2646,14 @@ STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}O servid
|
||||
STR_NETWORK_MESSAGE_KICKED :*** {STRING} foi expulso. Motivo: ({STRING})
|
||||
|
||||
STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Falha ao registrar o servidor
|
||||
STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Outro servidor com o mesmo código de convite foi registrado. Mudando para o tipo de jogo "local".
|
||||
STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Outro servidor com o mesmo código de convite foi registrado. Mudando o jogo para o tipo "local".
|
||||
STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}O seu servidor não permite conexões remotas
|
||||
STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Outros jogadores não poderão se conectar ao seu servidor
|
||||
|
||||
# Content downloading window
|
||||
STR_CONTENT_TITLE :{WHITE}Download de conteúdo
|
||||
STR_CONTENT_TYPE_CAPTION :{BLACK}Tipo
|
||||
STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Tipo do conteúdo
|
||||
STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Tipo de conteúdo
|
||||
STR_CONTENT_NAME_CAPTION :{BLACK}Nome
|
||||
STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Nome do conteúdo
|
||||
STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Clique numa linha para ver os detalhes{}Clique na caixa de seleção para marcar e fazer o download
|
||||
@@ -2912,8 +2912,8 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orienta
|
||||
STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Escolher a orientação da estação de bondes de carga
|
||||
|
||||
# Waterways toolbar (last two for SE only)
|
||||
STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Hidrovias
|
||||
STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Hidrovias
|
||||
STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Hidrovia
|
||||
STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Hidrovia
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canais. Pressione também Shift para só mostrar o custo estimado
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir eclusas. Pressione também Shift para só mostrar o custo estimado
|
||||
STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito de embarcações (para compra e manutenção de embarcações). Pressione também Shift para só mostrar o custo estimado
|
||||
@@ -2982,11 +2982,11 @@ STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plantar
|
||||
STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente
|
||||
STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente no terreno
|
||||
STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normal
|
||||
STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantar árvores isoladas ao arrastar o cursor sobre o terreno
|
||||
STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Plantar árvores isoladas ao arrastar o ponteiro sobre o terreno
|
||||
STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Bosque
|
||||
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar florestas pequenas ao arrastar o cursor sobre o terreno
|
||||
STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Plantar florestas pequenas ao arrastar o ponteiro sobre o terreno
|
||||
STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Floresta
|
||||
STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar o cursor sobre o terreno
|
||||
STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Plantar florestas grandes ao arrastar o ponteiro sobre o terreno
|
||||
|
||||
# Land generation window (SE)
|
||||
STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Geração de Terreno
|
||||
@@ -3014,8 +3014,8 @@ STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Expandir
|
||||
STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Fazer com que todas as localidades cresçam ligeiramente
|
||||
|
||||
STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da localidade:
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Digitar o nome da localidade
|
||||
STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para digitar o nome da localidade
|
||||
STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introduza o nome da localidade
|
||||
STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para editar o nome da localidade
|
||||
STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nome aleatório
|
||||
STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Gerar novo nome aleatório
|
||||
|
||||
@@ -3283,7 +3283,7 @@ STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Você q
|
||||
STR_SAVELOAD_DIRECTORY :{STRING} (Diretório)
|
||||
STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Diretório raiz)
|
||||
|
||||
STR_SAVELOAD_OSKTITLE :{BLACK}Digitar um nome para o jogo que será gravado
|
||||
STR_SAVELOAD_OSKTITLE :{BLACK}Introduza um nome para o jogo que será gravado
|
||||
|
||||
# World generation
|
||||
STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Geração de Mapas
|
||||
@@ -3459,7 +3459,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatí
|
||||
# NewGRF save preset window
|
||||
STR_SAVE_PRESET_CAPTION :{WHITE}Salvar predefinição
|
||||
STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista de predefinições disponíveis, selecione uma para copiar o nome e usar na gravação abaixo
|
||||
STR_SAVE_PRESET_TITLE :{BLACK}Digitar um nome para a predefinição
|
||||
STR_SAVE_PRESET_TITLE :{BLACK}Introduza um nome para a predefinição
|
||||
STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nome que está selecionado para salvar a predefinição
|
||||
STR_SAVE_PRESET_CANCEL :{BLACK}Cancelar
|
||||
STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Não alterar a predefinição
|
||||
@@ -3603,7 +3603,7 @@ STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centrali
|
||||
STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Ir para a próxima placa
|
||||
STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Ir para a placa anterior
|
||||
|
||||
STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Digitar um nome para a placa
|
||||
STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Introduza um nome para a placa
|
||||
|
||||
# Town directory window
|
||||
STR_TOWN_DIRECTORY_CAPTION :{WHITE}Localidades
|
||||
@@ -3920,7 +3920,7 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Alterar
|
||||
|
||||
STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome da Empresa
|
||||
STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Presidente
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Digitar a quantia de dinheiro que você quer dar
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Introduza o valor que você quer dar
|
||||
|
||||
STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos procurando uma empresa de transportes para comprar a nossa empresa.{}{}Você deseja comprar {COMPANY} por {CURRENCY_LONG}?
|
||||
STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Na aquisição hostil de {COMPANY} você irá adquirir todos os ativos, liquidar todos os empréstimos e pagar dois anos de lucros.{}{}O total estimado é de {CURRENCY_LONG}.{}{}Você deseja continuar esta aquisição hostil?
|
||||
@@ -4271,9 +4271,9 @@ STR_ENGINE_PREVIEW_SHIP :{G=f}embarcaç
|
||||
STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING}
|
||||
STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING}
|
||||
STR_ENGINE_PREVIEW_COST_WEIGHT :Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Velocidade máx.: {VELOCITY}
|
||||
STR_ENGINE_PREVIEW_COST_MAX_SPEED :Custo: {CURRENCY_LONG} Veloc. máx.: {VELOCITY}
|
||||
STR_ENGINE_PREVIEW_SPEED_POWER :Velocidade: {VELOCITY} Potência: {POWER}
|
||||
STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Velocidade: {VELOCITY} Potência: {POWER} Tração máx.: {FORCE}
|
||||
STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Veloc.: {VELOCITY} Potência: {POWER} Tração máx.: {FORCE}
|
||||
STR_ENGINE_PREVIEW_TYPE :Tipo de aeronave: {STRING}
|
||||
STR_ENGINE_PREVIEW_TYPE_RANGE :Tipo de aeronave: {STRING} Autonomia: {COMMA} quadrados
|
||||
STR_ENGINE_PREVIEW_RUNCOST_YEAR :Custo Operacional: {CURRENCY_LONG}/ano
|
||||
@@ -4431,9 +4431,9 @@ STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Idade: {
|
||||
|
||||
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY}
|
||||
STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING}
|
||||
STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} {BLACK}Autonomia: {LTBLUE}{COMMA} quadrados
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx.: {LTBLUE}{VELOCITY}
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Velocidade máx.: {LTBLUE}{VELOCITY} {BLACK}Força de Tração máx.: {LTBLUE}{FORCE}
|
||||
STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Veloc. máx.: {LTBLUE}{VELOCITY} {BLACK}Tipo de aeronave: {LTBLUE}{STRING} {BLACK}Autonomia: {LTBLUE}{COMMA} quadrados
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Veloc. máx.: {LTBLUE}{VELOCITY}
|
||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Peso: {LTBLUE}{WEIGHT_SHORT} {BLACK}Potência: {LTBLUE}{POWER}{BLACK} Veloc. máx.: {LTBLUE}{VELOCITY} {BLACK}Tração máx.: {LTBLUE}{FORCE}
|
||||
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG})
|
||||
STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Lucro neste ano: {LTBLUE}{CURRENCY_LONG} (último ano: {CURRENCY_LONG}) {BLACK}Desempenho mín.: {LTBLUE}{POWER_TO_WEIGHT}
|
||||
@@ -4602,7 +4602,7 @@ STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :for verdadeiro
|
||||
STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :for falso
|
||||
|
||||
STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}O valor para comparar com os dados do veículo
|
||||
STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Digitar um valor para comparar
|
||||
STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Introduza um valor para comparar
|
||||
|
||||
STR_ORDERS_SKIP_BUTTON :{BLACK}Saltar
|
||||
STR_ORDERS_SKIP_TOOLTIP :{BLACK}Saltar a ordem atual e iniciar a próxima. Ctrl+Clique para saltar até a ordem selecionada
|
||||
@@ -4900,9 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Receita
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda sendo executada,{}por favor aguarde até terminar!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvamento automático falhou
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler a unidade
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvar Jogo Falhou{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao salvar jogo...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível apagar o arquivo
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Abrir Jogo Falhou{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao abrir jogo...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Jogo salvo está corrompido - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo salvo foi feito com uma versão mais recente
|
||||
@@ -4954,7 +4954,7 @@ STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Terreno
|
||||
STR_ERROR_CAN_T_DO_THIS :{WHITE}Não é possível fazer isto...
|
||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}A construção deve ser demolida primeiro
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Não é possível limpar esta área...
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... local inadequado
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... local não adequado
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... já construído
|
||||
STR_ERROR_OWNED_BY :{WHITE}... pertence a {STRING}
|
||||
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... área pertence a outra empresa
|
||||
@@ -4972,9 +4972,9 @@ STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}A autori
|
||||
STR_ERROR_BRIBE_FAILED :{WHITE}A sua tentativa de suborno foi descoberta por um investigador regional
|
||||
|
||||
# Levelling errors
|
||||
STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Não é possível elevar terreno aqui...
|
||||
STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Não é possível abaixar terreno aqui...
|
||||
STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Não é possível nivelar o terreno aqui...
|
||||
STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Não é possível elevar este terreno...
|
||||
STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Não é possível abaixar este terreno...
|
||||
STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Não é possível nivelar este terreno...
|
||||
STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}A escavação danificaria o túnel
|
||||
STR_ERROR_ALREADY_AT_SEA_LEVEL :{WHITE}... já está ao nível do mar
|
||||
STR_ERROR_TOO_HIGH :{WHITE}... muito alto
|
||||
@@ -5082,7 +5082,7 @@ STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Não é
|
||||
STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Não é possível colocar boia aqui...
|
||||
STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Não é possível alterar o nome do ponto de controle...
|
||||
|
||||
STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Não é possível remover ponto de controle de trem daqui...
|
||||
STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Não é possível remover ponto de controle de trem aqui...
|
||||
STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Precisa remover o ponto de controle ferroviário primeiro
|
||||
STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... boia no caminho
|
||||
STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boia está em uso por outra empresa!
|
||||
@@ -5137,25 +5137,25 @@ STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passagen
|
||||
STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não são permitidas para este tipo de estrada
|
||||
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Não é possível construir sinais aqui...
|
||||
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é possível construir ferrovia aqui...
|
||||
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover ferrovia daqui...
|
||||
STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Não é possível remover sinais daqui...
|
||||
STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais daqui...
|
||||
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover ferrovia aqui...
|
||||
STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Não é possível remover sinais aqui...
|
||||
STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Não é possível converter os sinais aqui...
|
||||
STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}... não existe uma ferrovia
|
||||
STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... não existem sinais
|
||||
|
||||
STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho daqui...
|
||||
STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Não é possível converter o tipo de trilho aqui...
|
||||
|
||||
# Road construction errors
|
||||
STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Precisa remover a estrada primeiro
|
||||
STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... estradas de sentido único não podem ter junções
|
||||
STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Não é possível construir estrada aqui...
|
||||
STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Não é possível construir linha de bonde aqui...
|
||||
STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Não é possível remover estrada daqui...
|
||||
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Não é possível remover linha de bonde daqui...
|
||||
STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Não é possível remover estrada aqui...
|
||||
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Não é possível remover linha de bonde aqui...
|
||||
STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... não existe uma estrada
|
||||
STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... não existe uma linha de bonde
|
||||
STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada daqui...
|
||||
STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de linha de bonde daqui...
|
||||
STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter o tipo de estrada aqui...
|
||||
STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter o tipo de linha de bonde aqui...
|
||||
STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Estrada não adequada
|
||||
STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Linha de bonde não adequada
|
||||
|
||||
|
@@ -4290,9 +4290,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Приб
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Записването продължава,{}моля изчакайте да сръши!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Автозапазването е неуспешно
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Не може да прочете диска
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Запазването на играта е неуспешно{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Изтриването на файла е неуспешно
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Отварянето на играта е неуспешно{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Вътрешна грешка: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Запазената игра е повредена - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Запазената игра е направена от по-нова версия
|
||||
|
@@ -4900,9 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingresso
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Es desa la partida.{}Espera que acabi l'operació!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Ha fallat el desat automàtic
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossible llegir la unitat de disc
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error guardant la partida{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}La partida no s'ha pogut desar...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossible esborrar l'arxiu
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Error carregant la partida{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}La partida no s'ha pogut carregar...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error Intern: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :L'arxiu de la partida està corromput - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida està desada amb una versió més moderna
|
||||
|
@@ -4444,9 +4444,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Predviđ
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Spremanje još u tijeku,{}molimo pričekajte dok se ne završi!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatsko spremanje neuspješno
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ne mogu pročitati disk
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spremanje igre nije uspjelo{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ne mogu obrisati datoteku
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Učitavanje igre nije uspjelo{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interna greška: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Pokvarena spremljena igra - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spremljena igra je stvorena s novijom verzijom
|
||||
|
@@ -4988,9 +4988,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Odhadova
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ukládání ještě běží,{}počkej prosím, než doběhne!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatické uložení selhalo
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nelze číst z jednotky
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Uložení hry selhalo{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nelze smazat soubor
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nelze otevřít hru{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Vnitřní chyba: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Poškozená hra - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Uložená hra je z novější verze
|
||||
|
@@ -4899,9 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Anslået
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gemmer stadig,{}vent venligst!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fejl under autogem
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke læse drevet
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fejl under gemning af spil{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fejl under lagring af spil...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under indlæsning af spil{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under indlæsning af spil...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern fejl: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt gemt spil - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er gemt med en nyere version
|
||||
|
@@ -4899,9 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Verwacht
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Opslaan van spel is nog bezig,{}Wacht tot dit voltooid is!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatisch opslaan mislukt
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan niet lezen van schijf
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Opslaan spel mislukt{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spel opslaan mislukt...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan bestand niet verwijderen
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Laden spel mislukt{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Spel laden spel mislukt...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne fout: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Opgeslagen spel beschadigd - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Opgeslagen spel hoort bij een nieuwere versie
|
||||
|
@@ -4899,9 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Estimate
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Saving still in progress,{}please wait until it is finished!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosave failed
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game Save Failed{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game save failed...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game Load Failed{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game load failed...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version
|
||||
|
@@ -4899,9 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Estimate
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Saving still in progress,{}please wait until it is finished!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosave failed
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Unable to read drive
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game Save Failed{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Game save failed...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Unable to delete file
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game Load Failed{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Game load failed...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internal error: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Broken savegame - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Savegame is made with newer version
|
||||
|
@@ -4772,9 +4772,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Atendata
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ankoraŭ konservas,{}bv atendi ĝis finiĝo!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fiaskis aŭtomate konservi
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ne eblas legi diskon
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Ludkonservado Fiaskis{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ne eblas forviŝi dosieron
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Ludŝarĝado Fiaskis{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interna eraro: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Rompa konservludo - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tiu ĉi ludo estis konservita per pli nova versio
|
||||
|
@@ -4953,9 +4953,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Eeldatav
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ikka salvestamisel,{}palun oota salvestuse lõpuni!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Välpsalvestus ebaõnnestus
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ei suuda kettalt lugeda
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Mängu salvestamine nurjus{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Faili ei saa kustutada
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Mängu laadimine nurjus{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Süsteemi viga: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Katkine salvestus - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvestus on tehtud uuemas osas
|
||||
|
@@ -3673,9 +3673,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Inntøku
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Goyming er enn í gongd,{}vinarliga bíða til ta er liðugt!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Sjálvgoymsla eydnaðist ikki
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ikki ført fyri at lesa drev
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Eydnaðist ikki at goyma spæl{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ikki ført fyri at strika fílu
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Eydnaðist ikki at heinta spæl{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Innanhýsis villa: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Goymda spæli er broti - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Goymda spæli er frá nýggjari útgávu
|
||||
|
@@ -4899,9 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Arvioitu
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Tallentaminen käynnissä,{}odota, kunnes se päättyy!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automaattitallennus epäonnistui.
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Asemaa ei voi lukea.
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Tallennus epäonnistui.{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Pelin tallennus epäonnistui…
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tiedostoa ei voi poistaa.
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lataus epäonnistui.{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Pelin lataus epäonnistui…
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Sisäinen virhe: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Viallinen tallennus – {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tallennus on tehty uudemmalla versiolla
|
||||
|
@@ -4900,9 +4900,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Revenu e
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Sauvegarde en cours...{}Veuillez attendre la fin du processus{NBSP}!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Échec de l'enregistrement automatique
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossible d'accéder au disque
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}La sauvegarde a échoué{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossible de supprimer le fichier
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Le chargement a échoué{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erreur interne{NBSP}: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Sauvegarde corrompue − {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sauvegarde modifiée avec une version plus récente
|
||||
|
@@ -3861,9 +3861,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Dit gjit
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Spul noch an it bewarjen,{}graach nog efkes geduld!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatysk opslaan net slagge
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Koe net fan 'e skiif lêze
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Opslaan Mislearre{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kin bestân net fuortsmite
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Laden Mislearre{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne flater: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Stikkene savegame - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spul is makke mei in neiere fersje
|
||||
|
@@ -4401,9 +4401,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Tuairmse
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ga shàbhaladh fhathast,{}fuirich greis gus am bi e deiseil!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Dh’fhàillig leis an fhèin-shàbhaladh
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Cha ghabh an draibh leughadh
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Dh’fhàillig le sàbhaladh a’ gheama{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Cha ghabh am faidhle sguabadh às
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Dh’fhàillig le luchdadh a’ gheama{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Mearachd taobh a-staigh: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Tha an geama air shàbhaladh briste - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Chaidh an sàbhaladh seo a dhèanamh le tionndadh as ùire dhen gheama
|
||||
|
@@ -4898,9 +4898,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingreso
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravación en progreso,{}por favor agarda ata que remate!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autogravado fallido
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No se pode lee-la unidade
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Gravación da partida fallida{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Non se pode borra-lo arquivo
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Carga da partida fallida{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Partida gravada corrupta - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :A partida gravouse cunha versión máis nova do xogo
|
||||
|
@@ -4450,10 +4450,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapazit
|
||||
STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Transfer-Einnahmen: {LTBLUE}{CURRENCY_LONG}
|
||||
|
||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}{NBSP}Tag{P "" e} {BLACK} {STRING}
|
||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}{NBSP}Minute{P "" n}{BLACK} {STRING}
|
||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}{NBSP}Minuten{BLACK} {STRING}
|
||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Wartungsintervall: {LTBLUE}{COMMA}%{BLACK} {STRING}
|
||||
STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Zuletzt gewartet: {LTBLUE}{DATE_LONG}
|
||||
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Zuletzt gewartet: vor {LTBLUE}{NUM} Minuten
|
||||
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Zuletzt gewartet: vor {LTBLUE}{NUM} Minute{P "" n}
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Erhöhe Serviceintervall um 10 Tage. Strg+Klick um das Serviceintervall um 5 Tage zu erhöhen
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Erhöhe Serviceintervall um 5 Minuten. Strg+Klick um das Serviceintervall um 1 Minute zu erhöhen
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Erhöhe Serviceintervall um 10 Prozent. Strg+Klick um das Serviceintervall um 5 Prozent zu erhöhen
|
||||
@@ -4644,7 +4644,7 @@ STR_ORDER_REFIT_ORDER :(auf {STRING} u
|
||||
STR_ORDER_REFIT_STOP_ORDER :(auf {STRING} umrüsten und stoppen)
|
||||
STR_ORDER_STOP_ORDER :(Stopp)
|
||||
|
||||
STR_ORDER_WAIT_TO_UNBUNCH :(warte auf Entpulkung)
|
||||
STR_ORDER_WAIT_TO_UNBUNCH :(Warte auf Entpulkung)
|
||||
|
||||
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
|
||||
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Station unbenutzbar){POP_COLOUR} {STRING} {STATION} {STRING}
|
||||
@@ -4900,9 +4900,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Geschät
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Speichern läuft,{}bitte warten, bis es beendet ist!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosicherung fehlgeschlagen
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Laufwerk nicht betriebsbereit
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spielspeicherung fehlgeschlagen{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Datei kann nicht gelöscht werden
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Laden des Spieles fehlgeschlagen{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interner Fehler: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Spielstandsdatei defekt – {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spielstand wurde mit einer neueren Spielversion erstellt
|
||||
|
@@ -344,7 +344,7 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Κλεί
|
||||
STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Τίτλος παραθύρου - σύρετε το για να το μετακινήσετε
|
||||
STR_TOOLTIP_SHADE :{BLACK}Σκίαση παραθύρου - Εμφάνιση μόνο της μπάρας τιτλου
|
||||
STR_TOOLTIP_DEBUG :{BLACK}Εμφάνιση πληροφοριών αποσφαλμάτωσης για NewGRF
|
||||
STR_TOOLTIP_DEFSIZE :{BLACK}Κλιμακώνει το παράθυρο στο προκαθορισμένο μέγεθος. Με Ctrl+Click αποθηκεύεται το τρέχον μέγεθος ως προκαθορισμένο
|
||||
STR_TOOLTIP_DEFSIZE :{BLACK}Κλιμακώνει το παράθυρο στο προκαθορισμένο μέγεθος. Με Ctrl+Κλικ αποθηκεύεται το τρέχον μέγεθος ως προκαθορισμένο
|
||||
STR_TOOLTIP_STICKY :{BLACK}Σημειώστε αυτό το παραθύρο ωστέ να μην κλείνει από το πλήκτρο «Κλείσιμο Όλων των Παραθύρων». Πατήστε Ctrl+Κλικ για να αποθηκεύσετε την κατάσταση απο επιλογή
|
||||
STR_TOOLTIP_RESIZE :{BLACK}Κάντε κλίκ και σύρετε για να αλλάξετε το μέγεθος του παραθύρου
|
||||
STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Εναλλαγή μεγάλου/μικρού παραθύρου
|
||||
@@ -972,7 +972,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLAC
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Βελτιωμένες μέθοδοι καλλιέργειας στην {INDUSTRY} αναμένονται να διπλασιάσουν την παραγωγή!
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK} Η παραγωγή {STRING.geniki} στ{G o η ο} {INDUSTRY} αυξήθηκε κατά {COMMA}%!
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}Η παραγωγή στ{G o η ο} {INDUSTRY} μειώθηκε κατά 50%
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Μόλυνση από έντομα προκαλεί καταστροφή στη {INDUSTRY}!{}Η παραγωγή μειώθηκε κατά 50%
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Προσβολή από έντομα προκαλεί καταστροφή στη {INDUSTRY}!{}Η παραγωγή μειώθηκε κατά 50%
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK} Η παραγωγή {STRING.geniki} στ{G o η ο} {INDUSTRY} μειώθηκε κατά {COMMA}%!
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
@@ -1460,13 +1460,13 @@ STR_CONFIG_SETTING_INFLATION :Πληθωρι
|
||||
STR_CONFIG_SETTING_INFLATION_HELPTEXT :Ενεργοποίηση του πληθωρισμού στην οικονομία, όπου τα κόστη αυξάνονται ελάχιστα ταχύτερα από τις πληρωμές
|
||||
|
||||
STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Μέγιστο μήκος γέφυρας: {STRING}
|
||||
STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Μέγιστο μήκος για κτίσιμο γεφυρών
|
||||
STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Μέγιστο μήκος για κατασκευή γεφυρών
|
||||
|
||||
STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Μέγιστο ύψος γέφυρας: {STRING}
|
||||
STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Μέγιστο ύψος για το χτίσιμο γεφυρών
|
||||
STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Μέγιστο ύψος για την κατασκευή γεφυρών
|
||||
|
||||
STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Μέγιστο μήκος σήραγγας: {STRING}
|
||||
STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Μέγιστο μήκος για κτίσιμο συράγγων
|
||||
STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Μέγιστο μήκος για κατασκευή σηράγγων
|
||||
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Χειροκίνητη μέθοδος κατασκευής βιομηχανιών πρώτων υλών: {STRING}
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Μέθοδος χρηματοδότησης πρωτογενούς βιομηχανίας. «Καμία» σημαίνει ότι δεν γίνεται να χρηματοδοτηθεί καμία βιομηχανία, «Αναζήτηση» σημαίνει ότι η χρηματοδότηση είναι εφικτή, αλλά η κατασκευή πραγματοποιείται σε τυχαίο σημείο του χάρτη και είναι πιθανό να αποτύχει, «Όπως οι άλλες βιομηχανίες» σημαίνει πως οι πρωτογενείς βιομηχανίες είναι εφικτό να κατασκευαστούν από εταιρείες όπως οι δευτερογενείς βιομηχανίες σε οποιαδήποτε θέση θέλουν
|
||||
@@ -1476,7 +1476,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Όπως οι
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Διερεύνηση προοπτικών
|
||||
|
||||
STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Επίπεδη περιοχή γύρω από βιομηχανίες: {STRING}
|
||||
STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Επίπεδος χώρος γύρω από μια βιομηχανία. Αυτό εξασφαλίζει ότι θα παραμείνει διαθέσιμος κενός χώρος γύρω από μια βιομηχανία για να κτισθούν γραμμές, κλπ
|
||||
STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Επίπεδος χώρος γύρω από μια βιομηχανία. Αυτό εξασφαλίζει ότι θα παραμείνει διαθέσιμος κενός χώρος γύρω από μια βιομηχανία για να κατασκευαστούν γραμμές, κλπ
|
||||
|
||||
STR_CONFIG_SETTING_MULTIPINDTOWN :Επιτρέπονται πολλαπλές όμοιες βιομηχανίες ανά πόλη: {STRING}
|
||||
STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Συνήθως, μια πόλη δεν επιθυμεί περισσότερες από μία βιομηχανία κάθε είδους. Αυτή η ρύθμιση επιτρέπει περισσότερες βιομηχανίες του ίδιου είδους στην ίδια πόλη.
|
||||
@@ -2018,7 +2018,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} τετ
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Όταν σύρετε, διατηρείται σταθερή απόσταση μεταξύ των σημάτων: {STRING}
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Επιλέξτε τη συμπεριφορά της τοποθέτησης σημάτων όταν πατάτε Ctrl και σύρετε. Όταν είναι απενεργοποιημένο, τα σήματα τοποθετούνται γύρω από σήραγγες και γέφυρες για να αποφεύγονται μεγάλα τμήματα χωρίς σήματα. Όταν είναι ενεργοποιημένο, τα σήματα τοποθετούνται κάθε n τετραγωνίδια, κάνοντας ευκολότερη την ευθυγράμμιση των σημάτων σε παράλληλες γραμμές
|
||||
|
||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Αυτόματο κτίσιμο σηματοφόρων πριν από το: {STRING}
|
||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Αυτόματη κατασκευή σηματοφόρων πριν από το: {STRING}
|
||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Ορίζεται το έτος κατά το οποίο θα χρησιμοποιούνται τα ηλεκτρικά σήματα στις σιδηροτροχιές. Πριν από αυτό, θα χρησιμοποιούνται μηχανικά σήματα (που έχουν ακριβώς την ίδια λειτουργία, αλλά έχουν διαφορετική μορφή)
|
||||
|
||||
STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Περιήγηση στους τύπους σηματοδότησης: {STRING}
|
||||
@@ -2042,9 +2042,9 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :πλέγμα 2x
|
||||
STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :πλέγμα 3x3
|
||||
STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Τυχαίο
|
||||
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Οι πόλεις επιτρέπεται να χτίσουν δρόμους: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Οι πόλεις επιτρέπεται να κατασκευάζουν δρόμους: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Επιτρέπεται στις πόλεις να κατασκευάζουν δρόμους για ανάπτυξη. Απενεργοποιήστε για να αποτρέπονται οι τοπικές αρχές από την αυτόνομη κατασκευή δρόμων
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Οι πόλεις επιτρέπουν το κτίσιμο ισόπεδων διασταυρώσεων: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Οι πόλεις επιτρέπουν την κατασκευή ισόπεδων διασταυρώσεων: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση επιτρέπει στις πόλεις να κατασκευάζουν επίπεδες διαβάσεις
|
||||
|
||||
STR_CONFIG_SETTING_NOISE_LEVEL :Περιορισμός τοποθέτησης αεροδρομίων ανάλογα με το επίπεδο θορύβου: {STRING}
|
||||
@@ -2755,7 +2755,7 @@ STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Μαρκ
|
||||
STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Αποεπιλογή όλων
|
||||
STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Σημείωση όλων των περιεχομένων να μην κατέβουν
|
||||
STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Αναζήτηση εξωτερικών ιστοσελίδων
|
||||
STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Ψάξτε για περιεχόμενο που δεν είναι διαθέσιμο μέσω την υπηρεσία λήψης περιεχομένου του OpenTTD σε ιστοσελίδες που δεν είναι συνδεδεμένες με το OpenTTD
|
||||
STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Αναζήτηση για περιεχόμενο που δεν είναι διαθέσιμο μέσω την υπηρεσία λήψης περιεχομένου του OpenTTD σε ιστοσελίδες που δεν σχετίζονται με το OpenTTD
|
||||
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Φεύγετε από το OpenTTD!
|
||||
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Οι όροι και προϋποθέσεις για τη λήψη περιεχομένου από εξωτερικές ιστοσελίδες διαφέρουν.{}Θα πρέπει να αναφερθείτε στις εξωτερικές ιστοσελίδες για οδηγίες περί της εγκατάστασης του περιεχομένου στο OpenTTD.{}Θέλετε να συνεχίσετε;
|
||||
STR_CONTENT_FILTER_TITLE :{BLACK}Ετικέτα/όνομα φίλτρου:
|
||||
@@ -2773,7 +2773,7 @@ STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Αυτ
|
||||
STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Το έχετε ήδη αυτό
|
||||
STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Αυτό το περιεχόμενο είναι άγνωστο και δεν γίνεται να κατέβει από το OpenTTD
|
||||
|
||||
STR_CONTENT_DETAIL_UPDATE :{SILVER}Αυτό είναι αντικατάσταση ενός υπάρχοντος {STRING}
|
||||
STR_CONTENT_DETAIL_UPDATE :{SILVER}Αυτό αντικαθιστά ένα υπάρχον {STRING}
|
||||
STR_CONTENT_DETAIL_NAME :{SILVER}Όνομα: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_VERSION :{SILVER}Έκδοση: {WHITE}{STRING}
|
||||
STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}Περιγραφή: {WHITE}{STRING}
|
||||
@@ -2830,7 +2830,7 @@ STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Εναλ
|
||||
STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για γέφυρες. Ctrl+Κλικ για να την κλειδώσετε
|
||||
STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για κτίρια όπως φάρους και κεραίες. Ctrl+Κλικ για να την κλειδώσετε
|
||||
STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για τις συνδέσεις. Ctrl+Κλικ για να την κλειδώσετε
|
||||
STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για φόρτωση και κείμενο κόστους/εσόδων. Ctrl+Click για να την κλειδώσετε
|
||||
STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Εναλλαγή διαφάνειας για φόρτωση και κείμενο κόστους/εσόδων. Ctrl+Κλικ για να την κλειδώσετε
|
||||
STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Επιλέξτε τα αντικείμενα που θα είναι αόρατα αντί για διάφανα
|
||||
|
||||
# Linkgraph legend window
|
||||
@@ -2864,10 +2864,10 @@ STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Κόστ
|
||||
|
||||
# Join station window
|
||||
STR_JOIN_STATION_CAPTION :{WHITE}Συνένωση σταθμού
|
||||
STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Χτίστε ένα ξεχωριστό σταθμό
|
||||
STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Κατασκευάστε ένα ξεχωριστό σταθμό
|
||||
|
||||
STR_JOIN_WAYPOINT_CAPTION :{WHITE}Συνένωση σημείου καθοδήγησης
|
||||
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Κτίσιμο ενός ξεχωριστού σημείου καθοδήγησης
|
||||
STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}κατασκευή ενός ξεχωριστού σημείου καθοδήγησης
|
||||
|
||||
# Generic toolbar
|
||||
STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Απενεργοποιημένο διότι δεν υπάρχουν διαθέσιμα οχήματα για αυτή την υποδομή
|
||||
@@ -2914,7 +2914,7 @@ STR_STATION_BUILD_DRAG_DROP :{BLACK}Σύρε
|
||||
STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Φτιάξε ένα σταθμό χρησιμοποιώντας σύρσιμο και ελευθέρωση
|
||||
|
||||
STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Επιλογή τύπου σταθμών για εμφάνιση
|
||||
STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Επιλέξτε τον τύπο του σταθμού προς κτίσιμο
|
||||
STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Επιλέξτε τον τύπο του σταθμού προς κατασκευή
|
||||
|
||||
STR_STATION_CLASS_DFLT :Προεπιλεγμένος
|
||||
STR_STATION_CLASS_DFLT_STATION :Προεπιλεγμένος σταθμός
|
||||
@@ -2928,16 +2928,16 @@ STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Εναλ
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Σηματοδότες Τμήματος (σηματοφόρος){}Αυτός είναι ο πιο βασικός τύπος σηματοδότη, επιτρέποντας μόνο ένα τρένο να βρίσκεται σε κάθε τμήμα κάθε φορά
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Σηματοδότης-Εισόδου (σηματοφόρος){}Πράσινο όσο υπάρχει ένας ή περισσότεροι πράσινοι σηματοδότες-εξόδου στο επόμενο τμήμα γράμμης. Διαφορετικά δείχνει κόκκινο
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Σηματοδότης-Εξόδου (σηματοφόρος){}Συμπεριφέρεται με τον ίδιο τρόπο οπως οι σηματοδότες τμήματος αλλά είναι απαραίτητο να τεθεί το σωστό χρώμα στους προ-σηματοδότες είσοδου και συνδυαστικούς
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (σηματοφόρος){}Ο συνδυαστικός σηματοδότης απλά λειτουργεί ταυτόχρονα ως σηματοδότης εισόδου και εξόδου. Αυτό επιτρέπει το κτίσιμο μεγάλυτερων «δέντρων» με προ-σηματοδότες
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (σηματοφόρος){}Ο συνδυαστικός σηματοδότης απλά λειτουργεί ταυτόχρονα ως σηματοδότης εισόδου και εξόδου. Αυτό επιτρέπει την κατασκευή μεγάλυτερων «δέντρων» με προ-σηματοδότες
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Σηματοδότης Τροχιάς (σηματοφόρος){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Κανονικοί σηματοδότες τροχιάς μπορούν να περαστούν από την πίσω πλευρά
|
||||
STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Μονόδρομος Σηματοδότης Τροχιάς (σηματοφόρος){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Μονόδρομοι σηματοδότες τροχιάς δεν μπορούν να περαστούν από την πίσω πλευρά.
|
||||
STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Σηματοδότης Τμήματος (ηλεκτρικός){}Αυτός είναι ο πιο βασικός τύπος σηματοδότη, επιτρέποντας μόνο ένα τρένο να είναι στο ίδιο τμήμα την ίδια στιγμή.
|
||||
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Σηματοδότης Εισόδου (ηλεκτρικός){}Πράσινο όσο υπάρχει ένας ή περισσότεροι πράσινοι σηματοδότες εξόδου στο επόμενο τμήμα γραμμής. Διαφορετικά είναι κόκκινο
|
||||
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Σηματοδότης Εξόδου (ηλεκτρικός){}Συμπεριφέρεται με τον ίδιο τρόπο όπως οι σηματοδότες τμήματος αλλά είναι απαραίτητο να θέσει το σωστό χρώμα στους προ-σηματοδότες εισόδου και συνδυαστικούς
|
||||
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (ηλεκτρικός){}Ο συνδυαστικός σηματοδότης δουλεύει απλά ως σηματοδότης εισόδου και εξόδου ταυτόχρονα. Αυτό σας επιτρέπει το κτίσιμο μεγάλων «δέντρων» με προ-σηματοδότες
|
||||
STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Συνδυαστικός Σηματοδότης (ηλεκτρικός){}Ο συνδυαστικός σηματοδότης δουλεύει απλά ως σηματοδότης εισόδου και εξόδου ταυτόχρονα. Αυτό σας επιτρέπει την κατασκευή μεγάλων «δέντρων» με προ-σηματοδότες
|
||||
STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Κανονικοί σηματοδότες τροχιάς μπορούν να περαστούν από την πίσω πλευρά
|
||||
STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Μονόδρομος Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Μονόδρομοι σηματοδότες τροχιάς δεν μπορούν να περαστούν από την πίσω πλευρά
|
||||
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπή σήματος{}Κάντε κλικ σε ένα υπάρχον σήμα για να το μετατρέψετε στον επιλεγμένο τύπο και παραλλαγή. Ctrl+Click για εναλλαγή της υπάρχουσας παραλλαγής. Το Shift+Click εμφανίζει το εκτιμώμενο κόστος μετατροπής
|
||||
STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπή σήματος{}Κάντε κλικ σε ένα υπάρχον σήμα για να το μετατρέψετε στον επιλεγμένο τύπο και παραλλαγή. Ctrl+Κλικ για εναλλαγή της υπάρχουσας παραλλαγής. Το Shift+Κλικ εμφανίζει το εκτιμώμενο κόστος μετατροπής
|
||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Απόσταση μεταξύ σηματοδοτών με σύρσιμο
|
||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Μείωση απόστασης μεταξύ σηματοδοτών με σύρσιμο
|
||||
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Αύξηση απόστασης μεταξύ σηματοδοτών με σύρσιμο
|
||||
@@ -2979,7 +2979,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Κατα
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Κατασκευή τούνελ δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Κατασκευή τούνελ τροχιοδρόμου. Επιπρόσθετα πατήστε το Shift για εμφάνιση εκτίμησης κόστους μόνο
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Εναλλαγή κατασκευής/αφαίρεσης για αυτοκινητόδρομους
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Εναλλαγή κτισίματος/αφαίρεσης της κατασκευής τροχιόδρομου
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Εναλλαγή προσθήκης/αφαίρεσης για την κατασκευή τροχιόδρομου
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του δρόμου. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο
|
||||
STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Μετατρέψτε/Αναβαθμίστε τον τύπο του τραμ. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο
|
||||
|
||||
@@ -3058,7 +3058,7 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Αγορ
|
||||
# Object construction window
|
||||
STR_OBJECT_BUILD_CAPTION :{WHITE}Επιλογή Αντικείμενου
|
||||
STR_OBJECT_BUILD_TOOLTIP :{BLACK}Επιλογή αντικείμενου για κατασκευή. Ctrl+Κλικ+Σύρσιμο για διαγώνια επιλογή. Επιπρόσθετα, με Shift εμφανίζεται εκτίμηση κόστους μόνο
|
||||
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Επιλογή της κατηγορίας του αντικείμενου για κτίσιμο
|
||||
STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Επιλογή της κατηγορίας του αντικείμενου για κατασκευή
|
||||
STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Προεπισκόπηση του αντικείμενου
|
||||
STR_OBJECT_BUILD_SIZE :{BLACK}Μέγεθος: {GOLD}{NUM} x {NUM} τετράγωνα
|
||||
|
||||
@@ -3135,7 +3135,7 @@ STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Γέμι
|
||||
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Δημιουργία τυχαίων βιομηχανιών
|
||||
STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Σίγουρα θέλετε να δημιουργήσετε πολλές τυχαίες βιομηχανίες;
|
||||
STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Κόστος: {YELLOW}{CURRENCY_LONG}
|
||||
STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Διερεύνηση
|
||||
STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Προοπτική
|
||||
STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Κατασκευή
|
||||
STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Χρηματοδότηση
|
||||
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Αφαίρεση όλων των βιομηχανιών
|
||||
@@ -3379,7 +3379,7 @@ STR_SAVELOAD_OSKTITLE :{BLACK}Δώστ
|
||||
# World generation
|
||||
STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Δημιουργία Κόσμου
|
||||
STR_MAPGEN_MAPSIZE :{BLACK}Διάσταση χάρτη:
|
||||
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Επιλέξτε το μέγεθος του χάρτη σε τετραγωνίδια. Ο αριθμός των τετραγωνίδιων διαθέσιμα για κτίσιμο θα είναι λίγο χαμηλότερος
|
||||
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Επιλέξτε το μέγεθος του χάρτη σε τετραγωνίδια. Ο αριθμός των τετραγωνίδιων διαθέσιμα για κατασκευή θα είναι λίγο χαμηλότερος
|
||||
STR_MAPGEN_BY :{BLACK}*
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Αριθμός πόλεων:
|
||||
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :Επιλέξτε την πυκνότητα των πόλεων ή έναν προσαρμοσμένο αριθμό
|
||||
@@ -3748,7 +3748,7 @@ STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Μικρή δι
|
||||
STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Μεσαία διαφημιστική καμπάνια
|
||||
STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Μεγάλη διαφημιστική καμπάνια
|
||||
STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Επιχορήγηση ανακατασκευής τοπικού οδικού δικτύου
|
||||
STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Κτίσιμο αγάλματος του ιδιοκτήτη της εταιρίας
|
||||
STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Κατασκευή αγάλματος του ιδιοκτήτη της εταιρίας
|
||||
STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Επιχορήγηση νέων κτιρίων
|
||||
STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Αγορά αποκλειστικών δικαιωμάτων μεταφοράς
|
||||
STR_LOCAL_AUTHORITY_ACTION_BRIBE :Δωροδοκήστε την τοπική αρχή
|
||||
@@ -3759,7 +3759,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{Y
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Έναρξη μεγάλης τοπικής διαφημιστικής καμπάνιας, για να προσελκύσετε περισσότερους επιβάτες και εμπορεύματα στις μεταφορικές σας υπηρεσίες.{}Παρέχει μία προσωρινή ώθηση στην βαθμολογία σταθμού σε μία μεγάλη ακτίνα γύρω από το κέντρο της πόλης.{}{POP_COLOUR} Κόστος: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την ανακατασκευή του αστικού οδικού δικτύου.{}Προκαλεί σημαντική αναστάτωση της οδικής κυκλοφορίας για έως και 6 μήνες.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την ανακατασκευή του αστικού οδικού δικτύου.{}Προκαλεί σημαντική αναστάτωση της οδικής κυκλοφορίας για έως και 6 λεπτά.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Χτίστε ένα άγαλμα προς τιμήν της εταιρίας σας.{}Παρέχει μία μόνιμη ώθηση στην βαθμολογία σταθμών σε αυτή την πόλη.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Κατασκευάστε ένα άγαλμα προς τιμήν της εταιρίας σας.{}Παρέχει μία μόνιμη ώθηση στην βαθμολογία σταθμών σε αυτή την πόλη.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Χρηματοδοτήστε την κατασκευή νέων κτιρίων στην πόλη.{}Παρέχει μια προσωρινή ώθηση στην ανάπτυξη αυτής της πόλης.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Αγοράστε αποκλειστικά δικαιώματα μεταφοράς στην πόλη για 12 μήνες.{}Η δημοτική αρχή δεν θα επιτρέψει στους επιβάτες και στο φορτίο να χρησιμοποιούν τους σταθμούς των ανταγωνιστών σας. Μια επιτυχημένη δωροδοκία από έναν ανταγωνιστή θα ακυρώσει αυτό το συμβόλαιο.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG}
|
||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Αγοράστε αποκλειστικά δικαιώματα μεταφοράς στην πόλη για 12 λεπτά.{}Η δημοτική αρχή δεν θα επιτρέψει στους επιβάτες και στο φορτίο να χρησιμοποιούν τους σταθμούς των ανταγωνιστών σας. Μια επιτυχημένη δωροδοκία από έναν ανταγωνιστή θα ακυρώσει αυτό το συμβόλαιο.{}{POP_COLOUR}Κόστος: {CURRENCY_LONG}
|
||||
@@ -3988,8 +3988,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA}
|
||||
STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} αεροδρόμι{P ο α}
|
||||
STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Τίποτα
|
||||
|
||||
STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Κτίσιμο Αρχηγείου
|
||||
STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Κτίσιμο αρχηγείου εταιρίας
|
||||
STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Κατασκευή Αρχηγείου
|
||||
STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Κατασκευή αρχηγείου εταιρίας
|
||||
STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Προβολή Αρχηγείου
|
||||
STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Προβολή αρχηγείου εταιρίας
|
||||
STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Ανοικοδόμηση Αρχηγείου
|
||||
@@ -4014,7 +4014,7 @@ STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Όνομα Ετ
|
||||
STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Όνομα Διευθυντή
|
||||
STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Εισάγετε το χρηματικό ποσό που θέλετε να δώσετε
|
||||
|
||||
STR_BUY_COMPANY_MESSAGE :{WHITE}Ψάχνουμε μία εταιρία μεταφορών για να εξαγοράσει την εταιρία μας.{}{}Θέλετε να εξαγοράσετε την {COMPANY} για {CURRENCY_LONG};
|
||||
STR_BUY_COMPANY_MESSAGE :{WHITE}Αναζητούμε μια εταιρία μεταφορών για να εξαγοράσει την εταιρία μας.{}{}Θέλετε να εξαγοράσετε την {COMPANY} για {CURRENCY_LONG};
|
||||
STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Σε μια εχθρική εξαγορά της {COMPANY} θα αγοράσετε όλα τα περιουσιακά στοιχεία, θα εξοφλήσετε όλα τα δάνεια και θα πληρώσετε κέρδη δύο ετών.{}{}Το σύνολο εκτιμάται ότι είναι {CURRENCY_LONG}.{}{}Θέλετε να προχωρήσετε με αυτήν την εχθρική εξαγορά;
|
||||
|
||||
# Company infrastructure window
|
||||
@@ -4429,7 +4429,7 @@ STR_REPLACE_TRAM_VEHICLES :Οχήματα
|
||||
|
||||
STR_REPLACE_REMOVE_WAGON :{BLACK}Αφαίρεση βαγονιού: ({STRING}): {ORANGE}{STRING}
|
||||
STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Υποχρεώνει την αυτόματη αντικατάσταση να διατηρεί σταθερό το μήκος του τρένου αφαιρώντας βαγόνια (ξεκινώντας από μπροστά), όταν η αντικατάσταση της μηχανής κάνει το τρένο μεγαλύτερο
|
||||
STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Πατήστε Ctrl+Click για εφαρμογή επίσης στην υπό-ομάδα
|
||||
STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Πατήστε Ctrl+Κλικ για εφαρμογή επίσης στην υπό-ομάδα
|
||||
|
||||
# Vehicle view
|
||||
STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE}
|
||||
@@ -4553,12 +4553,12 @@ STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Διάσ
|
||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Διάστημα επισκευών: {LTBLUE}{COMMA}%{BLACK} {STRING}
|
||||
STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Τελευταίο service: {LTBLUE}{DATE_LONG}
|
||||
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Τελευταίο service: {LTBLUE}{NUM} λεπτ{P 0 ό ά} πριν
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 10 ημέρες. Ctrl+Click για αύξηση του διαστήματος συντήρησης κατά 5 ημέρες
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 5 λεπτά. Ctrl+Click για αύξηση του διαστήματος συντήρησης κατά 1 λεπτό
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Αύξηση του διαστήματος εξυπηρέτησης κατά 10 τοις εκατό. Ctrl+Click για αύξηση του διαστήματος εξυπηρέτησης κατά 5 τοις εκατό
|
||||
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 ημέρες. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 ημέρες
|
||||
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :Μειώστε το διάστημα μεταξύ των σέρβις κατά 5 λεπτά. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 1 λεπτό
|
||||
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 τοις εκατό. Ctrl+Click για να μειώσετε το διάστημα συντήρησης κατά 5 τοις εκατό.
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 10 ημέρες. Ctrl+Κλικ για αύξηση του διαστήματος συντήρησης κατά 5 ημέρες
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Αύξηση του διαστήματος συντήρησης κατά 5 λεπτά. Ctrl+Κλικ για αύξηση του διαστήματος συντήρησης κατά 1 λεπτό
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Αύξηση του διαστήματος εξυπηρέτησης κατά 10 τοις εκατό. Ctrl+Κλικ για αύξηση του διαστήματος εξυπηρέτησης κατά 5 τοις εκατό
|
||||
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 ημέρες. Ctrl+Κλικ για να μειώσετε το διάστημα συντήρησης κατά 5 ημέρες
|
||||
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Μειώστε το διάστημα μεταξύ των σέρβις κατά 5 λεπτά. Ctrl+Κλικ για να μειώσετε το διάστημα συντήρησης κατά 1 λεπτό
|
||||
STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Μειώστε το διάστημα μεταξύ των σέρβις κατά 10 τοις εκατό. Ctrl+Κλικ για να μειώσετε το διάστημα συντήρησης κατά 5 τοις εκατό.
|
||||
|
||||
STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Αλλάξτε τον τύπο διαστήματος επισκευών
|
||||
STR_VEHICLE_DETAILS_DEFAULT :Προκαθορισμένο
|
||||
@@ -4632,7 +4632,7 @@ STR_ORDER_INDEX :{COMMA}:{NBSP}
|
||||
STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING}
|
||||
|
||||
STR_ORDERS_END_OF_ORDERS :- - Τέλος Εντολών - -
|
||||
STR_ORDERS_END_OF_SHARED_ORDERS :- - Τέλος Μοιρασμένων Οδηγιών - -
|
||||
STR_ORDERS_END_OF_SHARED_ORDERS :- - Τέλος Διαμοιρασμένων Εντολών - -
|
||||
|
||||
# Order bottom buttons
|
||||
STR_ORDER_NON_STOP :{BLACK}Χωρίς στάση
|
||||
@@ -4717,7 +4717,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Πήγαινε
|
||||
STR_ORDER_GO_TO_NEAREST_HANGAR :Πήγαινε στο κοντινότερο υπόστεγο
|
||||
STR_ORDER_CONDITIONAL :Εκτέλεση εντόλης υπο προυπόθεση
|
||||
STR_ORDER_SHARE :Μοίρασμα εντολών
|
||||
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Εισάγετε μια νέα εντολή πριν την επιλεγμένη ή προσθέστε στο τέλος της λίστας. Ctrl+Κλικ σε έναν σταθμό για ορισμό εντολής σε "πλήρης φόρτωση οποιουδήποτε εμπορεύματος", σε σημείο διαδρομής για αντιστροφή εντολής "χωρίς στάση εξ ορισμού" ή σε αμαξοστάσιο για "αποσύνδεση". Κάντε κλικ σε άλλο όχημα για να αντιγράψετε τις εντολές του ή Ctrl+Click για διαμοιρασμό εντολών. Μια εντολή αμαξοστασίου απενεργοποιεί την αυτόματη συντήρηση του οχήματος
|
||||
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Εισάγετε μια νέα εντολή πριν την επιλεγμένη ή προσθέστε στο τέλος της λίστας. Ctrl+Κλικ σε έναν σταθμό για ορισμό εντολής σε "πλήρης φόρτωση οποιουδήποτε εμπορεύματος", σε σημείο διαδρομής για αντιστροφή εντολής "χωρίς στάση εξ ορισμού" ή σε αμαξοστάσιο για "αποσύνδεση". Κάντε κλικ σε άλλο όχημα για να αντιγράψετε τις εντολές του ή Ctrl+Κλικ για διαμοιρασμό εντολών. Μια εντολή αμαξοστασίου απενεργοποιεί την αυτόματη συντήρηση του οχήματος
|
||||
|
||||
STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Εμφάνιση όλων των οχημάτων που μοιράζονται αυτό το δρομολόγιο
|
||||
|
||||
@@ -4825,7 +4825,7 @@ STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Αυτό
|
||||
STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Αυτό το δρομολόγιο θα ξεκινήσει σε {COMMA} δευτερόλεπτα
|
||||
|
||||
STR_TIMETABLE_START :{BLACK}Εκκίνηση δρομολογίου
|
||||
STR_TIMETABLE_START_TOOLTIP :{BLACK}Επιλέξτε πότε ξεκινά αυτό το δρομολόγιο. Ctrl+Click για ομοιόμορφη κατανομή της εκκίνησης όλων των οχημάτων που μοιράζονται αυτήν την εντολή με βάση τη σχετική τους εντολή, εάν η εντολή είναι πλήρως προγραμματισμένη
|
||||
STR_TIMETABLE_START_TOOLTIP :{BLACK}Επιλέξτε πότε ξεκινά αυτό το δρομολόγιο. Ctrl+Κλικ για ομοιόμορφη κατανομή της εκκίνησης όλων των οχημάτων που μοιράζονται αυτήν την εντολή με βάση τη σχετική τους εντολή, εάν η εντολή είναι πλήρως προγραμματισμένη
|
||||
|
||||
STR_TIMETABLE_START_SECONDS_QUERY :Δευτερόλεπτα μέχρι την έναρξη του δρομολογίου
|
||||
|
||||
@@ -4913,7 +4913,7 @@ STR_AI_CONFIG_AI :{SILVER}AI
|
||||
|
||||
STR_AI_CONFIG_CHANGE_AI :{BLACK}Διάλεξε ΤΝ
|
||||
STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Δέσμη Ενεργειών
|
||||
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Φόρτωση άλλης δέσμης ενεργειών. Ctrl+Click για εμφάνιση όλων των διαθέσιμων εκδόσεων
|
||||
STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Φόρτωση άλλης δέσμης ενεργειών. Ctrl+Κλικ για εμφάνιση όλων των διαθέσιμων εκδόσεων
|
||||
STR_AI_CONFIG_CONFIGURE :{BLACK}Ρυθμίσεις
|
||||
STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Ρύθμιση των παραμέτρων της Δέσμης Ενεργειών
|
||||
|
||||
@@ -4999,9 +4999,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Υπολ
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Η αποθήκευση είναι σε εξέλιξη,{}παρακαλώ περιμένετε να τελειώσει!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Η αυτόματη αποθήκευση απέτυχε
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Αδύνατη η ανάγνωση του δίσκου
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Η Αποθήκευση Παιχνιδιού Απέτυχε{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Η αποθήκευση του παιχνιδιού απέτυχε...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Αδύνατη η διαγραφή του αρχείου
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Η Φόρτωση Παιχνιδιού Απέτυχε{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Το φόρτωμα του παιχνιδιού απέτυχε...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Εσωτερικό λάθος: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Χαλασμένο αποθηκευμένο παιχνίδι - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Το αποθηκευμένο παιχνίδι είναι φτιαγμένο με νεότερη έκδοση
|
||||
@@ -5054,7 +5054,7 @@ STR_ERROR_CAN_T_DO_THIS :{WHITE}Αυτό
|
||||
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Το κτίριο πρέπει πρώτα να κατεδαφιστεί
|
||||
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Είναι αδύνατο να καθαριστεί αυτή η περιοχή...
|
||||
STR_ERROR_SITE_UNSUITABLE :{WHITE}... ακατάλληλη περιοχή
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... ήδη κτισμένο
|
||||
STR_ERROR_ALREADY_BUILT :{WHITE}... ήδη κατασκευασμένο
|
||||
STR_ERROR_OWNED_BY :{WHITE}... ιδιοκτησία του {STRING}
|
||||
STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... η περιοχή είναι ιδιοκτησία άλλης εταιρίας
|
||||
STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... υπερβαίνει το όριο διαμόρφωσης του εδάφους
|
||||
@@ -5092,12 +5092,12 @@ STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Αδύν
|
||||
STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Δεν είναι δυνατό να δοθούν χρήματα που είναι δανεισμένα από τη τράπεζα...
|
||||
STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Δεν μπορείτε να δώσετε χρήματα σε αυτή την εταιρία...
|
||||
STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Αδύνατη η εξαγορά της εταιρίας...
|
||||
STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Δεν μπορεί να κτιστεί αρχηγείο εταιρίας...
|
||||
STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Δεν μπορεί να κατασκευαστεί αρχηγείο εταιρίας...
|
||||
|
||||
# Town related errors
|
||||
STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Αδύνατο να κατασκευαστούν πόλεις...
|
||||
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Δεν μπορεί να μετονομαστεί η πόλη...
|
||||
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Αδύνατο να κτιστεί πόλη εδώ...
|
||||
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Αδύνατο να ιδρυθεί πόλη εδώ...
|
||||
STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Δεν μπορεί να γίνει επέκταση της πόλης...
|
||||
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... πολύ κοντά στην άκρη του χάρτη
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... πολύ κοντά σε άλλη πόλη
|
||||
@@ -5110,22 +5110,22 @@ STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... δε
|
||||
# Industry related errors
|
||||
STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... πάρα πολλές βιομηχανίες
|
||||
STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Δε γίνεται να δημιουργηθούν βιομηχανίες...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Δεν μπορεί να κτιστεί {G ο η το} {STRING} εδώ...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Δεν είναι δυνατό να κτιστεί αυτός ο τύπος βιομηχανίας εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί {G ο η το} {STRING} εδώ...
|
||||
STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Δεν είναι δυνατό να κατασκευαστεί αυτός ο τύπος βιομηχανίας εδώ...
|
||||
STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Δεν βρέθηκαν ευκαιρίες για τη βιομηχανία...
|
||||
STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... πολύ κοντά σε άλλη βιομηχανία
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... πρέπει να κτιστεί πόλη πρώτα
|
||||
STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... πρέπει να ιδρυθεί πόλη πρώτα
|
||||
STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... επιτρέπεται μόνο μία ανά πόλη
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... μπορεί να κτιστεί μόνο σε πόλεις με πληθυσμό άνω των 1200
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... μπορεί να κτιστεί μόνο σε δασώδεις περιοχές
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... μπορεί να κτιστεί μόνο σε ερημικές περιοχές
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... μπορεί να κτιστεί μόνο σε πόλεις (αντικαθιστώντας σπίτια)
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... μπορεί να κτιστεί μόνο κοντά σε κέντρα πόλεων
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... μπορεί να κτιστεί μόνο σε χαμηλές περιοχές
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... μπορεί να κατασκευαστεί μόνο σε πόλεις με πληθυσμό άνω των 1200
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... μπορεί να κατασκευαστεί μόνο σε δασώδεις περιοχές
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... μπορεί να κατασκευαστεί μόνο σε ερημικές περιοχές
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... μπορεί να κατασκευαστεί μόνο σε πόλεις (αντικαθιστώντας σπίτια)
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... μπορεί να κατασκευαστεί μόνο κοντά σε κέντρα πόλεων
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... μπορεί να κατασκευαστεί μόνο σε χαμηλές περιοχές
|
||||
STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... μπορούν να τοποθετηθούν μόνο στις άκρες του χάρτη
|
||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... δάση μπορούν να φυτευτούν μόνο πάνω από τη γραμμή του χιονιού
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... μπορεί να κτιστεί μόνο πάνω από τη γραμμή του χιονιού
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... μπορεί να κτιστεί μόνο κάτω από τη γραμμή του χιονιού
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... μπορεί να κατασκευαστεί μόνο πάνω από τη γραμμή του χιονιού
|
||||
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... μπορεί να κατασκευαστεί μόνο κάτω από τη γραμμή του χιονιού
|
||||
|
||||
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Η χρηματοδότηση απέτυχε να προσκομήσει αποτελέσματα λόγω κακής τύχης· δοκιμάστε ξάνα
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Δεν υπήρχαν κατάλληλα μέρη για προοπτική για αυτόν τον κλάδο
|
||||
@@ -5133,13 +5133,13 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Δεν
|
||||
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Αλλαγή παραμέτρων δημιουργίας χάρτη για καλύτερα αποτελέσματα
|
||||
|
||||
# Station construction related errors
|
||||
STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Δεν μπορεί να κτιστεί σταθμός τρένων εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Δεν μπορεί να κτιστεί στάση λεωφορείων...
|
||||
STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Δεν μπορεί να κτιστεί σταθμός φορτηγών...
|
||||
STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Δεν μπορεί να κτιστεί επιβατικός σταθμός τραμ...
|
||||
STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Δεν μπορεί να κτιστεί σταθμός τραμ...
|
||||
STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Δεν μπορεί να κτιστεί λιμένας εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Δεν μπορεί να κτιστεί αεροδρόμιο εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμός τρένων εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί στάση λεωφορείων...
|
||||
STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμός φορτηγών...
|
||||
STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί επιβατικός σταθμός τραμ...
|
||||
STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμός τραμ...
|
||||
STR_ERROR_CAN_T_BUILD_DOCK_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί λιμένας εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί αεροδρόμιο εδώ...
|
||||
|
||||
STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Γειτονεύει με περισσότερες από μια υπάρχουσες περιοχές σταθμών/φόρτωσης
|
||||
STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... ο σταθμός είναι υπερβολικά απλωμένος
|
||||
@@ -5177,7 +5177,7 @@ STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Πρέπ
|
||||
STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Προστίθεται σε περισσότερο από ένα υπάρχον σημείο καθοδήγησης
|
||||
STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Πολύ κοντά σε άλλο σημείο καθοδήγησης
|
||||
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Δεν μπορεί να χτιστεί σημείο καθοδήγησης τρένου εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Δεν μπορεί να κατασκευαστεί σημείο καθοδήγησης τρένου εδώ...
|
||||
STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Δεν μπορεί να τοποθετηθεί σημαδούρα εδώ...
|
||||
STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Αδύνατο να αλλαχτεί το όνομα του σημείου καθοδήγησης...
|
||||
|
||||
@@ -5187,10 +5187,10 @@ STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... ση
|
||||
STR_ERROR_BUOY_IS_IN_USE :{WHITE}... σημαδούρα σε χρήση από άλλη εταιρία!
|
||||
|
||||
# Depot related errors
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Δεν μπορεί να κτιστεί αμαξοστάσιο εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Δεν μπορεί να κτιστεί σταθμός οχημάτων εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Δεν μπορεί να κτιστεί σταθμαρχείο τραμ εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Δεν μπορεί να κτιστεί ναυπηγείο πλοίων εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Δεν μπορεί να κατασκευαστεί αμαξοστάσιο εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμός οχημάτων εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Δεν μπορεί να κατασκευαστεί σταθμαρχείο τραμ εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Δεν μπορεί να κατασκευαστεί ναυπηγείο πλοίων εδώ...
|
||||
|
||||
STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Δεν μπορεί να μετονομαστεί το αμαξοστάσιο/ναυπηγείο...
|
||||
|
||||
@@ -5235,7 +5235,7 @@ STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Η δρ
|
||||
STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Δεν επιτρέπονται ισόπεδες διασταυρώσεις για αυτόν τον τύπο σιδηροδρόμου
|
||||
STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Οι ισόπεδες διαβάσεις δεν επιτρέπονται για αυτό τον τύπο δρόμου
|
||||
STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Δεν μπορούν να τοποθετοηθούν σηματοδότες εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Δεν μπορεί να κτιστεί σιδηρόδρομος εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Δεν μπορεί να κατασκευαστεί σιδηρόδρομος εδώ...
|
||||
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Δεν μπορεί να αφαιρεθεί σιδηρόδρομος από εδώ...
|
||||
STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Αδύνατο να αφαιρεθούν σηματοδότες από εδώ...
|
||||
STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Δεν μπορούν να μετατραπούν οι σηματοδότες εδώ...
|
||||
@@ -5247,8 +5247,8 @@ STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Δε γ
|
||||
# Road construction errors
|
||||
STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Πρέπει πρώτα να αφαιρεθεί ο δρόμος
|
||||
STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... οι μονόδρομοι δεν μπορούν να έχουν διασταυρώσεις
|
||||
STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Δεν μπορεί να κτιστεί δρόμος εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Δεν μπορεί να κτιστεί τροχιοδρόμος εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί δρόμος εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί τροχιοδρόμος εδώ...
|
||||
STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Αδύνατο να αφαιρεθεί δρόμος από εδώ...
|
||||
STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Δεν μπορεί να αφαιρεθεί τροχιόδρομος από εδώ...
|
||||
STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... δεν υπάρχει δρόμος
|
||||
@@ -5259,16 +5259,16 @@ STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Δεν
|
||||
STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Καμία κατάλληλη γραμμή του τραμ
|
||||
|
||||
# Waterway construction errors
|
||||
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Δεν μπορεί να κτιστεί κανάλι εδώ
|
||||
STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Δεν μπορεί να κτιστεί υδατοφράκτης εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Δεν μπορεί να κατασκευαστεί κανάλι εδώ
|
||||
STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Δεν μπορεί να κατασκευαστεί υδατοφράκτης εδώ...
|
||||
STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Δεν μπορούν να τοποθετηθούν ποτάμια εδώ...
|
||||
STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... πρέπει να κτιστεί στο νερό
|
||||
STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... αδύνατο να κτιστεί στο νερό
|
||||
STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... αδύνατο να κτιστεί στην ανοικτή θάλασσα
|
||||
STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... αδύνατο να κτιστεί σε κανάλι
|
||||
STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... αδύνατο να κτιστεί σε ποτάμι
|
||||
STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... πρέπει να κατασκευαστεί στο νερό
|
||||
STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... αδύνατο να κατασκευαστεί στο νερό
|
||||
STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... αδύνατο να κατασκευαστεί στην ανοικτή θάλασσα
|
||||
STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... αδύνατο να κατασκευαστεί σε κανάλι
|
||||
STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... αδύνατο να κατασκευαστεί σε ποτάμι
|
||||
STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Πρέπει να κατεδαφιστεί το κανάλι πρώτα
|
||||
STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Δεν μπορεί να κτιστεί κανάλι εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί κανάλι εδώ...
|
||||
|
||||
# Tree related errors
|
||||
STR_ERROR_TREE_ALREADY_HERE :{WHITE}... υπάρχει ήδη δέντρο εδώ
|
||||
@@ -5276,7 +5276,7 @@ STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE :{WHITE}... λά
|
||||
STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Δεν γίνεται να φυτευτεί δέντρο εδώ...
|
||||
|
||||
# Bridge related errors
|
||||
STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Δεν μπορεί να κτιστεί γέφυρα εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί γέφυρα εδώ...
|
||||
STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Πρέπει πρώτα να καταστραφεί η γέφυρα
|
||||
STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Δεν γίνεται να ξεκινάει και να τελειώνει στο ίδιο σημείο
|
||||
STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Η γέφυρα δεν καταλήγει στο ίδιο επίπεδο
|
||||
@@ -5288,7 +5288,7 @@ STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... η
|
||||
STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Η γέφυρα θα καταλήξει εκτός χάρτη
|
||||
|
||||
# Tunnel related errors
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Δεν μπορεί να κτιστεί τούνελ εδώ...
|
||||
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Δεν μπορεί να κατασκευαστεί τούνελ εδώ...
|
||||
STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Ακατάλληλη τοποθεσία για είσοδο τούνελ
|
||||
STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Πρέπει πρώτα να καταστραφεί το τούνελ
|
||||
STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Υπάρχει άλλο τούνελ στη μέση
|
||||
@@ -5298,10 +5298,10 @@ STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... το
|
||||
|
||||
# Object related errors
|
||||
STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... πάρα πολλά αντικείμενα
|
||||
STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Δεν μπορεί να κτιστεί το αντικείμενο...
|
||||
STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Δεν μπορεί να κατασκευαστεί το αντικείμενο...
|
||||
STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Αντικείμενο στη μέση
|
||||
STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... κεντρικά γραφεία εταιρίας στη μέση
|
||||
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Αδύνατο να αγοραστεί το έδαφος...
|
||||
STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Αδύνατο να γίνει αγορά αυτής της περιοχής εδάφους...
|
||||
STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... είστε ήδη ιδιοκτήτης!
|
||||
STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... έχετε φτάσει το όριο οικοδομήσεων
|
||||
|
||||
@@ -5354,10 +5354,10 @@ STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Δεν
|
||||
STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Δεν μπορεί να σταλθεί το αεροσκάφος στο υπόστεγο...
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Δεν μπορεί να αγοραστεί όχημα σιδηρόδρομου...
|
||||
STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Δεν μπορεί να αγοραστεί όχημα δρόμου...
|
||||
STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Δεν μπορεί να αγοραστεί πλοίο...
|
||||
STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Δεν μπορεί να αγοραστεί αεροσκάφος...
|
||||
STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Δεν μπορεί να γίνει αγορά οχήματος σιδηροδρόμου...
|
||||
STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Δεν μπορεί να γίνει αγορά οχήματος δρόμου...
|
||||
STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Δεν μπορεί να γίνει αγορά πλοίου...
|
||||
STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Δεν μπορεί να γίνει αγορά αεροσκάφους...
|
||||
|
||||
###length VEHICLE_TYPES
|
||||
STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Δεν μπορεί να μετονομαστεί ο τύπος τρένου...
|
||||
|
@@ -4320,9 +4320,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}{CURRENC
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}!שמירה מתבצעת,{} אנא המתן עד לסיום השמירה
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}שמירה אוטומטית נכשלה
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}לא ניתן לקרוא מהדיסק
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}שמירת המשחק נכשלה{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}לא ניתן למחוק את הקובץ
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}טעינת המשחק נכשלה{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :שגיאה פנימית: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :קובץ השמיקה פגום - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :קובץ השמירה נשמר עם גירסא חדישה יותר של המשחק
|
||||
|
@@ -4960,9 +4960,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Becsült
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}A mentés még tart,{}kérlek várd meg a végét!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatikus mentés sikertelen
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nem olvasható a meghajtó
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}A mentés nem sikerült{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nem sikerült törölni a fájlt
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}A betöltés nem sikerült{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Belső hiba: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Hibás játékállás-mentés - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :A játékállást újabb verzió mentette el
|
||||
|
@@ -3902,9 +3902,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Áætla
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Vistun er enn í gangi,{}vinsamlegast bíddu á meðan hún klárst!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Sjálfvirk vistun mistókst
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Get ekki lesið af drifi
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Vistun leiks mistókst{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Get ekki eytt skrá
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Mistókst að opna leik{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Innri villa: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bilun í vistuðum leik - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Leikur er vistaður í nýrri útgáfu
|
||||
|
@@ -4785,9 +4785,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Perkiraa
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Penyimpanan sedang berlangsung,{}mohon tunggu hingga selesai
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Simpan otomatis gagal
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Tidak dapat membaca drive
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Penyimpanan Game gagal{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tidak mampu untuk menghapus file/berkas
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Gagal membuka permainan{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Kesalahan Internal: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Berkas simpanan permainan rusak - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Berkas simpanan dibuat dari versi yang lebih baru
|
||||
|
@@ -4494,9 +4494,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ioncam M
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Fós ag sábháil,{}fan go mbeidh sé críochnaithe!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Theip ar uathshábháil
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Ní féidir an tiomántán a léamh
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Theip ar Shábháil Cluiche{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ní féidir comhad a scriosadh
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Theip ar Lódáil Cluiche{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Earráid inmheánach: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Cluiche sábháilte briste - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Rinneadh an cluiche sábháilte le leagan níos nuaí
|
||||
|
@@ -4938,9 +4938,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ricavo s
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Salvataggio in corso,{}prego attenderne la fine!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvataggio automatico non riuscito
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossibile leggere dall'unità
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvataggio non riuscito{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossibile eliminare il file
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Caricamento non riuscito{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Errore interno: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Salvataggio danneggiato - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvataggio creato con una versione più recente
|
||||
|
@@ -4612,9 +4612,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}収益(
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}ゲームを保存しています{}完了までしばらくお待ちください!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}自動保存に失敗しました
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}ドライブを読み込めません
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}ゲームの保存に失敗しました{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}ファイルを削除できません
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}ゲームの読み込みに失敗しました{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :内部エラー: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :破損したセーブゲーム: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :このファイルは上位のバージョンによって保存されたものです
|
||||
|
@@ -4900,9 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}예상
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}저장 중입니다.{}끝날 때까지 기다려주세요!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}자동 저장 실패
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}드라이브를 읽을 수 없습니다
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}게임 저장 실패{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}게임을 저장하지 못 했습니다...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}파일을 삭제할 수 없습니다
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}게임 불러오기 실패{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}게임을 불러오지 못 했습니다...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :내부 오류: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :손상된 게임 저장 파일 - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :상위 버전의 게임 저장 파일입니다
|
||||
|
@@ -4392,9 +4392,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Reditus
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Adhuc in servando,{}maneas usque ad terminum!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autoservare defecit
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Non poterat discum legere
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Servare Ludum Defecit{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Non poterat fasciculum delere
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Legere Ludum Defecit{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Mendum internum: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ludus corruptus - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Ludus servatus est in editione noviore
|
||||
|
@@ -4908,9 +4908,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Plānoti
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Notiek saglabāšana,{}lLūdzu uzgaidiet!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automātiskā saglabāšana neizdevās
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nevar lasīt disku
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spēles saglabāšana neizdevās{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nevar dzēst failu
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Spēles ielādēšana neizdevās{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Iekšēja kļūda: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bojāts saglabātās spēles fails - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spēle ir saglabāta ar jaunāku versiju
|
||||
|
@@ -4817,9 +4817,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Numatomo
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Vyksta išsaugojimas,{}palaukite kol baigsis!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatinis išsaugojimas nepavyko
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Negali pasiekti disko
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Žaidimo išsaugoti nepavyko{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Failo ištrinti nepavyko
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Žaidimo atverti nepavyko{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Vidinė klaida: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Sugadintas išsaugotas žaidimas - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Išsaugotas žaidimas iš naujesnės versijos
|
||||
|
@@ -4896,9 +4896,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Geschät
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Nach amgaangen ze späicheren.{} W.e.g. waarde bis daat fäerdeg ass!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fehler beim Autospäicheren
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kann net um Laafwierk liesen
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fehler beim Späicheren{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kann d'Datei net läschen
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fehler beim Lueden{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne Feeler: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Futtissen Späicherstand - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillstand ass mat enger méi neier Versioun gemaach
|
||||
|
@@ -3808,9 +3808,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Jangkaan
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Penyimpanan sedang berlaku,{}sila tunggu sehingga selesai!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Penyimpanan automatik gagal dilakukan
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Gagal dalam membaca cakera
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Penyimpanan Permainan Gagal{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tidak boleh memadamkan fail
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Pembukaan Permainan Gagal{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Kesilapan dalaman: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Simpanan permainan yang rosak - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Simpanan permainan ini telah dibuat dengan versi yang lebih baru
|
||||
|
@@ -4901,9 +4901,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Anslått
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Lagring pågår enda,{}vennligst vent til den er klar!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatisk lagring mislyktes
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke lese fra disk
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lagring av spillet mislyktes{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lagring av spillet mislyktes...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lasting av spill mislyktes{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lasting av spill mislyktes...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern feil: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt lagret spill - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er lagret i en nyere versjon
|
||||
|
@@ -4036,9 +4036,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Berekna
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Lagring foregår framleis,{}ver venleg å vente til det er ferdig!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autolagring gjekk gale
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikkje lese frå disk
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lagring av spelet mislukkast{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikkje slette fil
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Feil ved henting av spel{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern feil: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Øydelagd lagra spel - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spelet er lagra i ein nyare versjon
|
||||
|
@@ -3494,9 +3494,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}در آ
|
||||
|
||||
# Saveload messages
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}درایو خوانده می شود
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}بازی ذخیره نشد{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}فایل حذف نمی شود
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}بازی بارگزاری نشد{}{STRING}
|
||||
|
||||
# Map generation messages
|
||||
|
||||
|
@@ -5285,9 +5285,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Szacowan
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Zapisywanie trwa,{}proszę zaczekać do zakończenia!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Błąd autozapisu
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nie można odczytać napędu
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Nie można zapisać gry{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Nie można zapisać gry...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nie można usunąć pliku
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nie można wczytać gry{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nie można wczytać gry...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Błąd wewnętrzny: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Zepsuta zapisana gra - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Zapisana gra zrobiona w nowszej wersji
|
||||
|
@@ -4900,9 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Lucro Es
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda em curso,{}por favor aguarde!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Falha ao guardar automaticamente
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler unidade
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao guardar jogo{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao guardar jogo...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível eliminar ficheiro
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao abrir jogo{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao carregar jogo...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ficheiro corrompido - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo gravado numa versão mais recente do jogo
|
||||
|
@@ -4892,9 +4892,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Venit es
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Salvarea se efectueaza încã,{}vã rugãm asteptati pânã se încheie!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Auto-salvarea a esuat
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Discul nu a putut fi citit
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvarea jocului eșuată{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ștergerea fișierului a eșuat
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Încărcarea jocului eșuată{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Eroare internă: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Salvare eronată - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvarea a fost făcută cu o versiune mai nouă
|
||||
|
@@ -2822,7 +2822,7 @@ STR_CONTENT_OPEN_URL :{BLACK}Веб-
|
||||
STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Посетить веб-сайт с информацией об этом модуле
|
||||
STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Скачать
|
||||
STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Начать загрузку выбранного контента
|
||||
STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Всего для загруки: {WHITE}{BYTES}
|
||||
STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Всего для загрузки: {WHITE}{BYTES}
|
||||
STR_CONTENT_DETAIL_TITLE :{SILVER}ИНФОРМАЦИЯ О КОНТЕНТЕ
|
||||
|
||||
###length 5
|
||||
@@ -5086,9 +5086,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Пред
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Идёт сохранение;{}пожалуйста, дождитесь завершения!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Ошибка автосохранения
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Не удалось прочитать диск
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Невозможно сохранить игру{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Невозможно сохранить игру...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Невозможно удалить файл
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Невозможно загрузить игру{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Невозможно загрузить игру...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Внутренняя ошибка: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Файл повреждён - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Сохранение сделано в более новой версии
|
||||
|
@@ -5004,9 +5004,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Procena
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Čuvanje je još u toku,{}molimo sačekaj dok se ne završi!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Neuspešno automatsko čuvanje
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Čitanje sa diska nije uspelo
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Čuvanje pozicije nije uspelo{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Brisanje datoteke nije uspelo
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Učitavanje pozicije nije uspelo{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Unutrašnja greška: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Neispravno sačuvana igra - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Igra je sačuvana sa novijom verzijom igre
|
||||
|
@@ -4899,9 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}预计
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}保存仍在继续{}请耐心等待……
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}自动保存失败
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}不能读取驱动器
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}保存游戏失败{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}保存游戏失败……
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}不能删除文件
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}游戏存档读取失败{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}读取游戏失败……
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :内部错误: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :无法识别的存档 - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :该存档是新版本的。当前版本无法读取。
|
||||
|
@@ -4967,9 +4967,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Odhadova
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Ukladanie hry ešte beží,{}počkajte prosím na dokončenie!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automatické ukladanie zlyhalo
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Zariadenie je nečitateľné
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Uloženie hry zlyhalo{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Súbor sa nedá vymazať
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nahratie hry zlyhalo{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interná chyba: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Poškodená uložená hra - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Hra bola uložená vo vyššej verzii
|
||||
|
@@ -4285,9 +4285,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Predvide
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Shranjevanje poteka,{}Prosim počakaj, da se zaključi!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Samodejno shranjevanje spodletelo
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Pogona ni mogoče prebrati
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Shranjevanje igre ni uspelo{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Datoteke ni mogoče zbrisati
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nalaganje igre ni uspelo{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interna napaka: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Napaka v shranjeni igri - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Igra je bila shranjena z novejso razlicico
|
||||
|
@@ -4450,10 +4450,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacida
|
||||
STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Créditos de Transferencia: {LTBLUE}{CURRENCY_LONG}
|
||||
|
||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}{NBSP}días{BLACK} {STRING}
|
||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}{NBSP}minutos{BLACK} {STRING}
|
||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}{NBSP}minuto{P "" s}{BLACK} {STRING}
|
||||
STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Intervalo de mantenimiento: {LTBLUE}{COMMA}%{BLACK} {STRING}
|
||||
STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Último mantenimiento: {LTBLUE}{DATE_LONG}
|
||||
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Último mantenimiento: {LTBLUE}hace {NUM} minutos
|
||||
STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Último mantenimiento: {LTBLUE}hace {NUM} minuto{P "" s}
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Incrementar el intervalo de mantenimiento en 10 días. Ctrl+clic para incrementar el período en 5 días
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Incrementar el intervalo de mantenimiento en 5 minutos. Ctrl+clic para incrementar el período en un minuto
|
||||
STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Incrementar el intervalo de mantenimiento en un 10%. Ctrl+clic para incrementar el período en un 5%
|
||||
@@ -4644,7 +4644,7 @@ STR_ORDER_REFIT_ORDER :(Reformar a {ST
|
||||
STR_ORDER_REFIT_STOP_ORDER :(Reformar a {STRING} y detenerse)
|
||||
STR_ORDER_STOP_ORDER :(Detenerse)
|
||||
|
||||
STR_ORDER_WAIT_TO_UNBUNCH :(esperar para distanciarse)
|
||||
STR_ORDER_WAIT_TO_UNBUNCH :(Esperar para distanciarse)
|
||||
|
||||
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
|
||||
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(No puede usar la estación){POP_COLOUR} {STRING} {STATION} {STRING}
|
||||
@@ -4900,9 +4900,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingreso
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}El guardado está en progreso,{}¡por favor espera hasta que termine!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Error al autoguardar
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No es posible leer la unidad
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error guardando partida{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error al guardar la partida...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}No es posible borrar el archivo
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Carga de Partida Errónea{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Error al cargar la partida...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error interno: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Partida guardada corrupta - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida guardada ha sido realizada con una versión más nueva
|
||||
@@ -4996,7 +4996,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}No se pu
|
||||
STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}No puede construirse la sede de la empresa...
|
||||
|
||||
# Town related errors
|
||||
STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}No se puede construir ningún municipio
|
||||
STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}No se puede generar ningún municipio...
|
||||
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}No se puede renombrar el municipio...
|
||||
STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}No se puede construir un municipio aquí...
|
||||
STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}No se puede expandir este municipio...
|
||||
|
@@ -4781,9 +4781,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ingreso
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Se sigue guardando la partida,{}¡por favor espera hasta que termine!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Error en guardado automático
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}No es posible leer la unidad de disco
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Error guardando partida{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}No es posible eliminar el archivo
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Error al cargar partida{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Error interno: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Archivo con errores - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :La partida guardada es de una versión más reciente del juego
|
||||
|
@@ -2858,14 +2858,14 @@ STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG}
|
||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Hängbro, Stål
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Balkbro, Stål
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Konsolbro, Stål
|
||||
STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hängbro, Betong
|
||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Hängbro, stål
|
||||
STR_BRIDGE_NAME_GIRDER_STEEL :Balkbro, stål
|
||||
STR_BRIDGE_NAME_CANTILEVER_STEEL :Konsolbro, stål
|
||||
STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hängbro, betong
|
||||
STR_BRIDGE_NAME_WOODEN :Träbro
|
||||
STR_BRIDGE_NAME_CONCRETE :Betongbro
|
||||
STR_BRIDGE_NAME_TUBULAR_STEEL :Rörbro, Stål
|
||||
STR_BRIDGE_TUBULAR_SILICON :Rörbro, Kisel
|
||||
STR_BRIDGE_NAME_TUBULAR_STEEL :Rörbro, stål
|
||||
STR_BRIDGE_TUBULAR_SILICON :Rörbro, kisel
|
||||
|
||||
|
||||
# Road construction toolbar
|
||||
@@ -4899,9 +4899,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Uppskatt
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Sparar fortfarande,{}vänta tills det är slutfört!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Autosparning misslyckades
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan inte läsa från disk
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Sparandet av spelet misslyckades{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Sparandet av spelet misslyckades...
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan inte ta bort filen
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Inläsningen av spelet misslyckades{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Inläsningen av spelet misslyckades...
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Internt fel: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Trasig sparfil - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Sparfilen är gjord med en nyare version
|
||||
|
@@ -4498,9 +4498,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}மத
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}பதிவாகிக்கொண்டிருக்கிறது,{}சிறிது நேரம் பொறுங்கள்,!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}தானியங்கிபதிவு தோல்வியடைந்தது
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}கணினி சேமிப்பகத்தினை படிக்க இயலவில்லை
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}ஆட்டத்தின் படிவு தோல்வியடைந்தது{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}கோப்பினை நீக்க இயலவில்லை
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}ஆட்டம் பதிவேறுவது தோல்வியடைந்தது{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :உள்பிழை: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :உடைந்த பதிவுஆட்டம் - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :புதிய பதிப்பினால் பதிவுஆட்டம் உருவாக்கப்பட்டுள்ளது
|
||||
|
@@ -4242,9 +4242,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}รา
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}ขณะนี้กำลังบันทึก,{}โปรดรอจนกว่าจะเสร็จ!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}บันทึกอัตโนมัติล้มเหลว!!!
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}ไม่สามารถอ่านข้อมูลได้
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}บันทึกเกมล้มเหลว!!!{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}ไม่สามารถทำการลบไฟล์
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}โหลดเกมล้มเหลว{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :ข้อผิดพลาดจากภายใน: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :เกมที่บันทึกไว้ เสีย - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :เกมที่บันทึกไว้ สำหรับเวอร์ชันใหม่
|
||||
|
@@ -4726,9 +4726,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}預估
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}遊戲還在儲存中,{}請稍候!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}自動儲存失敗
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}無法讀取磁碟
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}遊戲儲存失敗{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}無法刪除檔案
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}遊戲載入失敗{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :內部錯誤:{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :損壞的存檔 - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :該存檔是由較新版本的遊戲所產生
|
||||
|
@@ -4898,9 +4898,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Tahmini
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Kayıt işlemi sürüyor,{}lütfen bitene kadar bekleyin!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Otomatik kayıt başarısız
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Sürücü okunamıyor
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Oyun kaydedilemedi{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Dosya silinemedi
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Dosya yüklenemedi{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :İç hata: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bozuk kayıtlı oyun - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Oyun yeni bir sürümle kaydedilmiş.
|
||||
|
@@ -1871,7 +1871,7 @@ STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Цоків
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Показувати час прибуття та відправлення у розкладах: {STRING}
|
||||
STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Відображати очікуваний час прибуття та відправлення у розкладі
|
||||
|
||||
STR_CONFIG_SETTING_QUICKGOTO :Прискорене створення наказів транспорту: {STRING}
|
||||
STR_CONFIG_SETTING_QUICKGOTO :Прискорене створення завдань для транспорту: {STRING}
|
||||
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :При відображенні списка завдань транспортного засобу автоматично натискається кнопка створення нових завдань
|
||||
|
||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Тип колії на початку нової/завантаженної гри: {STRING}
|
||||
@@ -2227,8 +2227,8 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Імперсь
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Метричні (л)
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :СІ (м³)
|
||||
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Одиниці тяглової сили: {STRING}
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Якщо тяглова сила відображається на інтерфейсі: показувати її в обраній одиниці виміру
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Одиниці тягового зусилля: {STRING}
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Якщо тягове зусилля відображається на інтерфейсі: показувати її в обраній одиниці виміру
|
||||
###length 3
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Імперські (фунт-сили)
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Метричні (кгс)
|
||||
@@ -2413,17 +2413,17 @@ STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Не налаш
|
||||
|
||||
###length 23
|
||||
STR_LIVERY_DEFAULT :Базовий колір
|
||||
STR_LIVERY_STEAM :Паровоз
|
||||
STR_LIVERY_DIESEL :Тепловоз
|
||||
STR_LIVERY_ELECTRIC :Електровоз
|
||||
STR_LIVERY_STEAM :Паротяг
|
||||
STR_LIVERY_DIESEL :Теплотяг
|
||||
STR_LIVERY_ELECTRIC :Електротяг
|
||||
STR_LIVERY_MONORAIL :Монорейковий локомотив
|
||||
STR_LIVERY_MAGLEV :Магнітний локомотив
|
||||
STR_LIVERY_DMU :Багатосекційний тепловоз
|
||||
STR_LIVERY_EMU :Багатосекційний електровоз
|
||||
STR_LIVERY_PASSENGER_WAGON_STEAM :Пасажирський вагон (паровоз)
|
||||
STR_LIVERY_PASSENGER_WAGON_DIESEL :Пасажирський вагон (тепловоз)
|
||||
STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Пасажирський вагон (електровоз)
|
||||
STR_LIVERY_PASSENGER_WAGON_MONORAIL :Пасажирський вагон (монорейка)
|
||||
STR_LIVERY_DMU :Багатосекційний теплотяг
|
||||
STR_LIVERY_EMU :Багатосекційний електротяг
|
||||
STR_LIVERY_PASSENGER_WAGON_STEAM :Пасажирський вагон (паротяговий)
|
||||
STR_LIVERY_PASSENGER_WAGON_DIESEL :Пасажирський вагон (теплотяговий)
|
||||
STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Пасажирський вагон (електротяговий)
|
||||
STR_LIVERY_PASSENGER_WAGON_MONORAIL :Пасажирський вагон (монорейковий)
|
||||
STR_LIVERY_PASSENGER_WAGON_MAGLEV :Пасажирський вагон (маглев)
|
||||
STR_LIVERY_FREIGHT_WAGON :Вантажний вагон
|
||||
STR_LIVERY_BUS :Автобус
|
||||
@@ -2907,8 +2907,8 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Не п
|
||||
STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Підсвічувати зону покриття станції
|
||||
STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Приймає: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Постачає: {GOLD}{CARGO_LIST}
|
||||
STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK} Вартість експлуатації: {GOLD}{CURRENCY_SHORT}/рік
|
||||
STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK} Вартість експлуатації: {GOLD}{CURRENCY_SHORT}/період
|
||||
STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Вартість експлуатації: {GOLD}{CURRENCY_SHORT}/рік
|
||||
STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Вартість експлуатації: {GOLD}{CURRENCY_SHORT}/період
|
||||
|
||||
# Join station window
|
||||
STR_JOIN_STATION_CAPTION :{WHITE}Об'єднати станцію
|
||||
@@ -4213,8 +4213,8 @@ STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Швид
|
||||
STR_PURCHASE_INFO_SPEED :{BLACK}Швидкість: {GOLD}{VELOCITY}
|
||||
STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Швидкість в океані: {GOLD}{VELOCITY}
|
||||
STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Швидкість в каналі/річці: {GOLD}{VELOCITY}
|
||||
STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK} Вартість експлуатації: {GOLD}{CURRENCY_LONG}/рік
|
||||
STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK} Вартість експлуатації: {GOLD}{CURRENCY_LONG}/період
|
||||
STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Вартість експлуатації: {GOLD}{CURRENCY_LONG}/рік
|
||||
STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Вартість експлуатації: {GOLD}{CURRENCY_LONG}/період
|
||||
STR_PURCHASE_INFO_CAPACITY :{BLACK}Місткість: {GOLD}{CARGO_LONG} {STRING}
|
||||
STR_PURCHASE_INFO_REFITTABLE :(змінюється)
|
||||
STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Рік випуску: {GOLD}{NUM}{BLACK} Вік: {GOLD}{COMMA} р{P ік оки оків}
|
||||
@@ -4231,7 +4231,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Всі типи
|
||||
STR_PURCHASE_INFO_NONE :Нема
|
||||
STR_PURCHASE_INFO_ENGINES_ONLY :Тільки локомотиви
|
||||
STR_PURCHASE_INFO_ALL_BUT :Всі, крім {CARGO_LIST}
|
||||
STR_PURCHASE_INFO_MAX_TE :{BLACK}Максимальна тягова сила: {GOLD}{FORCE}
|
||||
STR_PURCHASE_INFO_MAX_TE :{BLACK}Максимальне тягове зусилля: {GOLD}{FORCE}
|
||||
STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Дальність: {GOLD}{COMMA} клітинок
|
||||
STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Тип літака: {GOLD}{STRING}
|
||||
|
||||
@@ -4534,7 +4534,7 @@ STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Очі
|
||||
STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Занадто далеко до наступного місця призначення
|
||||
|
||||
STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:STATION}
|
||||
STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Без наказів
|
||||
STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Без завдань
|
||||
STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:WAYPOINT}
|
||||
STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Прямує до {0:DEPOT}
|
||||
STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Техогляд у {0:DEPOT}
|
||||
@@ -4565,8 +4565,8 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Назв
|
||||
|
||||
STR_VEHICLE_INFO_AGE :{COMMA} р{P ік оки оків} ({COMMA})
|
||||
STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} р{P ік оки оків} ({COMMA})
|
||||
STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Вік: {LTBLUE}{STRING}{BLACK} Вартість експлуатації: {LTBLUE}{CURRENCY_LONG}/рік
|
||||
STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Вік: {LTBLUE}{STRING}{BLACK} Вартість експлуатації: {LTBLUE}{CURRENCY_LONG}/період
|
||||
STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Вік: {LTBLUE}{STRING}{BLACK}Вартість експлуатації: {LTBLUE}{CURRENCY_LONG}/рік
|
||||
STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Вік: {LTBLUE}{STRING}{BLACK}Вартість експлуатації: {LTBLUE}{CURRENCY_LONG}/період
|
||||
|
||||
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY}
|
||||
STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Тип: {LTBLUE}{STRING}
|
||||
@@ -4671,8 +4671,8 @@ STR_ORDERS_LIST_TOOLTIP :{BLACK}Марш
|
||||
STR_ORDER_INDEX :{COMMA}:{NBSP}
|
||||
STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING}
|
||||
|
||||
STR_ORDERS_END_OF_ORDERS :- - Кінець наказів - -
|
||||
STR_ORDERS_END_OF_SHARED_ORDERS :- - Кінець спільних наказів - -
|
||||
STR_ORDERS_END_OF_ORDERS :- - Кінець завдань - -
|
||||
STR_ORDERS_END_OF_SHARED_ORDERS :- - Кінець спільних завдань - -
|
||||
|
||||
# Order bottom buttons
|
||||
STR_ORDER_NON_STOP :{BLACK}Без зупинки
|
||||
@@ -5041,9 +5041,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Приб
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Збереження...{}зачекайте, доки завершиться!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Помилка автозбереження
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Неможливо прочитати пристрій
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Помилка запису гри{}{STRING}
|
||||
STR_ERROR_GAME_SAVE_FAILED :
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Неможливо стерти файл
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Помилка завантаження гри{}{STRING}
|
||||
STR_ERROR_GAME_LOAD_FAILED :
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Внутрішня помилка: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Файл збереженої гри пошкоджений - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Файл збереженої гри зроблений більш новою версією
|
||||
@@ -5435,8 +5435,8 @@ STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Немо
|
||||
STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Літак у польоті
|
||||
|
||||
# Order related errors
|
||||
STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Немає місця для наказів
|
||||
STR_ERROR_TOO_MANY_ORDERS :{WHITE}Дуже багато наказів
|
||||
STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Немає місця для нових завдань
|
||||
STR_ERROR_TOO_MANY_ORDERS :{WHITE}Занадто багато завдань
|
||||
STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Неможливо додати наказ...
|
||||
STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Неможливо видалити наказ...
|
||||
STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Неможливо змінити наказ...
|
||||
@@ -5658,33 +5658,33 @@ STR_SV_STNAME_FALLBACK :{STRING}, ст
|
||||
##id 0x8000
|
||||
###length 116
|
||||
# Vehicle names
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (паровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (паротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_CHOO_CHOO :Ploddyphut Choo-Choo
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_CHOO_CHOO :Powernaut Choo-Choo
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Choo-Choo
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (паровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (паровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (паровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (паровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (тепловоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (паротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (паротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (паротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (паротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (теплотяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Пасажирський вагон
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Поштовий вагон
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Вагон для вугілля
|
||||
@@ -5712,8 +5712,8 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Вагон дл
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Вагон для батарейок
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Вагон для газованої води
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Вагон для пластиліну
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Пасажирський вагон
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Поштовий вагон
|
||||
@@ -5742,10 +5742,10 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Вагон дл
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Вагон для батарейок
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Вагон для газованої води
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Вагон для пластиліну
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (електровоз)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (електротяг)
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Пасажирський вагон
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Поштовий вагон
|
||||
|
@@ -4643,7 +4643,7 @@ STR_ORDER_REFIT_ORDER :(Cải biến t
|
||||
STR_ORDER_REFIT_STOP_ORDER :(Cải biến thành {STRING} và dừng)
|
||||
STR_ORDER_STOP_ORDER :(Dừng)
|
||||
|
||||
STR_ORDER_WAIT_TO_UNBUNCH :(chờ để gỡ gộp)
|
||||
STR_ORDER_WAIT_TO_UNBUNCH :(Chờ để gỡ gộp)
|
||||
|
||||
STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING}
|
||||
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Không thể sử dụng trạm){POP_COLOUR} {STRING} {STATION} {STRING}
|
||||
@@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Thu nh
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Đang lưu vào đĩa,{}hãy chờ cho đến khi hoàn thành!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Tự lưu gặp lỗi
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Không đọc được đĩa
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Lưu ván chơi có lỗi{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Không thể xoá file
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Nạp ván chơi thất bại{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Lỗi kỹ thuật: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bản lưu ván chơi bị hỏng - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Bản lưu ván chơi dành cho phiên bản mới hơn
|
||||
|
@@ -4899,9 +4899,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Amcangyf
|
||||
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Mae'r gêm wrthi'n cael ei chadw,{}Arhoswch nes y bydd y broses wedi'i chwblhau!
|
||||
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Methodd yr Awtogadw
|
||||
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Methu darllen y gyriant
|
||||
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Methwyd â Chadw Gêm{}{STRING}
|
||||
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Methu Dileu Ffeil
|
||||
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Methwyd â Llwytho Gêm{}{STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Gwall mewnol: {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Mae'r gêm a gadwyd wedi torri - {STRING}
|
||||
STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Mae'r gêm a gadwyd wedi ei chadw mewn fersiwn ddiweddarach
|
||||
|
@@ -282,18 +282,18 @@ struct MainWindow : Window
|
||||
if (_game_mode == GM_MENU) {
|
||||
ViewportDoDrawProcessAllPending();
|
||||
|
||||
static const SpriteID title_sprites[] = {SPR_OTTD_O, SPR_OTTD_P, SPR_OTTD_E, SPR_OTTD_N, SPR_OTTD_T, SPR_OTTD_T, SPR_OTTD_D};
|
||||
static const std::initializer_list<SpriteID> title_sprites = {SPR_OTTD_O, SPR_OTTD_P, SPR_OTTD_E, SPR_OTTD_N, SPR_OTTD_T, SPR_OTTD_T, SPR_OTTD_D};
|
||||
uint letter_spacing = ScaleGUITrad(10);
|
||||
int name_width = (lengthof(title_sprites) - 1) * letter_spacing;
|
||||
int name_width = static_cast<int>(std::size(title_sprites) - 1) * letter_spacing;
|
||||
|
||||
for (uint i = 0; i < lengthof(title_sprites); i++) {
|
||||
name_width += GetSpriteSize(title_sprites[i]).width;
|
||||
for (const SpriteID &sprite : title_sprites) {
|
||||
name_width += GetSpriteSize(sprite).width;
|
||||
}
|
||||
int off_x = (this->width - name_width) / 2;
|
||||
|
||||
for (uint i = 0; i < lengthof(title_sprites); i++) {
|
||||
DrawSprite(title_sprites[i], PAL_NONE, off_x, ScaleGUITrad(50));
|
||||
off_x += GetSpriteSize(title_sprites[i]).width + letter_spacing;
|
||||
for (const SpriteID &sprite : title_sprites) {
|
||||
DrawSprite(sprite, PAL_NONE, off_x, ScaleGUITrad(50));
|
||||
off_x += GetSpriteSize(sprite).width + letter_spacing;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -77,9 +77,9 @@ static DropDownList BuildVisibilityDropDownList()
|
||||
{
|
||||
DropDownList list;
|
||||
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NETWORK_SERVER_VISIBILITY_LOCAL, SERVER_GAME_TYPE_LOCAL, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY, SERVER_GAME_TYPE_INVITE_ONLY, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NETWORK_SERVER_VISIBILITY_PUBLIC, SERVER_GAME_TYPE_PUBLIC, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NETWORK_SERVER_VISIBILITY_LOCAL, SERVER_GAME_TYPE_LOCAL));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY, SERVER_GAME_TYPE_INVITE_ONLY));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NETWORK_SERVER_VISIBILITY_PUBLIC, SERVER_GAME_TYPE_PUBLIC));
|
||||
|
||||
return list;
|
||||
}
|
||||
@@ -105,8 +105,8 @@ public:
|
||||
this->Add(std::make_unique<NWidgetLeaf>(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_YEARS, STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION, STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP));
|
||||
|
||||
leaf = std::make_unique<NWidgetLeaf>(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NG_INFO, STR_EMPTY, STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP);
|
||||
leaf->SetMinimalSize(14 + GetSpriteSize(SPR_LOCK, nullptr, ZOOM_LVL_OUT_4X).width
|
||||
+ GetSpriteSize(SPR_BLOT, nullptr, ZOOM_LVL_OUT_4X).width, 12);
|
||||
leaf->SetMinimalSize(14 + GetSpriteSize(SPR_LOCK, nullptr, ZOOM_LVL_NORMAL).width
|
||||
+ GetSpriteSize(SPR_BLOT, nullptr, ZOOM_LVL_NORMAL).width, 12);
|
||||
leaf->SetFill(0, 1);
|
||||
this->Add(std::move(leaf));
|
||||
}
|
||||
@@ -1507,8 +1507,8 @@ private:
|
||||
static void OnClickClientAdmin([[maybe_unused]] NetworkClientListWindow *w, [[maybe_unused]] Point pt, ClientID client_id)
|
||||
{
|
||||
DropDownList list;
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK, DD_CLIENT_ADMIN_KICK, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN, DD_CLIENT_ADMIN_BAN, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK, DD_CLIENT_ADMIN_KICK));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN, DD_CLIENT_ADMIN_BAN));
|
||||
|
||||
Rect wi_rect;
|
||||
wi_rect.left = pt.x;
|
||||
@@ -1529,8 +1529,8 @@ private:
|
||||
static void OnClickCompanyAdmin([[maybe_unused]] NetworkClientListWindow *w, [[maybe_unused]] Point pt, CompanyID company_id)
|
||||
{
|
||||
DropDownList list;
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET, DD_COMPANY_ADMIN_RESET, NetworkCompanyHasClients(company_id)));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK, DD_COMPANY_ADMIN_UNLOCK, !NetworkCompanyIsPassworded(company_id)));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET, DD_COMPANY_ADMIN_RESET, NetworkCompanyHasClients(company_id)));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_UNLOCK, DD_COMPANY_ADMIN_UNLOCK, !NetworkCompanyIsPassworded(company_id)));
|
||||
|
||||
Rect wi_rect;
|
||||
wi_rect.left = pt.x;
|
||||
|
@@ -1053,13 +1053,13 @@ struct NewGRFInspectWindow : Window {
|
||||
|
||||
case WID_NGRFI_SPRITE_DUMP_OPTIONS: {
|
||||
DropDownList list;
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO, NGIWDDO_GOTO_SPRITE, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NEWGRF_INSPECT_SPRITE_DUMP_CLEAR, NGIWDDO_CLEAR, false));
|
||||
list.push_back(std::make_unique<DropDownListDividerItem>(-1, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(!this->click_to_mark_mode, STR_NEWGRF_INSPECT_SPRITE_DUMP_CLICK_TO_HIGHLIGHT, NGIWDDO_CLICK_TO_HIGHLIGHT, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(this->click_to_mark_mode, STR_NEWGRF_INSPECT_SPRITE_DUMP_CLICK_TO_MARK, NGIWDDO_CLICK_TO_MARK, false));
|
||||
list.push_back(std::make_unique<DropDownListDividerItem>(-1, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(this->sprite_dump_more_details, STR_NEWGRF_INSPECT_SPRITE_DUMP_MORE_DETAILS, NGIWDDO_MORE_DETAILS, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NEWGRF_INSPECT_SPRITE_DUMP_GOTO, NGIWDDO_GOTO_SPRITE, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NEWGRF_INSPECT_SPRITE_DUMP_CLEAR, NGIWDDO_CLEAR, false));
|
||||
list.push_back(MakeDropDownListDividerItem());
|
||||
list.push_back(MakeDropDownListCheckedItem(!this->click_to_mark_mode, STR_NEWGRF_INSPECT_SPRITE_DUMP_CLICK_TO_HIGHLIGHT, NGIWDDO_CLICK_TO_HIGHLIGHT, false));
|
||||
list.push_back(MakeDropDownListCheckedItem(this->click_to_mark_mode, STR_NEWGRF_INSPECT_SPRITE_DUMP_CLICK_TO_MARK, NGIWDDO_CLICK_TO_MARK, false));
|
||||
list.push_back(MakeDropDownListDividerItem());
|
||||
list.push_back(MakeDropDownListCheckedItem(this->sprite_dump_more_details, STR_NEWGRF_INSPECT_SPRITE_DUMP_MORE_DETAILS, NGIWDDO_MORE_DETAILS, false));
|
||||
|
||||
ShowDropDownList(this, std::move(list), 0, WID_NGRFI_SPRITE_DUMP_OPTIONS, 140);
|
||||
break;
|
||||
@@ -1673,7 +1673,7 @@ struct SpriteAlignerWindow : Window {
|
||||
}
|
||||
|
||||
SpriteAlignerWindow::zoom = Clamp(SpriteAlignerWindow::zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max);
|
||||
for (ZoomLevel z = ZOOM_LVL_NORMAL; z < ZOOM_LVL_SPR_COUNT; z++) {
|
||||
for (ZoomLevel z = ZOOM_LVL_BEGIN; z < ZOOM_LVL_SPR_COUNT; z++) {
|
||||
this->SetWidgetsDisabledState(z < _settings_client.gui.zoom_min || z > _settings_client.gui.zoom_max, WID_SA_ZOOM + z);
|
||||
this->SetWidgetsLoweredState(SpriteAlignerWindow::zoom == z, WID_SA_ZOOM + z);
|
||||
}
|
||||
@@ -1742,12 +1742,12 @@ static constexpr NWidgetPart _nested_sprite_aligner_widgets[] = {
|
||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SA_SCROLLBAR),
|
||||
EndContainer(),
|
||||
NWidget(NWID_VERTICAL),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_NORMAL), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_MIN, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_2X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_IN_2X, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_4X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_NORMAL, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_8X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_16X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_32X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_IN_4X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_MIN, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_IN_2X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_IN_2X, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_NORMAL), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_NORMAL, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_2X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_4X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X, STR_NULL), SetFill(1, 0),
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + ZOOM_LVL_OUT_8X), SetDataTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X, STR_NULL), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
|
@@ -406,7 +406,7 @@ struct NewGRFParametersWindow : public Window {
|
||||
|
||||
DropDownList list;
|
||||
for (uint32_t i = par_info.min_value; i <= par_info.max_value; i++) {
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(GetGRFStringFromGRFText(par_info.value_names.find(i)->second), i, false));
|
||||
list.push_back(MakeDropDownListStringItem(GetGRFStringFromGRFText(par_info.value_names.find(i)->second), i));
|
||||
}
|
||||
|
||||
ShowDropDownListAt(this, std::move(list), old_val, WID_NP_SETTING_DROPDOWN, wi_rect, COLOUR_ORANGE);
|
||||
@@ -971,10 +971,10 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
|
||||
DropDownList list;
|
||||
|
||||
/* Add 'None' option for clearing list */
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_NONE, -1, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_NONE, -1));
|
||||
|
||||
for (uint i = 0; i < this->grf_presets.size(); i++) {
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(this->grf_presets[i], i, false));
|
||||
list.push_back(MakeDropDownListStringItem(this->grf_presets[i], i));
|
||||
}
|
||||
|
||||
this->CloseChildWindows(WC_QUERY_STRING); // Remove the parameter query window
|
||||
|
@@ -55,7 +55,7 @@ inline void AddIndustryNewsItem(StringID string, NewsType type, IndustryID indus
|
||||
void NewsLoop();
|
||||
void InitNewsItemStructs();
|
||||
|
||||
extern const NewsItem *_statusbar_news_item;
|
||||
const NewsItem *GetStatusbarNews();
|
||||
|
||||
void DeleteInvalidEngineNews();
|
||||
void DeleteVehicleNews(VehicleID vid, StringID news);
|
||||
|
329
src/news_gui.cpp
329
src/news_gui.cpp
@@ -22,7 +22,6 @@
|
||||
#include "town.h"
|
||||
#include "sound_func.h"
|
||||
#include "string_func.h"
|
||||
#include "dropdown_func.h"
|
||||
#include "statusbar_gui.h"
|
||||
#include "company_manager_face.h"
|
||||
#include "company_func.h"
|
||||
@@ -42,25 +41,42 @@
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
const NewsItem *_statusbar_news_item = nullptr;
|
||||
static const uint MIN_NEWS_AMOUNT = 30; ///< preferred minimum amount of news messages.
|
||||
static const uint MAX_NEWS_AMOUNT = 1U << 10; ///< Do not exceed this number of news messages.
|
||||
|
||||
static uint MIN_NEWS_AMOUNT = 30; ///< preferred minimum amount of news messages
|
||||
static uint MAX_NEWS_AMOUNT = 1 << 10; ///< Do not exceed this number of news messages
|
||||
static uint _total_news = 0; ///< current number of news items
|
||||
static NewsItem *_oldest_news = nullptr; ///< head of news items queue
|
||||
NewsItem *_latest_news = nullptr; ///< tail of news items queue
|
||||
static NewsContainer _news; ///< List of news, with newest items at the start.
|
||||
|
||||
/**
|
||||
* Forced news item.
|
||||
* Users can force an item by accessing the history or "last message".
|
||||
* If the message being shown was forced by the user, a pointer is stored
|
||||
* in _forced_news. Otherwise, \a _forced_news variable is nullptr.
|
||||
* If the message being shown was forced by the user, an iterater is stored
|
||||
* in _forced_news. Otherwise, \a _forced_news variable is the end of \a _news.
|
||||
*/
|
||||
static const NewsItem *_forced_news = nullptr;
|
||||
static NewsIterator _forced_news = std::end(_news);
|
||||
|
||||
/** Current news item (last item shown regularly). */
|
||||
static const NewsItem *_current_news = nullptr;
|
||||
static NewsIterator _current_news = std::end(_news);
|
||||
|
||||
/** Current status bar news item. */
|
||||
static NewsIterator _statusbar_news = std::end(_news);
|
||||
|
||||
/**
|
||||
* Get pointer to the current status bar news item.
|
||||
* @return Pointer to the current status bar news item, or nullptr if there is none.
|
||||
*/
|
||||
const NewsItem *GetStatusbarNews()
|
||||
{
|
||||
return (_statusbar_news == std::end(_news)) ? nullptr : &*_statusbar_news;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get read-only reference to all news items.
|
||||
* @return Read-only reference to all news items.
|
||||
*/
|
||||
const NewsContainer &GetNews()
|
||||
{
|
||||
return _news;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the position a news-reference is referencing.
|
||||
@@ -486,7 +502,7 @@ struct NewsWindow : Window {
|
||||
case WID_N_CLOSEBOX:
|
||||
NewsWindow::duration = 0;
|
||||
this->Close();
|
||||
_forced_news = nullptr;
|
||||
_forced_news = std::end(_news);
|
||||
break;
|
||||
|
||||
case WID_N_CAPTION:
|
||||
@@ -624,29 +640,21 @@ static void ShowNewspaper(const NewsItem *ni)
|
||||
}
|
||||
|
||||
/** Show news item in the ticker */
|
||||
static void ShowTicker(const NewsItem *ni)
|
||||
static void ShowTicker(NewsIterator ni)
|
||||
{
|
||||
if (_settings_client.sound.news_ticker) SndPlayFx(SND_16_NEWS_TICKER);
|
||||
|
||||
_statusbar_news_item = ni;
|
||||
_statusbar_news = ni;
|
||||
InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SHOW_TICKER);
|
||||
}
|
||||
|
||||
/** Initialize the news-items data structures */
|
||||
void InitNewsItemStructs()
|
||||
{
|
||||
for (NewsItem *ni = _oldest_news; ni != nullptr; ) {
|
||||
NewsItem *next = ni->next;
|
||||
delete ni;
|
||||
ni = next;
|
||||
}
|
||||
|
||||
_total_news = 0;
|
||||
_oldest_news = nullptr;
|
||||
_latest_news = nullptr;
|
||||
_forced_news = nullptr;
|
||||
_current_news = nullptr;
|
||||
_statusbar_news_item = nullptr;
|
||||
_news.clear();
|
||||
_forced_news = std::end(_news);
|
||||
_current_news = std::end(_news);
|
||||
_statusbar_news = std::end(_news);
|
||||
NewsWindow::duration = 0;
|
||||
}
|
||||
|
||||
@@ -656,7 +664,7 @@ void InitNewsItemStructs()
|
||||
*/
|
||||
static bool ReadyForNextTickerItem()
|
||||
{
|
||||
const NewsItem *ni = _statusbar_news_item;
|
||||
const NewsItem *ni = GetStatusbarNews();
|
||||
if (ni == nullptr) return true;
|
||||
|
||||
/* Ticker message
|
||||
@@ -670,8 +678,7 @@ static bool ReadyForNextTickerItem()
|
||||
*/
|
||||
static bool ReadyForNextNewsItem()
|
||||
{
|
||||
const NewsItem *ni = _forced_news == nullptr ? _current_news : _forced_news;
|
||||
if (ni == nullptr) return true;
|
||||
if (_forced_news == std::end(_news) && _current_news == std::end(_news)) return true;
|
||||
|
||||
/* neither newsticker nor newspaper are running */
|
||||
return (NewsWindow::duration <= 0 || FindWindowById(WC_NEWS_WINDOW, 0) == nullptr);
|
||||
@@ -680,116 +687,98 @@ static bool ReadyForNextNewsItem()
|
||||
/** Move to the next ticker item */
|
||||
static void MoveToNextTickerItem()
|
||||
{
|
||||
assert(!std::empty(_news));
|
||||
|
||||
/* There is no status bar, so no reason to show news;
|
||||
* especially important with the end game screen when
|
||||
* there is no status bar but possible news. */
|
||||
if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return;
|
||||
|
||||
/* if we're not at the last item, then move on */
|
||||
while (_statusbar_news_item != _latest_news) {
|
||||
_statusbar_news_item = (_statusbar_news_item == nullptr) ? _oldest_news : _statusbar_news_item->next;
|
||||
const NewsItem *ni = _statusbar_news_item;
|
||||
const NewsType type = ni->type;
|
||||
/* if we're not at the latest item, then move on */
|
||||
while (_statusbar_news != std::begin(_news)) {
|
||||
--_statusbar_news;
|
||||
const NewsType type = _statusbar_news->type;
|
||||
|
||||
/* check the date, don't show too old items */
|
||||
if (_scaled_tick_counter - ni->creation_tick > _news_type_data[type].age * DAY_TICKS) continue;
|
||||
if (_scaled_tick_counter - _statusbar_news->creation_tick > _news_type_data[type].age * DAY_TICKS) continue;
|
||||
|
||||
switch (_news_type_data[type].GetDisplay()) {
|
||||
default: NOT_REACHED();
|
||||
case ND_OFF: // Off - show nothing only a small reminder in the status bar
|
||||
InvalidateWindowData(WC_STATUS_BAR, 0, SBI_SHOW_REMINDER);
|
||||
break;
|
||||
return;
|
||||
|
||||
case ND_SUMMARY: // Summary - show ticker
|
||||
ShowTicker(ni);
|
||||
break;
|
||||
ShowTicker(_statusbar_news);
|
||||
return;
|
||||
|
||||
case ND_FULL: // Full - show newspaper, skipped here
|
||||
continue;
|
||||
break;;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/** Move to the next news item */
|
||||
static void MoveToNextNewsItem()
|
||||
{
|
||||
assert(!std::empty(_news));
|
||||
|
||||
/* There is no status bar, so no reason to show news;
|
||||
* especially important with the end game screen when
|
||||
* there is no status bar but possible news. */
|
||||
if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return;
|
||||
|
||||
CloseWindowById(WC_NEWS_WINDOW, 0); // close the newspapers window if shown
|
||||
_forced_news = nullptr;
|
||||
_forced_news = std::end(_news);
|
||||
|
||||
/* if we're not at the last item, then move on */
|
||||
while (_current_news != _latest_news) {
|
||||
_current_news = (_current_news == nullptr) ? _oldest_news : _current_news->next;
|
||||
const NewsItem *ni = _current_news;
|
||||
const NewsType type = ni->type;
|
||||
/* if we're not at the latest item, then move on */
|
||||
while (_current_news != std::begin(_news)) {
|
||||
--_current_news;
|
||||
const NewsType type = _current_news->type;
|
||||
|
||||
/* check the date, don't show too old items */
|
||||
if (_scaled_tick_counter - ni->creation_tick > _news_type_data[type].age * DAY_TICKS) continue;
|
||||
if (_scaled_tick_counter - _current_news->creation_tick > _news_type_data[type].age * DAY_TICKS) continue;
|
||||
|
||||
switch (_news_type_data[type].GetDisplay()) {
|
||||
default: NOT_REACHED();
|
||||
case ND_OFF: // Off - show nothing only a small reminder in the status bar, skipped here
|
||||
continue;
|
||||
break;
|
||||
|
||||
case ND_SUMMARY: // Summary - show ticker, skipped here
|
||||
continue;
|
||||
break;;
|
||||
|
||||
case ND_FULL: // Full - show newspaper
|
||||
ShowNewspaper(ni);
|
||||
break;
|
||||
}
|
||||
ShowNewspaper(&*_current_news);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Delete a news item from the queue */
|
||||
static void DeleteNewsItem(NewsItem *ni)
|
||||
static std::list<NewsItem>::iterator DeleteNewsItem(std::list<NewsItem>::iterator ni)
|
||||
{
|
||||
/* Delete the news from the news queue. */
|
||||
if (ni->prev != nullptr) {
|
||||
ni->prev->next = ni->next;
|
||||
} else {
|
||||
assert(_oldest_news == ni);
|
||||
_oldest_news = ni->next;
|
||||
}
|
||||
|
||||
if (ni->next != nullptr) {
|
||||
ni->next->prev = ni->prev;
|
||||
} else {
|
||||
assert(_latest_news == ni);
|
||||
_latest_news = ni->prev;
|
||||
}
|
||||
|
||||
_total_news--;
|
||||
|
||||
if (_forced_news == ni || _current_news == ni) {
|
||||
/* When we're the current news, go to the previous item first;
|
||||
* we just possibly made that the last news item. */
|
||||
if (_current_news == ni) _current_news = ni->prev;
|
||||
if (_current_news == ni) _current_news = (_current_news == std::begin(_news)) ? std::end(_news) : std::prev(_current_news);
|
||||
|
||||
/* About to remove the currently forced item (shown as newspapers) ||
|
||||
* about to remove the currently displayed item (newspapers) */
|
||||
MoveToNextNewsItem();
|
||||
}
|
||||
|
||||
if (_statusbar_news_item == ni) {
|
||||
if (_statusbar_news == ni) {
|
||||
/* When we're the current news, go to the previous item first;
|
||||
* we just possibly made that the last news item. */
|
||||
_statusbar_news_item = ni->prev;
|
||||
if (_statusbar_news == ni) _statusbar_news = (_statusbar_news == std::begin(_news)) ? std::end(_news) : std::prev(_statusbar_news);
|
||||
|
||||
/* About to remove the currently displayed item (ticker, or just a reminder) */
|
||||
InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED); // invalidate the statusbar
|
||||
MoveToNextTickerItem();
|
||||
}
|
||||
|
||||
delete ni;
|
||||
|
||||
SetWindowDirty(WC_MESSAGE_HISTORY, 0);
|
||||
/* Delete the news from the news queue. */
|
||||
return _news.erase(ni);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -831,27 +820,14 @@ void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceTy
|
||||
if (_game_mode == GM_MENU) return;
|
||||
|
||||
/* Create new news item node */
|
||||
NewsItem *ni = new NewsItem(string, type, flags, reftype1, ref1, reftype2, ref2, data);
|
||||
|
||||
if (_total_news++ == 0) {
|
||||
assert(_oldest_news == nullptr);
|
||||
_oldest_news = ni;
|
||||
ni->prev = nullptr;
|
||||
} else {
|
||||
assert(_latest_news->next == nullptr);
|
||||
_latest_news->next = ni;
|
||||
ni->prev = _latest_news;
|
||||
}
|
||||
|
||||
ni->next = nullptr;
|
||||
_latest_news = ni;
|
||||
_news.emplace_front(string, type, flags, reftype1, ref1, reftype2, ref2, data);
|
||||
|
||||
/* Keep the number of stored news items to a managable number */
|
||||
if (_total_news > MAX_NEWS_AMOUNT) {
|
||||
DeleteNewsItem(_oldest_news);
|
||||
if (std::size(_news) > MAX_NEWS_AMOUNT) {
|
||||
DeleteNewsItem(std::prev(std::end(_news)));
|
||||
}
|
||||
|
||||
SetWindowDirty(WC_MESSAGE_HISTORY, 0);
|
||||
InvalidateWindowData(WC_MESSAGE_HISTORY, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -918,6 +894,29 @@ CommandCost CmdCustomNewsItem(TileIndex tile, DoCommandFlag flags, uint32_t p1,
|
||||
return CommandCost();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete news items by predicate, and invalidate the message history if necessary.
|
||||
* @tparam Tmin Stop if the number of news items remaining reaches \a min items.
|
||||
* @tparam Tpredicate Condition for a news item to be deleted.
|
||||
*/
|
||||
template <size_t Tmin = 0, class Tpredicate>
|
||||
void DeleteNews(Tpredicate predicate)
|
||||
{
|
||||
bool dirty = false;
|
||||
for (auto it = std::rbegin(_news); it != std::rend(_news); /* nothing */) {
|
||||
if constexpr (Tmin > 0) {
|
||||
if (std::size(_news) <= Tmin) break;
|
||||
}
|
||||
if (predicate(*it)) {
|
||||
it = std::make_reverse_iterator(DeleteNewsItem(std::prev(it.base())));
|
||||
dirty = true;
|
||||
} else {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
if (dirty) InvalidateWindowData(WC_MESSAGE_HISTORY, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a news item type about a vehicle.
|
||||
* When the news item type is INVALID_STRING_ID all news about the vehicle gets deleted.
|
||||
@@ -926,16 +925,9 @@ CommandCost CmdCustomNewsItem(TileIndex tile, DoCommandFlag flags, uint32_t p1,
|
||||
*/
|
||||
void DeleteVehicleNews(VehicleID vid, StringID news)
|
||||
{
|
||||
NewsItem *ni = _oldest_news;
|
||||
|
||||
while (ni != nullptr) {
|
||||
NewsItem *next = ni->next;
|
||||
if (((ni->reftype1 == NR_VEHICLE && ni->ref1 == vid) || (ni->reftype2 == NR_VEHICLE && ni->ref2 == vid)) &&
|
||||
(news == INVALID_STRING_ID || ni->string_id == news)) {
|
||||
DeleteNewsItem(ni);
|
||||
}
|
||||
ni = next;
|
||||
}
|
||||
DeleteNews([&](const auto &ni) {
|
||||
return ((ni.reftype1 == NR_VEHICLE && ni.ref1 == vid) || (ni.reftype2 == NR_VEHICLE && ni.ref2 == vid)) && (news == INVALID_STRING_ID || ni.string_id == news);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -945,15 +937,9 @@ void DeleteVehicleNews(VehicleID vid, StringID news)
|
||||
*/
|
||||
void DeleteStationNews(StationID sid)
|
||||
{
|
||||
NewsItem *ni = _oldest_news;
|
||||
|
||||
while (ni != nullptr) {
|
||||
NewsItem *next = ni->next;
|
||||
if ((ni->reftype1 == NR_STATION && ni->ref1 == sid) || (ni->reftype2 == NR_STATION && ni->ref2 == sid)) {
|
||||
DeleteNewsItem(ni);
|
||||
}
|
||||
ni = next;
|
||||
}
|
||||
DeleteNews([&](const auto &ni) {
|
||||
return (ni.reftype1 == NR_STATION && ni.ref1 == sid) || (ni.reftype2 == NR_STATION && ni.ref2 == sid);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -962,15 +948,9 @@ void DeleteStationNews(StationID sid)
|
||||
*/
|
||||
void DeleteIndustryNews(IndustryID iid)
|
||||
{
|
||||
NewsItem *ni = _oldest_news;
|
||||
|
||||
while (ni != nullptr) {
|
||||
NewsItem *next = ni->next;
|
||||
if ((ni->reftype1 == NR_INDUSTRY && ni->ref1 == iid) || (ni->reftype2 == NR_INDUSTRY && ni->ref2 == iid)) {
|
||||
DeleteNewsItem(ni);
|
||||
}
|
||||
ni = next;
|
||||
}
|
||||
DeleteNews([&](const auto &ni) {
|
||||
return (ni.reftype1 == NR_INDUSTRY && ni.ref1 == iid) || (ni.reftype2 == NR_INDUSTRY && ni.ref2 == iid);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -978,25 +958,17 @@ void DeleteIndustryNews(IndustryID iid)
|
||||
*/
|
||||
void DeleteInvalidEngineNews()
|
||||
{
|
||||
NewsItem *ni = _oldest_news;
|
||||
|
||||
while (ni != nullptr) {
|
||||
NewsItem *next = ni->next;
|
||||
if ((ni->reftype1 == NR_ENGINE && (!Engine::IsValidID(ni->ref1) || !Engine::Get(ni->ref1)->IsEnabled())) ||
|
||||
(ni->reftype2 == NR_ENGINE && (!Engine::IsValidID(ni->ref2) || !Engine::Get(ni->ref2)->IsEnabled()))) {
|
||||
DeleteNewsItem(ni);
|
||||
}
|
||||
ni = next;
|
||||
}
|
||||
DeleteNews([](const auto &ni) {
|
||||
return (ni.reftype1 == NR_ENGINE && (!Engine::IsValidID(ni.ref1) || !Engine::Get(ni.ref1)->IsEnabled())) ||
|
||||
(ni.reftype2 == NR_ENGINE && (!Engine::IsValidID(ni.ref2) || !Engine::Get(ni.ref2)->IsEnabled()));
|
||||
});
|
||||
}
|
||||
|
||||
static void RemoveOldNewsItems()
|
||||
{
|
||||
NewsItem *next;
|
||||
for (NewsItem *cur = _oldest_news; _total_news > MIN_NEWS_AMOUNT && cur != nullptr; cur = next) {
|
||||
next = cur->next;
|
||||
if (_scaled_tick_counter - cur->creation_tick > (uint)(_news_type_data[cur->type].age * _settings_client.gui.news_message_timeout * DAY_TICKS)) DeleteNewsItem(cur);
|
||||
}
|
||||
DeleteNews<MIN_NEWS_AMOUNT>([](const auto &ni) {
|
||||
return _scaled_tick_counter - ni.creation_tick > (uint)(_news_type_data[ni.type].age * _settings_client.gui.news_message_timeout * DAY_TICKS);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1007,17 +979,17 @@ static void RemoveOldNewsItems()
|
||||
*/
|
||||
void ChangeVehicleNews(VehicleID from_index, VehicleID to_index)
|
||||
{
|
||||
for (NewsItem *ni = _oldest_news; ni != nullptr; ni = ni->next) {
|
||||
if (ni->reftype1 == NR_VEHICLE && ni->ref1 == from_index) ni->ref1 = to_index;
|
||||
if (ni->reftype2 == NR_VEHICLE && ni->ref2 == from_index) ni->ref2 = to_index;
|
||||
if (ni->flags & NF_VEHICLE_PARAM0 && ni->params[0].data == from_index) ni->params[0] = to_index;
|
||||
for (auto &ni : _news) {
|
||||
if (ni.reftype1 == NR_VEHICLE && ni.ref1 == from_index) ni.ref1 = to_index;
|
||||
if (ni.reftype2 == NR_VEHICLE && ni.ref2 == from_index) ni.ref2 = to_index;
|
||||
if (ni.flags & NF_VEHICLE_PARAM0 && ni.params[0].data == from_index) ni.params[0] = to_index;
|
||||
}
|
||||
}
|
||||
|
||||
void NewsLoop()
|
||||
{
|
||||
/* no news item yet */
|
||||
if (_total_news == 0) return;
|
||||
if (std::empty(_news)) return;
|
||||
|
||||
static uint8_t _last_clean_month = 0;
|
||||
|
||||
@@ -1031,9 +1003,9 @@ void NewsLoop()
|
||||
}
|
||||
|
||||
/** Do a forced show of a specific message */
|
||||
static void ShowNewsMessage(const NewsItem *ni)
|
||||
static void ShowNewsMessage(NewsIterator ni)
|
||||
{
|
||||
assert(_total_news != 0);
|
||||
assert(!std::empty(_news));
|
||||
|
||||
/* Delete the news window */
|
||||
CloseWindowById(WC_NEWS_WINDOW, 0);
|
||||
@@ -1041,9 +1013,9 @@ static void ShowNewsMessage(const NewsItem *ni)
|
||||
/* setup forced news item */
|
||||
_forced_news = ni;
|
||||
|
||||
if (_forced_news != nullptr) {
|
||||
if (_forced_news != std::end(_news)) {
|
||||
CloseWindowById(WC_NEWS_WINDOW, 0);
|
||||
ShowNewspaper(ni);
|
||||
ShowNewspaper(&*ni);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1062,26 +1034,26 @@ bool HideActiveNewsMessage()
|
||||
/** Show previous news item */
|
||||
void ShowLastNewsMessage()
|
||||
{
|
||||
const NewsItem *ni = nullptr;
|
||||
if (_total_news == 0) {
|
||||
return;
|
||||
} else if (_forced_news == nullptr) {
|
||||
if (std::empty(_news)) return;
|
||||
|
||||
NewsIterator ni;
|
||||
if (_forced_news == std::end(_news)) {
|
||||
/* Not forced any news yet, show the current one, unless a news window is
|
||||
* open (which can only be the current one), then show the previous item */
|
||||
if (_current_news == nullptr) {
|
||||
if (_current_news == std::end(_news)) {
|
||||
/* No news were shown yet resp. the last shown one was already deleted.
|
||||
* Threat this as if _forced_news reached _oldest_news; so, wrap around and start anew with the latest. */
|
||||
ni = _latest_news;
|
||||
* Treat this as if _forced_news reached the oldest news; so, wrap around and start anew with the latest. */
|
||||
ni = std::begin(_news);
|
||||
} else {
|
||||
const Window *w = FindWindowById(WC_NEWS_WINDOW, 0);
|
||||
ni = (w == nullptr || (_current_news == _oldest_news)) ? _current_news : _current_news->prev;
|
||||
ni = (w == nullptr || (std::next(_current_news) == std::end(_news))) ? _current_news : std::next(_current_news);
|
||||
}
|
||||
} else if (_forced_news == _oldest_news) {
|
||||
} else if (std::next(_forced_news) == std::end(_news)) {
|
||||
/* We have reached the oldest news, start anew with the latest */
|
||||
ni = _latest_news;
|
||||
ni = std::begin(_news);
|
||||
} else {
|
||||
/* 'Scrolling' through news history show each one in turn */
|
||||
ni = _forced_news->prev;
|
||||
ni = std::next(_forced_news);
|
||||
}
|
||||
bool wrap = false;
|
||||
for (;;) {
|
||||
@@ -1090,11 +1062,11 @@ void ShowLastNewsMessage()
|
||||
break;
|
||||
}
|
||||
|
||||
ni = ni->prev;
|
||||
if (ni == nullptr) {
|
||||
++ni;
|
||||
if (ni == std::end(_news)) {
|
||||
if (wrap) break;
|
||||
/* We have reached the oldest news, start anew with the latest */
|
||||
ni = _latest_news;
|
||||
ni = std::begin(_news);
|
||||
wrap = true;
|
||||
}
|
||||
}
|
||||
@@ -1151,37 +1123,23 @@ struct MessageHistoryWindow : Window {
|
||||
}
|
||||
}
|
||||
|
||||
void OnPaint() override
|
||||
{
|
||||
this->OnInvalidateData(0);
|
||||
this->DrawWidgets();
|
||||
}
|
||||
|
||||
void DrawWidget(const Rect &r, WidgetID widget) const override
|
||||
{
|
||||
if (widget != WID_MH_BACKGROUND || _total_news == 0) return;
|
||||
|
||||
/* Find the first news item to display. */
|
||||
NewsItem *ni = _latest_news;
|
||||
for (int n = this->vscroll->GetPosition(); n > 0; n--) {
|
||||
ni = ni->prev;
|
||||
if (ni == nullptr) return;
|
||||
}
|
||||
if (widget != WID_MH_BACKGROUND || std::empty(_news)) return;
|
||||
|
||||
/* Fill the widget with news items. */
|
||||
bool rtl = _current_text_dir == TD_RTL;
|
||||
Rect news = r.Shrink(WidgetDimensions::scaled.framerect).Indent(this->date_width + WidgetDimensions::scaled.hsep_wide, rtl);
|
||||
Rect date = r.Shrink(WidgetDimensions::scaled.framerect).WithWidth(this->date_width, rtl);
|
||||
int y = news.top;
|
||||
for (int n = this->vscroll->GetCapacity(); n > 0; n--) {
|
||||
|
||||
auto [first, last] = this->vscroll->GetVisibleRangeIterators(_news);
|
||||
for (auto ni = first; ni != last; ++ni) {
|
||||
SetDParam(0, ni->date);
|
||||
DrawString(date.left, date.right, y, STR_JUST_DATE_TINY, TC_WHITE);
|
||||
|
||||
DrawNewsString(news.left, news.right, y, TC_WHITE, ni);
|
||||
DrawNewsString(news.left, news.right, y, TC_WHITE, &*ni);
|
||||
y += this->line_height;
|
||||
|
||||
ni = ni->prev;
|
||||
if (ni == nullptr) return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1193,19 +1151,18 @@ struct MessageHistoryWindow : Window {
|
||||
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
|
||||
{
|
||||
if (!gui_scope) return;
|
||||
this->vscroll->SetCount(_total_news);
|
||||
this->vscroll->SetCount(std::size(_news));
|
||||
}
|
||||
|
||||
void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
|
||||
{
|
||||
if (widget == WID_MH_BACKGROUND) {
|
||||
NewsItem *ni = _latest_news;
|
||||
if (ni == nullptr) return;
|
||||
|
||||
for (int n = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_MH_BACKGROUND, WidgetDimensions::scaled.framerect.top); n > 0; n--) {
|
||||
ni = ni->prev;
|
||||
if (ni == nullptr) return;
|
||||
}
|
||||
/* Scheduled window invalidations currently occur after the input loop, which means the scrollbar count
|
||||
* could be invalid, so ensure it's correct now. Potentially this means that item clicked on might be
|
||||
* different as well. */
|
||||
this->vscroll->SetCount(std::size(_news));
|
||||
auto ni = this->vscroll->GetScrolledItemFromWidget(_news, pt.y, this, widget);
|
||||
if (ni == std::end(_news)) return;
|
||||
|
||||
ShowNewsMessage(ni);
|
||||
}
|
||||
|
@@ -16,6 +16,6 @@ void ShowLastNewsMessage();
|
||||
void ShowMessageHistory();
|
||||
bool HideActiveNewsMessage();
|
||||
|
||||
extern NewsItem *_latest_news;
|
||||
const NewsContainer &GetNews();
|
||||
|
||||
#endif /* NEWS_GUI_H */
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#include "gfx_type.h"
|
||||
#include "strings_type.h"
|
||||
#include "sound_type.h"
|
||||
#include <list>
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
@@ -126,8 +127,6 @@ struct NewsAllocatedData {
|
||||
|
||||
/** Information about a single item of news. */
|
||||
struct NewsItem {
|
||||
NewsItem *prev; ///< Previous news item
|
||||
NewsItem *next; ///< Next news item
|
||||
StringID string_id; ///< Message text
|
||||
CalTime::Date date; ///< Date of the news
|
||||
uint64_t creation_tick; ///< Tick when news was created
|
||||
@@ -169,4 +168,7 @@ struct CompanyNewsInformation : NewsAllocatedData {
|
||||
CompanyNewsInformation(const struct Company *c, const struct Company *other = nullptr);
|
||||
};
|
||||
|
||||
using NewsContainer = std::list<NewsItem>; ///< Container type for storing news items.
|
||||
using NewsIterator = NewsContainer::const_iterator; ///< Iterator type for news items.
|
||||
|
||||
#endif /* NEWS_TYPE_H */
|
||||
|
@@ -1049,7 +1049,7 @@ int openttd_main(int argc, char *argv[])
|
||||
InitializeSpriteSorter();
|
||||
|
||||
/* Initialize the zoom level of the screen to normal */
|
||||
_screen.zoom = ZOOM_LVL_NORMAL;
|
||||
_screen.zoom = ZOOM_LVL_MIN;
|
||||
|
||||
/* The video driver is now selected, now initialise GUI zoom */
|
||||
AdjustGUIZoom(AGZM_STARTUP);
|
||||
|
@@ -2885,15 +2885,15 @@ public:
|
||||
if (order == nullptr) break;
|
||||
|
||||
DropDownList list;
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_DUPLICATE_ORDER, 0, false));
|
||||
if (order->IsType(OT_CONDITIONAL)) list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_CHANGE_JUMP_TARGET, 1, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_DUPLICATE_ORDER, 0, false));
|
||||
if (order->IsType(OT_CONDITIONAL)) list.push_back(MakeDropDownListStringItem(STR_ORDER_CHANGE_JUMP_TARGET, 1, false));
|
||||
|
||||
if (this->vehicle->type == VEH_TRAIN && order->IsType(OT_GOTO_STATION) && (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) == 0) {
|
||||
const OrderStopLocation osl = order->GetStopLocation();
|
||||
list.push_back(std::make_unique<DropDownListDividerItem>(-1, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(osl == OSL_PLATFORM_NEAR_END, STR_ORDER_STOP_LOCATION_NEAR_END, 0x200 + OSL_PLATFORM_NEAR_END, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(osl == OSL_PLATFORM_MIDDLE, STR_ORDER_STOP_LOCATION_MIDDLE, 0x200 + OSL_PLATFORM_MIDDLE, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(osl == OSL_PLATFORM_FAR_END, STR_ORDER_STOP_LOCATION_FAR_END, 0x200 + OSL_PLATFORM_FAR_END, false));
|
||||
list.push_back(MakeDropDownListDividerItem());
|
||||
list.push_back(MakeDropDownListCheckedItem(osl == OSL_PLATFORM_NEAR_END, STR_ORDER_STOP_LOCATION_NEAR_END, 0x200 + OSL_PLATFORM_NEAR_END, false));
|
||||
list.push_back(MakeDropDownListCheckedItem(osl == OSL_PLATFORM_MIDDLE, STR_ORDER_STOP_LOCATION_MIDDLE, 0x200 + OSL_PLATFORM_MIDDLE, false));
|
||||
list.push_back(MakeDropDownListCheckedItem(osl == OSL_PLATFORM_FAR_END, STR_ORDER_STOP_LOCATION_FAR_END, 0x200 + OSL_PLATFORM_FAR_END, false));
|
||||
if (osl == OSL_PLATFORM_THROUGH || _settings_client.gui.show_adv_load_mode_features) {
|
||||
bool allowed = _settings_client.gui.show_adv_load_mode_features;
|
||||
if (allowed) {
|
||||
@@ -2905,28 +2905,28 @@ public:
|
||||
}
|
||||
}
|
||||
}
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(osl == OSL_PLATFORM_THROUGH, STR_ORDER_STOP_LOCATION_THROUGH, 0x200 + OSL_PLATFORM_THROUGH, !allowed));
|
||||
list.push_back(MakeDropDownListCheckedItem(osl == OSL_PLATFORM_THROUGH, STR_ORDER_STOP_LOCATION_THROUGH, 0x200 + OSL_PLATFORM_THROUGH, !allowed));
|
||||
}
|
||||
}
|
||||
|
||||
if (this->vehicle->type == VEH_ROAD && (order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT)) && _settings_game.pf.pathfinder_for_roadvehs == VPF_YAPF) {
|
||||
const DiagDirection dir = order->GetRoadVehTravelDirection();
|
||||
if (_settings_client.gui.show_adv_load_mode_features || dir != INVALID_DIAGDIR) {
|
||||
list.push_back(std::make_unique<DropDownListDividerItem>(-1, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(dir == INVALID_DIAGDIR, STR_ORDER_RV_DIR_ANY, 0x300 + INVALID_DIAGDIR, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(dir == DIAGDIR_NE, STR_ORDER_RV_DIR_NE, 0x300 + DIAGDIR_NE, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(dir == DIAGDIR_SE, STR_ORDER_RV_DIR_SE, 0x300 + DIAGDIR_SE, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(dir == DIAGDIR_SW, STR_ORDER_RV_DIR_SW, 0x300 + DIAGDIR_SW, false));
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(dir == DIAGDIR_NW, STR_ORDER_RV_DIR_NW, 0x300 + DIAGDIR_NW, false));
|
||||
list.push_back(MakeDropDownListDividerItem());
|
||||
list.push_back(MakeDropDownListCheckedItem(dir == INVALID_DIAGDIR, STR_ORDER_RV_DIR_ANY, 0x300 + INVALID_DIAGDIR, false));
|
||||
list.push_back(MakeDropDownListCheckedItem(dir == DIAGDIR_NE, STR_ORDER_RV_DIR_NE, 0x300 + DIAGDIR_NE, false));
|
||||
list.push_back(MakeDropDownListCheckedItem(dir == DIAGDIR_SE, STR_ORDER_RV_DIR_SE, 0x300 + DIAGDIR_SE, false));
|
||||
list.push_back(MakeDropDownListCheckedItem(dir == DIAGDIR_SW, STR_ORDER_RV_DIR_SW, 0x300 + DIAGDIR_SW, false));
|
||||
list.push_back(MakeDropDownListCheckedItem(dir == DIAGDIR_NW, STR_ORDER_RV_DIR_NW, 0x300 + DIAGDIR_NW, false));
|
||||
}
|
||||
}
|
||||
|
||||
if (!order->IsType(OT_IMPLICIT)) {
|
||||
list.push_back(std::make_unique<DropDownListDividerItem>(-1, false));
|
||||
list.push_back(MakeDropDownListDividerItem());
|
||||
const Colours current_colour = order->GetColour();
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(current_colour == INVALID_COLOUR, STR_COLOUR_DEFAULT, 0x100 + INVALID_COLOUR, false));
|
||||
list.push_back(MakeDropDownListCheckedItem(current_colour == INVALID_COLOUR, STR_COLOUR_DEFAULT, 0x100 + INVALID_COLOUR, false));
|
||||
auto add_colour = [&](Colours colour) {
|
||||
list.push_back(std::make_unique<DropDownListCheckedItem>(current_colour == colour, STR_COLOUR_DARK_BLUE + colour, 0x100 + colour, false));
|
||||
list.push_back(MakeDropDownListCheckedItem(current_colour == colour, STR_COLOUR_DARK_BLUE + colour, 0x100 + colour, false));
|
||||
};
|
||||
add_colour(COLOUR_YELLOW);
|
||||
add_colour(COLOUR_LIGHT_BLUE);
|
||||
@@ -2985,17 +2985,17 @@ public:
|
||||
}
|
||||
}
|
||||
DropDownList list;
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_GO_TO, ODDI_GO_TO, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>((this->vehicle->type == VEH_AIRCRAFT) ? STR_ORDER_GO_TO_NEAREST_HANGAR : STR_ORDER_GO_TO_NEAREST_DEPOT, ODDI_GO_TO_NEAREST_DEPOT, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_CONDITIONAL, ODDI_CONDITIONAL, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_SHARE, ODDI_SHARE, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_TRY_ACQUIRE_SLOT_BUTTON, ODDI_TRY_ACQUIRE_SLOT, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_RELEASE_SLOT_BUTTON, ODDI_RELEASE_SLOT, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_GO_TO, ODDI_GO_TO, false));
|
||||
list.push_back(MakeDropDownListStringItem((this->vehicle->type == VEH_AIRCRAFT) ? STR_ORDER_GO_TO_NEAREST_HANGAR : STR_ORDER_GO_TO_NEAREST_DEPOT, ODDI_GO_TO_NEAREST_DEPOT, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL, ODDI_CONDITIONAL, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_SHARE, ODDI_SHARE, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_TRY_ACQUIRE_SLOT_BUTTON, ODDI_TRY_ACQUIRE_SLOT, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_RELEASE_SLOT_BUTTON, ODDI_RELEASE_SLOT, false));
|
||||
if (show_counters) {
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_CHANGE_COUNTER_BUTTON, ODDI_CHANGE_COUNTER, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_CHANGE_COUNTER_BUTTON, ODDI_CHANGE_COUNTER, false));
|
||||
}
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_LABEL_TEXT_BUTTON, ODDI_LABEL_TEXT, false));
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(STR_ORDER_LABEL_DEPARTURES_VIA_BUTTON, ODDI_LABEL_DEPARTURES_VIA, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_LABEL_TEXT_BUTTON, ODDI_LABEL_TEXT, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_LABEL_DEPARTURES_VIA_BUTTON, ODDI_LABEL_DEPARTURES_VIA, false));
|
||||
|
||||
ShowDropDownList(this, std::move(list), sel, WID_O_GOTO, 0, DDMF_NONE, DDSF_SHARED);
|
||||
}
|
||||
@@ -3073,9 +3073,9 @@ public:
|
||||
const DispatchSchedule &ds = this->vehicle->orders->GetDispatchScheduleByIndex(i);
|
||||
if (ds.ScheduleName().empty()) {
|
||||
SetDParam(0, i + 1);
|
||||
list.emplace_back(new DropDownListStringItem(STR_TIMETABLE_ASSIGN_SCHEDULE_ID, i, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_TIMETABLE_ASSIGN_SCHEDULE_ID, i, false));
|
||||
} else {
|
||||
list.emplace_back(new DropDownListStringItem(ds.ScheduleName(), i, false));
|
||||
list.push_back(MakeDropDownListStringItem(ds.ScheduleName(), i, false));
|
||||
}
|
||||
}
|
||||
if (!list.empty()) ShowDropDownList(this, std::move(list), selected, WID_O_COND_SCHED_SELECT, 0);
|
||||
@@ -3104,7 +3104,7 @@ public:
|
||||
DropDownList list;
|
||||
for (size_t i = 0; i < _sorted_standard_cargo_specs.size(); ++i) {
|
||||
const CargoSpec *cs = _sorted_cargo_specs[i];
|
||||
list.emplace_back(new DropDownListStringItem(cs->name, cs->Index(), false));
|
||||
list.push_back(MakeDropDownListStringItem(cs->name, cs->Index(), false));
|
||||
}
|
||||
if (!list.empty()) ShowDropDownList(this, std::move(list), value, widget, 0);
|
||||
break;
|
||||
@@ -3149,7 +3149,7 @@ public:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
list.push_back(std::make_unique<DropDownListStringItem>(OrderStringForVariable(this->vehicle, _order_conditional_variable[i]), _order_conditional_variable[i], false));
|
||||
list.push_back(MakeDropDownListStringItem(OrderStringForVariable(this->vehicle, _order_conditional_variable[i]), _order_conditional_variable[i], false));
|
||||
}
|
||||
ShowDropDownList(this, std::move(list), ocv, WID_O_COND_VARIABLE);
|
||||
break;
|
||||
@@ -3164,11 +3164,11 @@ public:
|
||||
const int false_cond = ((int)OCC_IS_FALSE) << 16;
|
||||
int first_last_value = 0;
|
||||
SB(first_last_value, ODCB_MODE_START, ODCB_MODE_COUNT, ODCM_FIRST_LAST);
|
||||
list.emplace_back(new DropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_IS_FIRST, true_cond | first_last_value, false));
|
||||
list.emplace_back(new DropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_IS_NOT_FIRST, false_cond | first_last_value, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_IS_FIRST, true_cond | first_last_value, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_IS_NOT_FIRST, false_cond | first_last_value, false));
|
||||
SetBit(first_last_value, ODFLCB_LAST_SLOT);
|
||||
list.emplace_back(new DropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_IS_LAST, true_cond | first_last_value, false));
|
||||
list.emplace_back(new DropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_IS_NOT_LAST, false_cond | first_last_value, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_IS_LAST, true_cond | first_last_value, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_IS_NOT_LAST, false_cond | first_last_value, false));
|
||||
|
||||
uint16_t slot_flags = 0;
|
||||
uint schedule_index = GB(o->GetXData(), 0, 16);
|
||||
@@ -3185,8 +3185,8 @@ public:
|
||||
SB(tag_cond_value, ODCB_MODE_START, ODCB_MODE_COUNT, OCDM_TAG);
|
||||
SB(tag_cond_value, ODFLCB_TAG_START, ODFLCB_TAG_COUNT, tag);
|
||||
SetDParam(0, tag + 1);
|
||||
list.emplace_back(new DropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_HAS_TAG, true_cond | tag_cond_value, false));
|
||||
list.emplace_back(new DropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_DOESNT_HAVE_TAG, false_cond | tag_cond_value, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_HAS_TAG, true_cond | tag_cond_value, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_CONDITIONAL_COMPARATOR_DISPATCH_SLOT_DOESNT_HAVE_TAG, false_cond | tag_cond_value, false));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3280,9 +3280,9 @@ public:
|
||||
|
||||
case WID_O_COUNTER_OP: {
|
||||
DropDownList list;
|
||||
list.emplace_back(new DropDownListStringItem(STR_TRACE_RESTRICT_COUNTER_INCREASE, 0, false));
|
||||
list.emplace_back(new DropDownListStringItem(STR_TRACE_RESTRICT_COUNTER_DECREASE, 1, false));
|
||||
list.emplace_back(new DropDownListStringItem(STR_TRACE_RESTRICT_COUNTER_SET, 2, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_TRACE_RESTRICT_COUNTER_INCREASE, 0, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_TRACE_RESTRICT_COUNTER_DECREASE, 1, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_TRACE_RESTRICT_COUNTER_SET, 2, false));
|
||||
int selected = this->vehicle->GetOrder(this->OrderGetSel())->GetCounterOperation();
|
||||
ShowDropDownList(this, std::move(list), selected, WID_O_COUNTER_OP, 0);
|
||||
break;
|
||||
@@ -3314,8 +3314,8 @@ public:
|
||||
|
||||
case WID_O_DEPARTURE_VIA_TYPE: {
|
||||
DropDownList list;
|
||||
list.emplace_back(new DropDownListStringItem(STR_ORDER_LABEL_DEPARTURES_SHOW_AS_VIA, OLST_DEPARTURES_VIA, false));
|
||||
list.emplace_back(new DropDownListStringItem(STR_ORDER_LABEL_DEPARTURES_REMOVE_VIA, OLST_DEPARTURES_REMOVE_VIA, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_LABEL_DEPARTURES_SHOW_AS_VIA, OLST_DEPARTURES_VIA, false));
|
||||
list.push_back(MakeDropDownListStringItem(STR_ORDER_LABEL_DEPARTURES_REMOVE_VIA, OLST_DEPARTURES_REMOVE_VIA, false));
|
||||
int selected = this->vehicle->GetOrder(this->OrderGetSel())->GetLabelSubType();
|
||||
ShowDropDownList(this, std::move(list), selected, WID_O_DEPARTURE_VIA_TYPE, 0);
|
||||
break;
|
||||
|
@@ -244,8 +244,8 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa)
|
||||
if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) usererror("Font glyph is too large");
|
||||
|
||||
SpriteLoader::SpriteCollection spritecollection;
|
||||
SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_NORMAL];
|
||||
sprite.AllocateData(ZOOM_LVL_NORMAL, width * height);
|
||||
SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN];
|
||||
sprite.AllocateData(ZOOM_LVL_MIN, width * height);
|
||||
sprite.type = SpriteType::Font;
|
||||
sprite.colours = (use_aa ? SCC_PAL | SCC_ALPHA : SCC_PAL);
|
||||
sprite.width = width;
|
||||
|
@@ -229,8 +229,8 @@ void Win32FontCache::ClearFontCache()
|
||||
|
||||
/* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */
|
||||
SpriteLoader::SpriteCollection spritecollection;
|
||||
SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_NORMAL];
|
||||
sprite.AllocateData(ZOOM_LVL_NORMAL, width * height);
|
||||
SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN];
|
||||
sprite.AllocateData(ZOOM_LVL_MIN, width * height);
|
||||
sprite.type = SpriteType::Font;
|
||||
sprite.colours = (aa ? SCC_PAL | SCC_ALPHA : SCC_PAL);
|
||||
sprite.width = width;
|
||||
|
@@ -47,8 +47,8 @@ void PlanLine::UpdateVisualExtents()
|
||||
if (y > max_y) max_y = y;
|
||||
}
|
||||
|
||||
this->viewport_extents = { (int)(min_x * TILE_SIZE * 2 * ZOOM_LVL_BASE), (int)(min_y * TILE_SIZE * ZOOM_LVL_BASE),
|
||||
(int)((max_x + 1) * TILE_SIZE * 2 * ZOOM_LVL_BASE), (int)((max_y + 1) * TILE_SIZE * ZOOM_LVL_BASE) };
|
||||
this->viewport_extents = { (int)(min_x * TILE_SIZE * 2 * ZOOM_BASE), (int)(min_y * TILE_SIZE * ZOOM_BASE),
|
||||
(int)((max_x + 1) * TILE_SIZE * 2 * ZOOM_BASE), (int)((max_y + 1) * TILE_SIZE * ZOOM_BASE) };
|
||||
}
|
||||
|
||||
bool Plan::ValidateNewLine()
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user