Merge branch 'master' into jgrpp-beta
# Conflicts: # src/economy.cpp # src/elrail.cpp # src/graph_gui.cpp # src/linkgraph/linkgraph_gui.cpp # src/network/core/game_info.cpp # src/newgrf_station.cpp # src/saveload/saveload.cpp # src/settings.cpp # src/station_cmd.cpp # src/station_gui.cpp # src/strings_func.h # src/table/settings/network_settings.ini # src/table/settings/settings.ini
This commit is contained in:
@@ -1338,8 +1338,7 @@ struct BuildVehicleWindow : BuildVehicleWindowBase {
|
||||
}
|
||||
|
||||
/* Collect available cargo types for filtering. */
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
this->cargo_filter[filter_items] = cs->Index();
|
||||
this->cargo_filter_texts[filter_items] = cs->name;
|
||||
filter_items++;
|
||||
@@ -2110,8 +2109,7 @@ struct BuildVehicleWindowTrainAdvanced final : BuildVehicleWindowBase {
|
||||
filter_items++;
|
||||
|
||||
/* Collect available cargo types for filtering. */
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
state.cargo_filter[filter_items] = cs->Index();
|
||||
state.cargo_filter_texts[filter_items] = cs->name;
|
||||
filter_items++;
|
||||
|
@@ -149,8 +149,8 @@ SpriteID CargoSpec::GetCargoIcon() const
|
||||
return sprite;
|
||||
}
|
||||
|
||||
std::vector<const CargoSpec *> _sorted_cargo_specs; ///< Cargo specifications sorted alphabetically by name.
|
||||
uint8 _sorted_standard_cargo_specs_size; ///< Number of standard cargo specifications stored in the _sorted_cargo_specs array.
|
||||
std::vector<const CargoSpec *> _sorted_cargo_specs; ///< Cargo specifications sorted alphabetically by name.
|
||||
span<const CargoSpec *> _sorted_standard_cargo_specs; ///< Standard cargo specifications sorted alphabetically by name.
|
||||
|
||||
/** Sort cargo specifications by their name. */
|
||||
static bool CargoSpecNameSorter(const CargoSpec * const &a, const CargoSpec * const &b)
|
||||
@@ -196,13 +196,16 @@ void InitializeSortedCargoSpecs()
|
||||
/* Sort cargo specifications by cargo class and name. */
|
||||
std::sort(_sorted_cargo_specs.begin(), _sorted_cargo_specs.end(), &CargoSpecClassSorter);
|
||||
|
||||
/* Count the number of standard cargos and fill the mask. */
|
||||
_standard_cargo_mask = 0;
|
||||
|
||||
_sorted_standard_cargo_specs_size = 0;
|
||||
uint8 nb_standard_cargo = 0;
|
||||
for (const auto &cargo : _sorted_cargo_specs) {
|
||||
if (cargo->classes & CC_SPECIAL) break;
|
||||
_sorted_standard_cargo_specs_size++;
|
||||
nb_standard_cargo++;
|
||||
SetBit(_standard_cargo_mask, cargo->Index());
|
||||
}
|
||||
|
||||
/* _sorted_standard_cargo_specs is a subset of _sorted_cargo_specs. */
|
||||
_sorted_standard_cargo_specs = { _sorted_cargo_specs.data(), nb_standard_cargo };
|
||||
}
|
||||
|
||||
|
@@ -15,6 +15,8 @@
|
||||
#include "gfx_type.h"
|
||||
#include "strings_type.h"
|
||||
#include "landscape_type.h"
|
||||
#include "core/bitmath_func.hpp"
|
||||
#include "core/span_type.hpp"
|
||||
#include <vector>
|
||||
|
||||
/** Globally unique label of a cargo type. */
|
||||
@@ -190,7 +192,7 @@ CargoID GetDefaultCargoID(LandscapeID l, CargoType ct);
|
||||
|
||||
void InitializeSortedCargoSpecs();
|
||||
extern std::vector<const CargoSpec *> _sorted_cargo_specs;
|
||||
extern uint8 _sorted_standard_cargo_specs_size;
|
||||
extern span<const CargoSpec *> _sorted_standard_cargo_specs;
|
||||
|
||||
uint ConvertCargoQuantityToDisplayQuantity(CargoID cargo, uint quantity);
|
||||
uint ConvertDisplayQuantityToCargoQuantity(CargoID cargo, uint quantity);
|
||||
@@ -206,13 +208,6 @@ static inline bool IsCargoInClass(CargoID c, CargoClass cc)
|
||||
return (CargoSpec::Get(c)->classes & cc) != 0;
|
||||
}
|
||||
|
||||
#define FOR_EACH_SET_CARGO_ID(var, cargo_bits) FOR_EACH_SET_BIT_EX(CargoID, var, CargoTypes, cargo_bits)
|
||||
|
||||
/**
|
||||
* Loop header for iterating over 'real' cargoes, sorted by name. Phony cargoes like regearing cargoes are skipped.
|
||||
* @param var Reference getting the cargospec.
|
||||
* @see CargoSpec
|
||||
*/
|
||||
#define FOR_ALL_SORTED_STANDARD_CARGOSPECS(var) for (uint8 index = 0; index < _sorted_standard_cargo_specs_size && (var = _sorted_cargo_specs[index], true); index++)
|
||||
using SetCargoBitIterator = SetBitIterator<CargoID, CargoTypes>;
|
||||
|
||||
#endif /* CARGOTYPE_H */
|
||||
|
@@ -356,45 +356,55 @@ static inline T ROR(const T x, const uint8 n)
|
||||
return (T)(x >> n | x << (sizeof(x) * 8 - n));
|
||||
}
|
||||
|
||||
/**
|
||||
* Do an operation for each set bit in a value.
|
||||
*
|
||||
* This macros is used to do an operation for each set
|
||||
* bit in a variable. The second parameter is a
|
||||
* variable that is used as the bit position counter.
|
||||
* The fourth parameter is an expression of the bits
|
||||
* we need to iterate over. This expression will be
|
||||
* evaluated once.
|
||||
*
|
||||
* @param Tbitpos_type Type of the position counter variable.
|
||||
* @param bitpos_var The position counter variable.
|
||||
* @param Tbitset_type Type of the bitset value.
|
||||
* @param bitset_value The bitset value which we check for bits.
|
||||
*
|
||||
* @see FOR_EACH_SET_BIT
|
||||
*/
|
||||
#define FOR_EACH_SET_BIT_EX(Tbitpos_type, bitpos_var, Tbitset_type, bitset_value) \
|
||||
for ( \
|
||||
Tbitset_type ___FESBE_bits = (bitpos_var = (Tbitpos_type)0, bitset_value); \
|
||||
___FESBE_bits != (Tbitset_type)0; \
|
||||
___FESBE_bits = (Tbitset_type)(___FESBE_bits >> 1), bitpos_var++ \
|
||||
) \
|
||||
if ((___FESBE_bits & 1) != 0)
|
||||
/**
|
||||
* Iterable ensemble of each set bit in a value.
|
||||
* @tparam Tbitpos Type of the position variable.
|
||||
* @tparam Tbitset Type of the bitset value.
|
||||
*/
|
||||
template <typename Tbitpos = uint, typename Tbitset = uint>
|
||||
struct SetBitIterator {
|
||||
struct Iterator {
|
||||
typedef Tbitpos value_type;
|
||||
typedef value_type *pointer;
|
||||
typedef value_type &reference;
|
||||
typedef size_t difference_type;
|
||||
typedef std::forward_iterator_tag iterator_category;
|
||||
|
||||
/**
|
||||
* Do an operation for each set set bit in a value.
|
||||
*
|
||||
* This macros is used to do an operation for each set
|
||||
* bit in a variable. The first parameter is a variable
|
||||
* that is used as the bit position counter.
|
||||
* The second parameter is an expression of the bits
|
||||
* we need to iterate over. This expression will be
|
||||
* evaluated once.
|
||||
*
|
||||
* @param bitpos_var The position counter variable.
|
||||
* @param bitset_value The value which we check for set bits.
|
||||
*/
|
||||
#define FOR_EACH_SET_BIT(bitpos_var, bitset_value) FOR_EACH_SET_BIT_EX(uint, bitpos_var, uint, bitset_value)
|
||||
explicit Iterator(Tbitset bitset) : bitset(bitset), bitpos(static_cast<Tbitpos>(0))
|
||||
{
|
||||
this->Validate();
|
||||
}
|
||||
|
||||
bool operator==(const Iterator &other) const
|
||||
{
|
||||
return this->bitset == other.bitset && (this->bitset == 0 || this->bitpos == other.bitpos);
|
||||
}
|
||||
bool operator!=(const Iterator &other) const { return !(*this == other); }
|
||||
Tbitpos operator*() const { return this->bitpos; }
|
||||
Iterator & operator++() { this->Next(); this->Validate(); return *this; }
|
||||
|
||||
private:
|
||||
Tbitset bitset;
|
||||
Tbitpos bitpos;
|
||||
void Validate()
|
||||
{
|
||||
while (this->bitset != 0 && (this->bitset & 1) == 0) this->Next();
|
||||
}
|
||||
void Next()
|
||||
{
|
||||
this->bitset = static_cast<Tbitset>(this->bitset >> 1);
|
||||
this->bitpos++;
|
||||
}
|
||||
};
|
||||
|
||||
SetBitIterator(Tbitset bitset) : bitset(bitset) {}
|
||||
Iterator begin() { return Iterator(this->bitset); }
|
||||
Iterator end() { return Iterator(static_cast<Tbitset>(0)); }
|
||||
bool empty() { return this->begin() == this->end(); }
|
||||
|
||||
private:
|
||||
Tbitset bitset;
|
||||
};
|
||||
|
||||
#if defined(__APPLE__)
|
||||
/* Make endian swapping use Apple's macros to increase speed
|
||||
|
@@ -194,8 +194,7 @@ protected:
|
||||
if (width > this->group_width) this->group_width = width;
|
||||
}
|
||||
|
||||
uint owner;
|
||||
FOR_EACH_SET_BIT(owner, companies) {
|
||||
for (uint owner : SetBitIterator(companies)) {
|
||||
SetDParam(0, owner);
|
||||
int width = (GetStringBoundingBox(STR_DEPARTURES_TOC)).width + 4;
|
||||
if (width > this->toc_width) this->toc_width = width;
|
||||
|
@@ -1595,9 +1595,8 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station
|
||||
bool check_order = (v->First()->current_order.GetLoadType() == OLFB_CARGO_TYPE_LOAD);
|
||||
if (is_auto_refit) {
|
||||
/* Get a refittable cargo type with waiting cargo for next_station or INVALID_STATION. */
|
||||
CargoID cid;
|
||||
new_cid = v_start->cargo_type;
|
||||
FOR_EACH_SET_CARGO_ID(cid, refit_mask) {
|
||||
for (CargoID cid : SetCargoBitIterator(refit_mask)) {
|
||||
if (check_order && v->First()->current_order.GetCargoLoadType(cid) == OLFB_NO_LOAD) continue;
|
||||
if (st->goods[cid].cargo.HasCargoFor(next_station.Get(cid))) {
|
||||
/* Try to find out if auto-refitting would succeed. In case the refit is allowed,
|
||||
|
@@ -572,8 +572,7 @@ static void DrawRailCatenaryRailway(const TileInfo *ti)
|
||||
};
|
||||
|
||||
/* Drawing of pylons is finished, now draw the wires */
|
||||
Track t;
|
||||
FOR_EACH_SET_TRACK(t, wireconfig[TS_HOME]) {
|
||||
for (Track t : SetTrackBitIterator(wireconfig[TS_HOME])) {
|
||||
SpriteID wire_base = get_wire_sprite(t, (t == halftile_track));
|
||||
byte PCPconfig = HasBit(PCPstatus, PCPpositions[t][0]) +
|
||||
(HasBit(PCPstatus, PCPpositions[t][1]) << 1);
|
||||
|
@@ -1033,6 +1033,10 @@ void DeterminePaths(const char *exe, bool only_local_path)
|
||||
_hotkeys_file = config_dir + "hotkeys.cfg";
|
||||
extern std::string _windows_file;
|
||||
_windows_file = config_dir + "windows.cfg";
|
||||
extern std::string _private_file;
|
||||
_private_file = config_dir + "private.cfg";
|
||||
extern std::string _secrets_file;
|
||||
_secrets_file = config_dir + "secrets.cfg";
|
||||
|
||||
#ifdef USE_XDG
|
||||
if (config_dir == config_home) {
|
||||
|
@@ -336,9 +336,8 @@ struct GoalQuestionWindow : public Window {
|
||||
this->question = stredup(question);
|
||||
|
||||
/* Figure out which buttons we have to enable. */
|
||||
uint bit;
|
||||
int n = 0;
|
||||
FOR_EACH_SET_BIT(bit, button_mask) {
|
||||
for (uint bit : SetBitIterator(button_mask)) {
|
||||
if (bit >= GOAL_QUESTION_BUTTON_COUNT) break;
|
||||
this->button[n++] = bit;
|
||||
if (n == 3) break;
|
||||
|
@@ -895,7 +895,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
|
||||
this->CreateNestedTree();
|
||||
this->vscroll = this->GetScrollbar(WID_CPR_MATRIX_SCROLLBAR);
|
||||
this->vscroll->SetCount(_sorted_standard_cargo_specs_size);
|
||||
this->vscroll->SetCount(static_cast<int>(_sorted_standard_cargo_specs.size()));
|
||||
|
||||
this->SetWidgetLoweredState(WID_CPR_DAYS, _cargo_payment_x_mode == 0);
|
||||
this->SetWidgetLoweredState(WID_CPR_SPEED, _cargo_payment_x_mode == 1);
|
||||
@@ -936,8 +936,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
this->excluded_data = 0;
|
||||
|
||||
int i = 0;
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
if (HasBit(_legend_excluded_cargo, cs->Index())) SetBit(this->excluded_data, i);
|
||||
i++;
|
||||
}
|
||||
@@ -950,8 +949,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
return;
|
||||
}
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
SetDParam(0, cs->name);
|
||||
Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO);
|
||||
d.width += this->legend_width + 4; // colour field
|
||||
@@ -983,8 +981,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
int pos = this->vscroll->GetPosition();
|
||||
int max = pos + this->vscroll->GetCapacity();
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
if (pos-- > 0) continue;
|
||||
if (--max < 0) break;
|
||||
|
||||
@@ -1018,8 +1015,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
case WID_CPR_DISABLE_CARGOES: {
|
||||
/* Add all cargoes to the excluded lists. */
|
||||
int i = 0;
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
SetBit(_legend_excluded_cargo, cs->Index());
|
||||
SetBit(this->excluded_data, i);
|
||||
i++;
|
||||
@@ -1032,8 +1028,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_CPR_MATRIX);
|
||||
if (row >= this->vscroll->GetCount()) return;
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
if (row-- > 0) continue;
|
||||
|
||||
ToggleBit(_legend_excluded_cargo, cs->Index());
|
||||
@@ -1083,10 +1078,9 @@ struct PaymentRatesGraphWindow : BaseGraphWindow {
|
||||
this->UpdateExcludedData();
|
||||
|
||||
int i = 0;
|
||||
const CargoSpec *cs;
|
||||
const float factor = 200.0f * 28.57f * 0.4f * ConvertSpeedToUnitDisplaySpeed(1 << 16) / (1.6f * static_cast<float>(1 << 16));
|
||||
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
this->colours[i] = cs->legend_colour;
|
||||
for (int j = 0; j != 20; j++) {
|
||||
const byte ctt = _cargo_payment_x_mode ? static_cast<byte>(factor / static_cast<float>((j + 1) * this->x_values_increment)) : (j + 1) * 4;
|
||||
@@ -1704,8 +1698,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
|
||||
this->excluded_data = 0;
|
||||
|
||||
uint8 i = 0;
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
if (!HasBit(this->present_cargoes, cs->Index())) continue;
|
||||
if (HasBit(legend_excluded_cargo, cs->Index())) SetBit(this->excluded_data, i);
|
||||
i++;
|
||||
@@ -1719,8 +1712,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
|
||||
return;
|
||||
}
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
SetDParam(0, cs->name);
|
||||
Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO);
|
||||
d.width += this->legend_width + 4; // color field
|
||||
@@ -1752,8 +1744,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
|
||||
int pos = this->vscroll->GetPosition();
|
||||
int max = pos + this->vscroll->GetCapacity();
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
if (!HasBit(this->present_cargoes, cs->Index())) continue;
|
||||
if (pos-- > 0) continue;
|
||||
if (--max < 0) break;
|
||||
@@ -1789,8 +1780,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
|
||||
/* Add all cargoes to the excluded lists. */
|
||||
this->legend_excluded_cargo = ~static_cast<CargoTypes>(0);
|
||||
int i = 0;
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
if (!HasBit(this->present_cargoes, cs->Index())) continue;
|
||||
SetBit(this->excluded_data, i);
|
||||
i++;
|
||||
@@ -1803,8 +1793,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
|
||||
uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SCG_MATRIX);
|
||||
if (row >= this->vscroll->GetCount()) return;
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
if (!HasBit(this->present_cargoes, cs->Index())) continue;
|
||||
if (row-- > 0) continue;
|
||||
|
||||
@@ -1850,8 +1839,7 @@ struct StationCargoGraphWindow final : BaseGraphWindow {
|
||||
this->UpdateExcludedData();
|
||||
|
||||
uint8 i = 0;
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
if (!HasBit(this->present_cargoes, cs->Index())) continue;
|
||||
this->colours[i] = cs->legend_colour;
|
||||
|
||||
|
@@ -1376,8 +1376,7 @@ protected:
|
||||
filter_items++;
|
||||
|
||||
/* Collect available cargo types for filtering. */
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
this->cargo_filter[filter_items] = cs->Index();
|
||||
this->cargo_filter_texts[filter_items] = cs->name;
|
||||
filter_items++;
|
||||
@@ -3003,8 +3002,7 @@ struct IndustryCargoesWindow : public Window {
|
||||
|
||||
case WID_IC_CARGO_DROPDOWN: {
|
||||
DropDownList lst;
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
lst.emplace_back(new DropDownListStringItem(cs->name, cs->Index(), false));
|
||||
}
|
||||
if (!lst.empty()) {
|
||||
|
@@ -100,6 +100,29 @@ IniItem *IniGroup::GetItem(const std::string &name, bool create)
|
||||
return new IniItem(this, name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the item with the given name.
|
||||
* @param name Name of the item to remove.
|
||||
*/
|
||||
void IniGroup::RemoveItem(const std::string &name)
|
||||
{
|
||||
IniItem **prev = &this->item;
|
||||
|
||||
for (IniItem *item = this->item; item != nullptr; prev = &item->next, item = item->next) {
|
||||
if (item->name != name) continue;
|
||||
|
||||
*prev = item->next;
|
||||
if (this->last_item == &this->item) {
|
||||
this->last_item = &item->next;
|
||||
}
|
||||
|
||||
item->next = nullptr;
|
||||
delete item;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all items in the group
|
||||
*/
|
||||
|
@@ -49,6 +49,7 @@ struct IniGroup {
|
||||
~IniGroup();
|
||||
|
||||
IniItem *GetItem(const std::string &name, bool create);
|
||||
void RemoveItem(const std::string &name);
|
||||
void Clear();
|
||||
};
|
||||
|
||||
|
@@ -2160,6 +2160,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nova empresa)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Cria uma nova empresa e se une a ela
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Esse é você
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Esse é o hospedeiro do jogo
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s} / {NUM} empresa{P "" s}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Banir
|
||||
|
@@ -2160,6 +2160,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Companyia nova
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Crea una companyia nova i uniu-vos.
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Aquest ets tu.
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Aquest és l'hoste de la partida.
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} client{P "" s} / {NUM} companyi{P a es}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Treu
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Expulsa
|
||||
|
@@ -2159,6 +2159,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nieuw bedrijf)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Een nieuw bedrijf maken en meedoen
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Dit ben jij
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Dit is de host van het spel
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klant{P "" en} / {NUM} bedrij{P f ven}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Eruit schoppen
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Bannen
|
||||
|
@@ -2182,6 +2182,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(New company)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company and join it
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}This is you
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}This is the host of the game
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} client{P "" s} / {NUM} compan{P y ies}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban
|
||||
|
@@ -2470,6 +2470,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Neue Firma)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Eine neue Firma gründen und beitreten
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Das sind Sie
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Dies ist der Host des Spiels
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} Client{P "" s} / {NUM} Firm{P a en}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Hinauswerfen
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Bannen
|
||||
|
@@ -62,6 +62,7 @@ STR_COLOUR_RED :लाल
|
||||
|
||||
# Units used in OpenTTD
|
||||
|
||||
STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp
|
||||
|
||||
|
||||
|
||||
@@ -98,9 +99,11 @@ STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :पिछले
|
||||
STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}ध्वनि/संगीत विकल्प
|
||||
|
||||
# Extra tooltips for the scenario editor toolbar
|
||||
STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}मानचित्र, नगर निर्देशिका दिखायें
|
||||
|
||||
############ range for SE file menu starts
|
||||
STR_SCENEDIT_FILE_MENU_SEPARATOR :
|
||||
STR_SCENEDIT_FILE_MENU_QUIT :निकास
|
||||
############ range for SE file menu starts
|
||||
|
||||
############ range for settings menu starts
|
||||
@@ -184,6 +187,7 @@ STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPAN
|
||||
# Performance detail window
|
||||
############ Those following lines need to be in this order!!
|
||||
STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}वाहन:
|
||||
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}माल :
|
||||
############ End of order list
|
||||
|
||||
# Music window
|
||||
@@ -211,6 +215,7 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * ठ
|
||||
|
||||
STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}नागरिक हर्षित हैं . . .{}पहली माल ट्रैम {STATION} पर पहुँची है!
|
||||
|
||||
|
||||
|
||||
@@ -220,6 +225,7 @@ STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLAC
|
||||
|
||||
|
||||
|
||||
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING}{INDUSTRY} के उत्पादन में {COMMA}% कमी आयी!
|
||||
|
||||
|
||||
# Order review system / warnings
|
||||
@@ -238,6 +244,7 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC
|
||||
|
||||
############ start of currency region
|
||||
STR_GAME_OPTIONS_CURRENCY_FIM :फिनलैंड मार्का (FIM)
|
||||
STR_GAME_OPTIONS_CURRENCY_ISK :आइसलैंडिक क्रोना (ISK)
|
||||
STR_GAME_OPTIONS_CURRENCY_HKD :हाँग काँग डॉलर (एचकेडी)
|
||||
############ end of currency region
|
||||
|
||||
@@ -338,6 +345,7 @@ STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :दुर्घ
|
||||
|
||||
STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM}
|
||||
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :नगर में माल उत्पादन: {STRING}
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
||||
@@ -353,11 +361,13 @@ STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :२x
|
||||
STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}सामान्य
|
||||
|
||||
|
||||
STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :नौकाओं द्वारा उपयोग किया जाने वाला पथान्वेषी
|
||||
|
||||
|
||||
# Config errors
|
||||
|
||||
# Video initalization errors
|
||||
STR_VIDEO_DRIVER_ERROR :{WHITE}वीडियो विन्यास में त्रुटि...
|
||||
|
||||
# Intro window
|
||||
|
||||
@@ -366,6 +376,7 @@ STR_INTRO_PLAY_HEIGHTMAP :{BLACK}उभ
|
||||
|
||||
STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}अपनी इच्छानुसार एक क्रीड़ा-विश्व/परिदृश्य बनायें
|
||||
|
||||
STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}'समशीतोष्ण' जलवायु वाला क्षेत्र चुनें
|
||||
|
||||
|
||||
|
||||
@@ -394,6 +405,7 @@ STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x
|
||||
|
||||
|
||||
|
||||
STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}सर्वर की जानकारी अद्यतन करें
|
||||
|
||||
|
||||
|
||||
@@ -508,11 +520,13 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}नह
|
||||
|
||||
# Airport construction window
|
||||
|
||||
STR_AIRPORT_INTERCONTINENTAL :अंतरमहाद्वीपीय
|
||||
|
||||
STR_AIRPORT_CLASS_SMALL :लघु विमानतल
|
||||
|
||||
|
||||
# Landscaping toolbar
|
||||
STR_LANDSCAPING_TOOLBAR :{WHITE}भूदृश्य निर्माण
|
||||
|
||||
# Object construction window
|
||||
|
||||
@@ -541,6 +555,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}उद
|
||||
STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :रिक्त भूमि
|
||||
|
||||
|
||||
STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :वृक्ष आच्छादित सड़क
|
||||
|
||||
# Houses come directly from their building names
|
||||
|
||||
@@ -591,6 +606,7 @@ STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} /
|
||||
|
||||
|
||||
|
||||
STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :मूल (D)
|
||||
|
||||
|
||||
# NewGRF save preset window
|
||||
@@ -640,6 +656,7 @@ STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}फै
|
||||
|
||||
# Town local authority window
|
||||
|
||||
STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :लघु विज्ञापन अभियान
|
||||
|
||||
|
||||
# Goal window
|
||||
@@ -653,6 +670,7 @@ STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING}
|
||||
############ End of Goal Question button list
|
||||
|
||||
# Subsidies window
|
||||
STR_SUBSIDIES_OFFERED_TITLE :{BLACK}इन सेवाओं के लिये अनुदान प्रस्तावित :
|
||||
|
||||
# Story book window
|
||||
STR_STORY_BOOK_TITLE :{YELLOW}{STRING}
|
||||
@@ -753,6 +771,7 @@ STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}भा
|
||||
STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}छिपायें
|
||||
|
||||
|
||||
STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}नौका प्रकार को छिपायें/दिखायें
|
||||
|
||||
|
||||
# Depot window
|
||||
@@ -803,6 +822,7 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE
|
||||
|
||||
|
||||
|
||||
STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}वर्तमान ट्रेन व्यवहार - ट्रेन रोकने/चलाने के लिये क्लिक करें
|
||||
|
||||
|
||||
# Messages in the start stop button in the vehicle view
|
||||
@@ -823,6 +843,7 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE
|
||||
|
||||
|
||||
# Extra buttons for train details windows
|
||||
STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} निर्माण: {LTBLUE}{NUM}{BLACK} मूल्य: {LTBLUE}{CURRENCY_LONG}
|
||||
|
||||
|
||||
|
||||
@@ -1003,6 +1024,7 @@ STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}जह
|
||||
|
||||
|
||||
|
||||
STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}रेल वाहन नहीं बेच सकते...
|
||||
|
||||
|
||||
|
||||
@@ -1013,6 +1035,7 @@ STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}जह
|
||||
|
||||
|
||||
# Order related errors
|
||||
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... वाहन सभी स्टेशनों तक नहीं जा सकता
|
||||
|
||||
|
||||
# Timetable related errors
|
||||
@@ -1049,10 +1072,12 @@ STR_SV_STNAME_WAYPOINT :{STRING}
|
||||
# Vehicle names
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :कोयला वाहन
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FRUIT_TRUCK :फल वाहन
|
||||
STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (विद्युतीय)
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :खिलौनों का डब्बा
|
||||
STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :बबल वैन
|
||||
STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :प्लॉडीपीहट एमके३ बस
|
||||
STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :फोस्टर कवचयुक्त ट्रक
|
||||
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :पावरनोट मिष्ठान्न ट्रक
|
||||
STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_COTSWALD_LB_3 :बेकवेल कॉट्सवॉल्ड एलबी-३
|
||||
STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB_9 :बेकवेल लकेट एलबी-९
|
||||
STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB80 :बेकवेल लकेट एलबी८०
|
||||
@@ -1090,6 +1115,7 @@ STR_COMPANY_NAME :{COMPANY}
|
||||
STR_COMPANY_NAME_COMPANY_NUM :{COMPANY} {COMPANY_NUM}
|
||||
STR_DEPOT_NAME :{DEPOT}
|
||||
STR_ENGINE_NAME :{ENGINE}
|
||||
STR_HIDDEN_ENGINE_NAME :{ENGINE} (प्रच्छन्न)
|
||||
STR_GROUP_NAME :{GROUP}
|
||||
STR_INDUSTRY_NAME :{INDUSTRY}
|
||||
STR_PRESIDENT_NAME :{PRESIDENT_NAME}
|
||||
|
@@ -2069,6 +2069,7 @@ STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Il nome
|
||||
STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Imposta password
|
||||
STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Protegge la partita con una password in modo che non sia accessibile pubblicamente
|
||||
|
||||
STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Visibilità
|
||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} client
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Limite client:
|
||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Imposta il numero massimo di client. Non tutti i posti dovranno essere occupati
|
||||
@@ -2138,6 +2139,7 @@ STR_NETWORK_COMPANY_LIST_SPECTATE :Diventa spettat
|
||||
# Network client list
|
||||
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Sei sicuro di voler eliminare la compagnia '{COMPANY}'?
|
||||
|
||||
STR_NETWORK_SERVER :Server
|
||||
STR_NETWORK_CLIENT :Client
|
||||
|
@@ -1204,6 +1204,7 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :車両故障: {
|
||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :点検が不十分な車両が故障する頻度を設定します
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :助成金の乗数: {STRING}
|
||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :助成金対象の路線に対して、通常の輸送相場の何倍が支払われるかを設定します
|
||||
STR_CONFIG_SETTING_SUBSIDY_DURATION :助成期間: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :建設費: {STRING}
|
||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :建設・購入費用のレベルを設定します
|
||||
STR_CONFIG_SETTING_RECESSIONS :景気後退: {STRING}
|
||||
|
@@ -2163,6 +2163,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nytt firma)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Opprett et nytt firma og bli med i det
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Dette er deg
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Dette er verten for spillet
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" s} / {NUM} firma{P et er}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Spark
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Utesteng
|
||||
|
@@ -305,10 +305,10 @@ STR_SORT_BY_LENGTH :Longitud
|
||||
STR_SORT_BY_LIFE_TIME :Vida útil restante
|
||||
STR_SORT_BY_TIMETABLE_DELAY :Retraso en itinerario
|
||||
STR_SORT_BY_FACILITY :Tipo de estación
|
||||
STR_SORT_BY_WAITING_TOTAL :Cargamento total en espera
|
||||
STR_SORT_BY_WAITING_AVAILABLE :Cargamento disponible en espera
|
||||
STR_SORT_BY_WAITING_TOTAL :Carga total en espera
|
||||
STR_SORT_BY_WAITING_AVAILABLE :Carga disponible en espera
|
||||
STR_SORT_BY_RATING_MAX :Valoración más alta de cargamento
|
||||
STR_SORT_BY_RATING_MIN :Valoración más baja de cargamento
|
||||
STR_SORT_BY_RATING_MIN :Menor índice de carga
|
||||
STR_SORT_BY_ENGINE_ID :Id. locomotora (orden clásico)
|
||||
STR_SORT_BY_COST :Costo
|
||||
STR_SORT_BY_POWER :Potencia
|
||||
@@ -350,8 +350,8 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Mostrar
|
||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Mostrar lista de vehículos de carretera de la empresa. Ctrl+Clic oculta la lista de grupos
|
||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Mostrar lista de barcos de la empresa. Ctrl+Clic oculta la lista de grupos
|
||||
STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Mostrar lista de aeronaves de la empresa. Ctrl+Clic oculta la lista de grupos
|
||||
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Acercar vista
|
||||
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Alejar vista
|
||||
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Acercar
|
||||
STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Alejar
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir vías férreas
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construir carreteras
|
||||
STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construir tranvías
|
||||
@@ -418,7 +418,7 @@ STR_FILE_MENU_EXIT :Salir
|
||||
# map menu
|
||||
STR_MAP_MENU_MAP_OF_WORLD :Minimapa completo
|
||||
STR_MAP_MENU_EXTRA_VIEWPORT :Ventana de vista adicional
|
||||
STR_MAP_MENU_LINGRAPH_LEGEND :Leyenda de flujo de cargamento
|
||||
STR_MAP_MENU_LINGRAPH_LEGEND :Leyenda de flujo de carga
|
||||
STR_MAP_MENU_SIGN_LIST :Lista de carteles
|
||||
|
||||
############ range for town menu starts
|
||||
@@ -433,10 +433,10 @@ STR_SUBSIDIES_MENU_SUBSIDIES :Subsidios
|
||||
############ range for graph menu starts
|
||||
STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gráfica de utilidades operativas
|
||||
STR_GRAPH_MENU_INCOME_GRAPH :Gráfica de ingresos
|
||||
STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfica de cargamento entregado
|
||||
STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfica de carga entregada
|
||||
STR_GRAPH_MENU_PERFORMANCE_HISTORY_GRAPH :Gráfica de desempeño
|
||||
STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfica del valor de la empresa
|
||||
STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Tarifas de pagos por cargamento
|
||||
STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Tasas de pago por carga
|
||||
############ range ends here
|
||||
|
||||
############ range for company league menu starts
|
||||
@@ -590,25 +590,25 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM
|
||||
|
||||
STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gráfica de utilidad operativa
|
||||
STR_GRAPH_INCOME_CAPTION :{WHITE}Gráfica de ingresos
|
||||
STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de cargamento entregadas
|
||||
STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de carga entregadas
|
||||
STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Nivel de desempeño (nivel máximo: 1000)
|
||||
STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Valor de la empresa
|
||||
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifas de pago por cargamento
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tasas de pago por carga
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Días en tránsito
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Pago por entregar 10 unidades (o 10,000 litros) de cargamento por distancia de 20 casillas
|
||||
STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Pago por entregar 10 unidades (o 10,000 litros) de carga por distancia de 20 casillas
|
||||
STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Activar todos
|
||||
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Desactivar todos
|
||||
STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Mostrar todos los tipos de carga en la gráfica de tarifas de pago por cargamento
|
||||
STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ocultar todos los tipos de carga en la gráfica de tarifas de pago por cargamento
|
||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar u ocultar gráfica de este tipo de cargamento
|
||||
STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Mostrar todos los tipos de carga en la gráfica de tasas de pago
|
||||
STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ocultar todos los tipos de carga en la gráfica de tasas de pago
|
||||
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Alternar gráfica de este tipo de carga
|
||||
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
|
||||
|
||||
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Mostrar detalles de nivel de desempeño
|
||||
|
||||
# Graph key window
|
||||
STR_GRAPH_KEY_CAPTION :{WHITE}Leyenda de gráfica
|
||||
STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Mostrar u ocultar la entrada de la empresa en la gráfica
|
||||
STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Mostrar u ocultar esta empresa en la gráfica
|
||||
|
||||
# Company league window
|
||||
STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Tabla de evaluación de empresas
|
||||
@@ -637,7 +637,7 @@ STR_PERFORMANCE_DETAIL_MIN_PROFIT :{BLACK}Utilidad
|
||||
STR_PERFORMANCE_DETAIL_MIN_INCOME :{BLACK}Ingreso mín.:
|
||||
STR_PERFORMANCE_DETAIL_MAX_INCOME :{BLACK}Ingreso máx.:
|
||||
STR_PERFORMANCE_DETAIL_DELIVERED :{BLACK}Entregado:
|
||||
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Cargamento:
|
||||
STR_PERFORMANCE_DETAIL_CARGO :{BLACK}Carga:
|
||||
STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Dinero:
|
||||
STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Préstamo:
|
||||
STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total:
|
||||
@@ -720,20 +720,20 @@ STR_SMALLMAP_CAPTION :{WHITE}Mapa: {S
|
||||
STR_SMALLMAP_TYPE_CONTOURS :Contornos
|
||||
STR_SMALLMAP_TYPE_VEHICLES :Vehículos
|
||||
STR_SMALLMAP_TYPE_INDUSTRIES :Industrias
|
||||
STR_SMALLMAP_TYPE_ROUTEMAP :Flujo de cargamento
|
||||
STR_SMALLMAP_TYPE_ROUTEMAP :Flujo de carga
|
||||
STR_SMALLMAP_TYPE_ROUTES :Rutas
|
||||
STR_SMALLMAP_TYPE_VEGETATION :Vegetación
|
||||
STR_SMALLMAP_TYPE_OWNERS :Propietarios
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Mostrar elevaciones en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Mostrar vehículos en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Mostrar industrias en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar flujo de cargamento en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Mostrar flujo de carga en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Mostrar rutas de transporte en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Mostrar vegetación en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Mostrar dueños de terreno en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Clic en un tipo de industria para mostrarlo u ocultarlo. Ctrl+Clic oculta todos los tipos excepto el elegido. Ctrl+Clic de nuevo en el mismo tipo muestra todos los tipos de industrias
|
||||
STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Clic en una empresa para mostrar u ocultar sus propiedades. Ctrl+Clic oculta todas las empresas excepto la elegida. Ctrl+Clic de nuevo en la misma empresa muestra todas las empresas
|
||||
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clic en un cargamento para mostrar u ocultar sus propiedades. Ctrl+Clic oculta todos los cargamentos excepto el elegido. Ctrl+Clic de nuevo muestra todos los tipos de cargamento
|
||||
STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Clic en una carga para mostrar u ocultar sus propiedades. Ctrl+Clic oculta todas las cargas excepto la elegida. Ctrl+Clic de nuevo muestra todos los tipos de carga
|
||||
|
||||
STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Carreteras
|
||||
STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Ferrocarriles
|
||||
@@ -772,15 +772,15 @@ STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STR
|
||||
STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY}
|
||||
STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN}
|
||||
STR_SMALLMAP_DISABLE_ALL :{BLACK}Ocultar todo
|
||||
STR_SMALLMAP_ENABLE_ALL :{BLACK}Ver todo
|
||||
STR_SMALLMAP_ENABLE_ALL :{BLACK}Mostrar todo
|
||||
STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Mostrar elevación
|
||||
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}No mostrar industrias en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Mostrar todas las industrias en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Mostrar u ocultar elevaciones en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}No mostrar propiedades de empresas en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Mostrar todas las propiedades de empresas en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}No mostrar ningún cargamento en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Muestra todos los cargamentos en el mapa
|
||||
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Ocultar todas las cargas del mapa
|
||||
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Mostrar todas las cargas en el mapa
|
||||
|
||||
# Status bar messages
|
||||
STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Mostrar último mensaje o noticia
|
||||
@@ -1025,7 +1025,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doble
|
||||
STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Cuádruple
|
||||
|
||||
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamaño de letra
|
||||
STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamaño de tipografía
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Elegir qué tamaño de letra usar en la interfaz
|
||||
|
||||
STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(detectar)
|
||||
@@ -1236,8 +1236,8 @@ STR_CONFIG_SETTING_CATCHMENT :Permitir cambia
|
||||
STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Las áreas de recolección se adecúan a diferentes tamaños, según los tipos de estaciones y aeropuertos
|
||||
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Las estaciones privadas pueden dar servicio a industrias con estaciones neutrales: {STRING}
|
||||
STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Al activarse, las industrias con estaciones integradas (ej. plataformas petrolíferas) podrán aceptar carga de estaciones aledañas. Al desactivarse, tales industrias solo recibirán carga en sus propias estaciones y no aceptarán de otras estaciones, ni la estación integrada brindará servicio a nada más que su industria
|
||||
STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir quitar mayor cantidad de carreteras, puentes y túneles de los pueblos: {STRING}
|
||||
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Hacer más fácil eliminar infraestructura y edificios que sean propiedad de los pueblos
|
||||
STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir mayor eliminación de carreteras, puentes y túneles: {STRING}
|
||||
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Hacer más fácil eliminar infraestructura y edificios que sean propiedad de las localidades
|
||||
STR_CONFIG_SETTING_TRAIN_LENGTH :Longitud máxima de trenes: {STRING}
|
||||
STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Longitud máxima permitida para los trenes
|
||||
STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} casilla{P 0 "" s}
|
||||
@@ -1271,8 +1271,8 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Como las demás
|
||||
STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Prospección
|
||||
STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Área plana alrededor de industrias: {STRING}
|
||||
STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Cantidad de espacio plano alrededor de las industrias. Esto asegura que haya espacio libre alrededor de las industrias para construir vías férreas, etc.
|
||||
STR_CONFIG_SETTING_MULTIPINDTOWN :Permitir múltiples industrias similares por pueblo: {STRING}
|
||||
STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Generalmente, no se permite más de una industria del mismo tipo por pueblo. Con esta opción se permiten múltiples industrias del mismo tipo en el mismo pueblo
|
||||
STR_CONFIG_SETTING_MULTIPINDTOWN :Permitir varias industrias similares por localidad: {STRING}
|
||||
STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :En general, una localidad admite un solo tipo de industria a la vez, pero con esta opción varias industrias del mismo tipo en una localidad son posibles
|
||||
STR_CONFIG_SETTING_SIGNALSIDE :Mostrar señales: {STRING}
|
||||
STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :De qué lado de las vías se instalarán las señales
|
||||
STR_CONFIG_SETTING_SIGNALSIDE_LEFT :A la izquierda
|
||||
@@ -1294,9 +1294,9 @@ STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Vista principal
|
||||
STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Vista principal
|
||||
STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todas las vistas
|
||||
STR_CONFIG_SETTING_BRIBE :Permitir sobornos al ayuntamiento: {STRING}
|
||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT :Las empresas pueden intentar sobornar a los ayuntamientos, pero si un inspector lo descubre la empresa no podrá realizar actividades en el pueblo seis meses
|
||||
STR_CONFIG_SETTING_BRIBE_HELPTEXT :Las empresas intentan sobornar a los ayuntamientos. Si un inspector lo descubre, la empresa no podrá operar en la localidad seis meses
|
||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permitir adquirir los derechos de transporte exclusivos: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Si una empresa adquiere los derechos de transporte exclusivos en un pueblo, las estaciones de la competencia, de pasajeros o carga, no recibirán nada todo un año
|
||||
STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Si una empresa compra los derechos de transporte exclusivos en una localidad, las estaciones de la competencia no recibirán carga nada todo un año
|
||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir la construcción de nuevos edificios: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Las empresas aportan dinero a los ayuntamientos para que construyan nuevas casas y edificios
|
||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir el pago de la reconstrucción de las carreteras locales: {STRING}
|
||||
@@ -1304,7 +1304,7 @@ STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Las empresas ap
|
||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permitir enviar dinero a otras empresas: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permitir la transferencia de dinero entre empresas en modo multijugador
|
||||
STR_CONFIG_SETTING_FREIGHT_TRAINS :Multiplicador de peso para simular trenes pesados: {STRING}
|
||||
STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Establece el impacto de llevar cargamento en los trenes. Un valor mayor exige mayor potencia a los trenes para llevar una carga, sobre todo al subir colinas
|
||||
STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Impacto de llevar carga en los trenes. Un valor mayor exige mayor potencia a los trenes para llevar carga, sobre todo al subir colinas
|
||||
STR_CONFIG_SETTING_PLANE_SPEED :Factor de velocidad de aeronaves: {STRING}
|
||||
STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Establece la velocidad relativa de las aeronaves comparada con la de otros vehículos para reducir las utilidades de transportación aérea
|
||||
STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1/{COMMA}
|
||||
@@ -1353,15 +1353,15 @@ STR_CONFIG_SETTING_HOVER_DELAY :Mostrar informa
|
||||
STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tiempo de retraso para mostrar información de ayuda al posar el ratón en un elemento de la interfaz. Si el valor es 0 los mensajes se muestran con el botón derecho del ratón.
|
||||
STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Posar el ratón {COMMA} milisegundo{P 0 "" s}
|
||||
STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Botón derecho
|
||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL :Mostrar población de pueblos: {STRING}
|
||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Mostrar en el mapa la población de los pueblos junto a sus nombres
|
||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL :Mostrar población de localidades: {STRING}
|
||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Mostrar en el mapa la población de las localidades junto a sus nombres
|
||||
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grosor de las líneas en las gráficas: {STRING}
|
||||
STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Grosor de las líneas en las gráficas. Una línea fina es más precisa, una línea más gruesa es más fácil de distinguir
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Mostrar el nombre del GRF en la ventana de construcción de vehículo: {STRING}
|
||||
STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Indicar por medio de una línea adicional en la ventana de construcción de vehículo su NewGRF.
|
||||
|
||||
STR_CONFIG_SETTING_LANDSCAPE :Terreno: {STRING}
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Los terrenos definen mapas con diferentes tipos de carga y requisitos de crecimiento para los pueblos. Es posible modificarlos empleando NewGRF y scripts de juego
|
||||
STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Los terrenos definen mapas con diferentes tipos de carga y requisitos de crecimiento de las localidades, los cuales pueden cambiarse con NewGRF y scripts de juego
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR :Generador de terreno: {STRING}
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :El generador 'Original' depende de los gráficos base y crea formas de terreno fijas. 'TerraGenesis' es un generador basado en Ruido Perlin que permite un mayor control de configuración
|
||||
STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original
|
||||
@@ -1375,7 +1375,7 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Distancia lími
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Nivel de inicio de nieve: {STRING}
|
||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controlar la altura donde la nieve empieza en mapas de clima Subártico, lo cual afectará la generación de industrias y los requisitos de crecimiento de pueblos. Este valor se puede cambiar en el Editor de mapas o se calculará según la "Extensión de nieve"
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE :Extensión de nieve: {STRING}
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controlar la cantidad aproximada de nieve al generar un mapa de clima Subártico, lo cual afectará la generación de industrias y los requisitos de crecimiento de pueblos. La superficie casi al ras del nivel del mar nunca tiene nieve.
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Controlar la cantidad aproximada de nieve al generar un mapa de geografía de Subártico, la cual afectará la generación de industrias y los requisitos de crecimiento de las localidades. La superficie casi al ras del nivel del mar nunca tiene nieve
|
||||
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE :Extensión de desierto: {STRING}
|
||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Controlar la cantidad aproximada de desierto al generar un mapa de clima tropical, lo cual afectará la generación de industrias también.
|
||||
@@ -1515,7 +1515,7 @@ STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Reproducir efec
|
||||
STR_CONFIG_SETTING_SOUND_VEHICLE :Vehículos: {STRING}
|
||||
STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Reproducir efectos de sonido de vehículos
|
||||
STR_CONFIG_SETTING_SOUND_AMBIENT :Ambiente: {STRING}
|
||||
STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Reproducir sonidos ambientales de terreno, industrias y pueblos
|
||||
STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Reproducir sonidos ambientales de terreno, industrias y localidades
|
||||
|
||||
STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Deshabilitar construcción de infraestructura cuando no haya vehículos apropiados disponibles: {STRING}
|
||||
STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Al activarse, hay infraestructura disponible solo si hay vehículos adecuados, evitando gastos de tiempo y dinero en infraestructura inservible
|
||||
@@ -1531,7 +1531,7 @@ STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Número máximo
|
||||
STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Desactivar trenes para la computadora: {STRING}
|
||||
STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Activar esta opción para deshabilitar la construcción de trenes por jugadores no humanos
|
||||
STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Desactivar vehículos de carretera para la computadora: {STRING}
|
||||
STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Activar esta opción para deshabilitar la construcción de vehículos de carretera por jugadores no humanos
|
||||
STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Activar esta opción deshabilita la construcción de vehículos de carretera por jugadores no humanos
|
||||
STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Desactivar aeroplanos para la computadora: {STRING}
|
||||
STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Activar esta opción deshabilita la construcción de aeronaves por jugadores no humanos
|
||||
STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactivar barcos para la computadora: {STRING}
|
||||
@@ -1594,8 +1594,8 @@ STR_CONFIG_SETTING_NEWS_ADVICE :Sugerencias e i
|
||||
STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Mostrar mensajes sobre vehículos que requieran atención
|
||||
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nuevos vehículos: {STRING}
|
||||
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Mostrar noticias sobre nuevos tipos de vehículos disponibles
|
||||
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Cambios en la recepción de cargamento: {STRING}
|
||||
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Mostrar mensajes sobre cambios a la recepción de cargamento en estaciones
|
||||
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Cambios en la aceptación de carga: {STRING}
|
||||
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Mostrar mensajes de cambios a la aceptación de carga en estaciones
|
||||
STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsidios: {STRING}
|
||||
STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Mostrar noticias sobre eventos relacionados con subsidios
|
||||
STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Información general: {STRING}
|
||||
@@ -1624,10 +1624,10 @@ STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Estabelcer la e
|
||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaje de la utilidad total a pagar por transferencias de carga: {STRING}
|
||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaje de utilidad cedida a los transportes intermedios en sistemas de transferencia de carga, dando un mayor control sobre la utilidad de cada vehículo
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Al arrastrar, colocar señales cada: {STRING}
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Distancia de separación entre señales hasta topar con algún obstáculo (otra señal, un desvío, etc.) al instalarlas mediante arrastre con el ratón
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Distancia de separación entre señales hasta topar con algún obstáculo (otra señal, un desvío, etc.) al colocarlas con arrastre
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} casilla{P 0 "" s}
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Al arrastrar, mantener distancia fija entre señales: {STRING}
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Forma en que se instalan señales con Ctrl+Arrastrar. Al desactivarse, se colocan señales cerca de túneles y puentes para evitar tramos largos de vías sin señales. Al activarse, se colocan señales cada tanto de casillas, con lo que alinear señales en vías paralelas es más fácil
|
||||
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Forma en que se colocan las señales con Ctrl+Arrastrar. Al desactivarse, se colocan señales cerca de túneles y puentes para evitar tramos largos sin señales. Al activarse, se colocan señales cada tanto de casillas, con lo que alinear señales en vías paralelas es más fácil
|
||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Señales mecánicas por defecto antes de: {STRING}
|
||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Año a partir del cual se usarán señales eléctricas. Antes de ese año se usarán señales mecánicas, las cuales funcionan igual pero tienen distinto aspecto
|
||||
STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activar interfaz de señales: {STRING}
|
||||
@@ -1650,19 +1650,19 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Mejorado
|
||||
STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :Rejilla de 2×2
|
||||
STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :Rejilla de 3×3
|
||||
STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatorio
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Permitir que los pueblos construyan carreteras: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Los pueblos podrán construir carreteras para expandirse. Al desactivarse, los ayuntamientos no podrán construir carreteras
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Permitir a los pueblos construir pasos a nivel: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Los pueblos podrán construir pasos a nivel
|
||||
STR_CONFIG_SETTING_NOISE_LEVEL :Permitir a los pueblos controlar el nivel de ruido de los aeropuertos: {STRING}
|
||||
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Al desactivarse, puede haber solo dos aeropuertos por pueblo. Al activarse, el número de aeropuertos por pueblo depende de su nivel de ruido permitido, que a su vez depende de la población, el tamaño de los aeropuertos y la distancia
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Permitir a las localidades construir carreteras: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Los ayuntamientos construyen carreteras para que las localidades se expandan. Desactivar para impedirlo
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Permitir a las localidades construir pasos a nivel: {STRING}
|
||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Activar esta opción permite a las localidades construir pasos a nivel
|
||||
STR_CONFIG_SETTING_NOISE_LEVEL :Permitir el ruido de aeropuertos controlado por localidades: {STRING}
|
||||
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Al desactivarse, puede haber hasta dos aeropuertos por localidad. Al activarse, el número de aeropuertos por localidad depende de su nivel de ruido permitido, el cual depende de la población, el tamaño de cada aeropuerto y la distancia
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar pueblos: {STRING}
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Los jugadores podrán crear nuevos pueblos durante la partida
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Prohibido
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido
|
||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, diseño urbano personalizado
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generación de cargamento en pueblios: {STRING}
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cantidad de cargamento producido por las casas con relación a la población.{}Crecimiento cuadrado: un pueblo de doble tamaño genera el cuádruple de pasajeros.{}Crecimiento lineal: un pueblo de doble tamaño genera el doble de pasajeros.
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generación de carga en pueblos: {STRING}
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cantidad de carga producida por las casas con relación a la población.{}Crecimiento cuadrado: un pueblo de doble tamaño genera el cuádruple de pasajeros.{}Crecimiento lineal: un pueblo de doble tamaño genera el doble de pasajeros.
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Cuadrado
|
||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal
|
||||
|
||||
@@ -1707,12 +1707,12 @@ STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Lenta
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normal
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Rápida
|
||||
STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Muy rápida
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS :Proporción de pueblos que se convertirán en ciudades: {STRING}
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Número de pueblos que se convertirán en ciudades. Las ciudades comienzan siendo más grandes y crecen más rápido
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS :Proporción de localidades que se convertirán en ciudades: {STRING}
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Número de localidades que se convertirán en ciudades, las cuales comienzan siendo más grandes y crecen más rápido
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 de cada {COMMA}
|
||||
STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ninguno
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial de tamaño de ciudad: {STRING}
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamaño medio de las ciudades en relación a los pueblos al comienzo de la partida
|
||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamaño medio de las ciudades relativo a las localidades al inicio del juego
|
||||
|
||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Actualizar la gráfica de distribución cada {STRING}{NBSP}día{P 0:2 "" s}
|
||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Periodo de tiempo entre cálculos consecutivos de la gráfica de distribución. Esta opción se refiere a los cálculos para cada uno de los componentes de la gráfica, por lo cual establecer un valor no quiere decir que la gráfica completa se actualizará tras ese número de días, solo algún componente lo hará. Cuanto menor sea, mayor tiempo de CPU será necesario para calcular la gráfica distribución. Cuanto mayor sea, más tardará la gráfica en adaptarse a nuevas rutas
|
||||
@@ -1722,21 +1722,21 @@ STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Manual
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Asimétrica
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :Simétrica
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribución para pasajeros: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :En una distribución 'Simétrica', se envía la misma cantidad de pasajeros entre dos estaciones. En una distribución 'Asimétrica', se pueden enviar cantidades arbitrarias de pasajeros en ambas direcciones. 'Manual' significa que no hay distribución automática para los pasajeros
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :En una distribución "Simétrica" se envía la misma cantidad de pasajeros entre dos estaciones. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de pasajeros en ambas direcciones. "Manual" significa que no hay distribución automática para los pasajeros.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Modo de distribución para el correo: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :En una distribución 'Simétrica', se envía la misma cantidad de correo entre dos estaciones. En una distribución 'Asimétrica', se pueden enviar cantidades arbitrarias de correo en ambas direcciones. 'Manual' significa que no hay distribución automática para el correo
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :En una distribución "Simétrica" se envía la misma cantidad de correo entre dos estaciones. En una distribución "Asimétrica" se pueden enviar cantidades arbitrarias de correo en ambas direcciones. "Manual" significa que no hay distribución automática para el correo
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modo de distribución para cargamento de valores: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :El cargamento de valores contiene objetos de valor en el clima Templado, diamantes en el clima Subtropical y oro en el clima Subártico (hay NewGRF para modificar esto). En una distribución 'Simétrica', se envía la misma cantidad de cargamento entre dos estaciones. En una distribución 'Asimétrica', se pueden enviar cantidades arbitrarias de cargamento en ambas direcciones. 'Manual' significa que no hay distribución automática para este cargamento. Se recomienda establecer la distribución en 'Asimétrica' o en 'Manual' al jugar en clima Subártico, pues los bancos no regresarán el oro a sus minas de procedencia. En los climas Templado y Subtropical se puede escoger 'Simétrica', ya que los bancos pueden regresar los objetos de valor a su banco origen.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribución para otro cargamento: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :'Asimétrica' significa que se pueden mover cantidades arbitrarias de cargamento en ambas direcciones. 'Manual' significa que no habrá distribución automática para esta clase de cargamento.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :El cargamento de valores contiene objetos de valor en el clima Templado, diamantes en el Subtropical y oro en el Subártico. Algún NewGRF puede modificar esto. En una distribución "Simétrica", se envía la misma cantidad de carga entre dos estaciones. En una distribución "Asimétrica", se envían cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no hay distribución automática para esta carga. Se recomienda la distribución "Asimétrica" o "Manual" al jugar en clima Subártico, ya que los bancos no regresan oro a las minas. En los climas Templado y Subtropical se puede escoger "Simétrica", ya que los bancos pueden regresar algunos objetos de valor a su banco de origen.
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribución para otra carga: {STRING}
|
||||
STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimétrica" significa que se pueden enviar cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no habrá distribución automática para esta clase de carga.
|
||||
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisión de la distribución: {STRING}
|
||||
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Si el valor es alto, se requerirá mayor tiempo para calcular la gráfica de distribución (si se lleva demasiado tiempo, se notará desfase en el juego). Si es muy bajo, la distribución será imprecisa, pudiendo hacer que el cargamento no vaya al lugar indicado
|
||||
STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Si el valor es alto, se requerirá mayor tiempo para calcular la gráfica de distribución (si se lleva demasiado tiempo, se notará desfase en el juego). Si es muy bajo, la distribución será imprecisa, pudiendo hacer que la carga no vaya al lugar indicado
|
||||
STR_CONFIG_SETTING_DEMAND_DISTANCE :Efecto de la distancia en la demanda: {STRING}
|
||||
STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Con un valor diferente a 0, la distancia entre la estación de origen de cierta carga y una posible estación de destino afectará la cantidad de cargamento que se envíe entre ambas. Cuanto más lejos estén entre sí, menos cargamento se enviará. Cuanto mayor sea el valor de esta opción, menos cargamento se enviará a estaciones distantes en favor de estaciones cercanas
|
||||
STR_CONFIG_SETTING_DEMAND_SIZE :Cantidad de cargamento a devolver en modo simétrico: {STRING}
|
||||
STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Establecer un valor menor de 100% hará que la distribución simétrica de cargamento sea más asimétrica. Se enviará menos cargamento de regreso forzosamente si una cantidad determinada es enviada a una estación. Si se fija a 0%, la distribución simétrica será como una distribución asimétrica
|
||||
STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Con un valor mayor de 0, la distancia entre una estación de origen A y una estación de destino B afectará la cantidad de carga que se envíe desde A a B, enviando menos carga cuanto más lejos est. Cuanto mayor sea el valor de esta opción, menos carga se enviará a estaciones distantes en favor de estaciones cercanas.
|
||||
STR_CONFIG_SETTING_DEMAND_SIZE :Cantidad de carga en retorno en modo simétrico: {STRING}
|
||||
STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Con un valor menor de 100% la distribución simétrica de carga será más asimétrica, lo cual obligará a enviar menos carga en retorno en función de la enviada a una estación. Si es 0%, la distribución simétrica igual que la asimétrica.
|
||||
STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Nivel de saturación de rutas cortas antes de cambiar a rutas de mayor capacidad: {STRING}
|
||||
STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Entre dos estaciones usualmente hay más de una ruta posible. Se intentarán saturar las rutas más cortas primero, luego las que les siguen, y así sucesivamente. La saturación está determinada por una estimación de capacidad y uso planificado. Una vez que se hayan saturado todas las rutas, si todavía hay demanda se sobrecargarán los caminos empezando por aquellos de mayor capacidad. El algoritmo no siempre estimará la capacidad de forma precisa. Esta opción permite especificar el porcentaje de saturación que debe tener una ruta en el primer análisis antes de pasar a la siguiente ruta. Ponerlo a menos de 100% permite evitar estaciones sobrecargadas en el caso de que se sobreestimen las capacidades
|
||||
STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Entre dos estaciones a veces hay varias rutas. Se intentará saturar la ruta más corta primero, luego la que le sigue, y así sucesivamente. La saturación está determinada por una estimación de capacidad y uso planeado. Al saturarse todas las rutas, si aún hay demanda se sobrecargarán todas, empezando por las de mayor capacidad. El algoritmo no siempre estimará la capacidad de forma precisa. Esta opción permite especificar el porcentaje de saturación que debe tener una ruta más corta en la primera vuelta antes de pasar a la siguiente. Menos de 100% evita estaciones abarrotadas si las capacidades se sobreestiman.
|
||||
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidad: {STRING}
|
||||
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Cada vez que se muestre una velocidad en la interfaz de usuario, se emplearán las unidades elegidas
|
||||
@@ -1793,7 +1793,7 @@ STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Desastr
|
||||
STR_CONFIG_SETTING_GENWORLD :{ORANGE}Generación de mapa
|
||||
STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Ambiente
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Autoridades
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Pueblos
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Localidades
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industrias
|
||||
STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribución de carga
|
||||
STR_CONFIG_SETTING_AI :{ORANGE}Competidores
|
||||
@@ -2160,6 +2160,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nueva empresa)
|
||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Crear nueva empresa y unirse a ella
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Este eres tú
|
||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Este es el host del juego
|
||||
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s}/{NUM} empresa{P "" s}
|
||||
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar
|
||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Bloquear acceso
|
||||
@@ -2379,7 +2380,7 @@ STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Transpar
|
||||
STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Ocultar objetos totalmente
|
||||
|
||||
# Linkgraph legend window
|
||||
STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Leyenda de flujo de cargamento
|
||||
STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Leyenda de flujo de carga
|
||||
STR_LINKGRAPH_LEGEND_ALL :{BLACK}Todas
|
||||
STR_LINKGRAPH_LEGEND_NONE :{BLACK}Ninguna
|
||||
STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Elegir las empresas a mostrar
|
||||
@@ -2674,18 +2675,18 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}¿Segur
|
||||
|
||||
# Industry cargoes window
|
||||
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadena industrial para la industria de {STRING}
|
||||
STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadena industrial para el cargamento de {STRING}
|
||||
STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadena industrial para carga de {STRING}
|
||||
STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Industrias proveedoras
|
||||
STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Industrias receptoras
|
||||
STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Casas
|
||||
STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Clic en la industria para ver sus industrias proveedoras y receptoras
|
||||
STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Clic en el cargamento para ver sus industrias proveedoras y receptoras
|
||||
STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Mostrar cadena
|
||||
STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostrar las industrias que proveen y aceptan el cargamento
|
||||
STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Clic en la carga para ver sus proveedores y clientes
|
||||
STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Mostrar cadena industrial
|
||||
STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostrar las industrias que proveen y aceptan la carga
|
||||
STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Ver en minimapa
|
||||
STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Elegir y ver en el minimapa las industrias mostradas en el mapa principal
|
||||
STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Elegir cargamento
|
||||
STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Elegir el tipo de cargamento a mostrar
|
||||
STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Elegir carga
|
||||
STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Elegir el tipo de carga
|
||||
STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Elegir industria
|
||||
STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Elegir la industria a mostrar
|
||||
|
||||
@@ -2710,7 +2711,7 @@ STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Tipo de
|
||||
STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Nombre del aeropuerto: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nombre de casilla del aeropuerto: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Cargamento aceptado: {LTBLUE}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceptada: {LTBLUE}
|
||||
STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING})
|
||||
STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de vía: {LTBLUE}{STRING}
|
||||
STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipo de carretera: {LTBLUE}{STRING}
|
||||
@@ -2842,7 +2843,7 @@ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COM
|
||||
STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMERATE_GAMELOOP :{BLACK}Bucles de juego totales:
|
||||
STR_FRAMERATE_GL_ECONOMY :{BLACK} Manejo de cargamento:
|
||||
STR_FRAMERATE_GL_ECONOMY :{BLACK} Manejo de carga:
|
||||
STR_FRAMERATE_GL_TRAINS :{BLACK} Ticks de trenes:
|
||||
STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ticks de vehículos de carretera:
|
||||
STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks de barcos:
|
||||
@@ -2859,7 +2860,7 @@ STR_FRAMERATE_AI :{BLACK} IA {NUM
|
||||
############ End of leave-in-this-order
|
||||
############ Leave those lines in this order!!
|
||||
STR_FRAMETIME_CAPTION_GAMELOOP :Bucle de juego
|
||||
STR_FRAMETIME_CAPTION_GL_ECONOMY :Manejo de cargamento
|
||||
STR_FRAMETIME_CAPTION_GL_ECONOMY :Manejo de carga
|
||||
STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks de trenes
|
||||
STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ticks de vehículos de carretera
|
||||
STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks de barcos
|
||||
@@ -3147,15 +3148,15 @@ STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Cambió
|
||||
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Tren {VEHICLE} de {COMPANY} tiene una longitud no válida. Quizá es por problemas de los NewGRF, y puede provocar que el juego falle
|
||||
|
||||
STR_NEWGRF_BUGGY :{WHITE}El NewGRF '{0:STRING}' da información incorrecta
|
||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}La información de cargamento o reequipamiento para '{1:ENGINE}' difiere de la lista de compra después de la construcción. Esto puede causar que la renovación y el reemplazo automático no haga el reequipamiento correcta
|
||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}La información de carga o reequipamiento para '{1:ENGINE}' difiere de la lista de compra después de la construcción. Esto puede causar que la renovación y el reemplazo automático no haga el reequipamiento correcto
|
||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' ha causado un bucle sin fin en la llamada de producción
|
||||
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}La llamada {1:HEX} devolvió un resultado desconocido o no válido {2:HEX}
|
||||
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' retornó un tipo inválido de cargamento en la llamada de producción en {2:HEX}
|
||||
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' retornó un tipo inválido de carga en la callback de producción en {2:HEX}
|
||||
|
||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
||||
STR_NEWGRF_INVALID_CARGO :<cargamento no válido>
|
||||
STR_NEWGRF_INVALID_CARGO :<carga no válida>
|
||||
STR_NEWGRF_INVALID_CARGO_ABBREV :??
|
||||
STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} de <cargamento no válido>
|
||||
STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} de <carga no válida>
|
||||
STR_NEWGRF_INVALID_ENGINE :<modelo de vehículo no válido>
|
||||
STR_NEWGRF_INVALID_INDUSTRYTYPE :<industria no válida>
|
||||
|
||||
@@ -3194,7 +3195,7 @@ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN}
|
||||
STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (ciudad)
|
||||
STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Habitantes: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA}
|
||||
STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} último mes: {ORANGE}{COMMA}{BLACK} máx.: {ORANGE}{COMMA}
|
||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Cargamento necesario para crecimiento:
|
||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Carga necesaria para crecimiento:
|
||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} requeridos
|
||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} requerido en invierno
|
||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} entregado
|
||||
@@ -3316,8 +3317,8 @@ STR_STATION_LIST_STATION :{YELLOW}{STATIO
|
||||
STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT}
|
||||
STR_STATION_LIST_NONE :{YELLOW}- Ninguna -
|
||||
STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Elegir todos los tipos de estación
|
||||
STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Elegir todos los tipos de cargamento (incluidos los que no estén en espera)
|
||||
STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}Ningún tipo de cargamento está esperando
|
||||
STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Elegir todos los tipos de carga (también los que no están en espera)
|
||||
STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}No hay ninguna carga esperando
|
||||
|
||||
# Station view window
|
||||
STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES}
|
||||
@@ -3326,7 +3327,7 @@ STR_STATION_VIEW_EN_ROUTE_FROM :{YELLOW}({CARGO
|
||||
STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} reservado para cargar)
|
||||
|
||||
STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Acepta
|
||||
STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Lista de cargamento aceptado
|
||||
STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Lista de carga aceptada
|
||||
STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Acepta: {WHITE}{CARGO_LIST}
|
||||
|
||||
STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Esta estación tiene los derechos exclusivos de transporte en este pueblo.
|
||||
@@ -3499,7 +3500,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST
|
||||
STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING}
|
||||
STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} y {NUM} más...
|
||||
STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nombres de industrias. Clic para centrar la vista en la industria. Ctrl+Clic abre una vista aparte
|
||||
STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Cargamento aceptado: {SILVER}{STRING}
|
||||
STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Carga aceptada: {SILVER}{STRING}
|
||||
STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Cargemento producido: {SILVER}{STRING}
|
||||
STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Todos los tipos
|
||||
STR_INDUSTRY_DIRECTORY_FILTER_NONE :Ninguno
|
||||
@@ -3852,10 +3853,10 @@ STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Esto com
|
||||
|
||||
STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forzar al tren a proceder sin esperar a que la señal le ceda vía libre
|
||||
|
||||
STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Reformar tren para transportar otro tipo de cargamento
|
||||
STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reformar vehículo de carretera para transportar otro tipo de cargamento
|
||||
STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Reformar barco para que transporte otro tipo de cargamento
|
||||
STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reformar aeronave para llevar otro tipo de cargamento
|
||||
STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Reformar tren para llevar otro tipo de carga
|
||||
STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reformar vehículo de carretera para llevar otro tipo de carga
|
||||
STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Reformar barco para llevar otro tipo de carga
|
||||
STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reformar aeronave para llevar otro tipo de carga
|
||||
|
||||
STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Cambiar dirección del tren
|
||||
STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Forzar al vehículo a girar en sentido opuesto
|
||||
@@ -3958,40 +3959,40 @@ STR_VEHICLE_DETAILS_CARGO_EMPTY :{LTBLUE}Vacío
|
||||
STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_LONG} desde {STATION}
|
||||
STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_LONG} desde {STATION} (×{NUM})
|
||||
|
||||
STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}Cargamento
|
||||
STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}Carga
|
||||
STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Mostrar detalles de mercancía transportada
|
||||
STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Información
|
||||
STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Mostrar detalles de los vehículos
|
||||
STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Capacidades
|
||||
STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Mostrar capacidades de cada vehículo del tren
|
||||
STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Cargamento total
|
||||
STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Mostrar capacidad total del tren dividida por tipo de cargamento
|
||||
STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Carga total
|
||||
STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Mostrar capacidad total del tren dividida por carga
|
||||
|
||||
STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Capacidad: {LTBLUE}
|
||||
|
||||
# Vehicle refit
|
||||
STR_REFIT_CAPTION :{WHITE}{VEHICLE} (reformar)
|
||||
STR_REFIT_TITLE :{GOLD}Elegir el nuevo tipo de cargamento:
|
||||
STR_REFIT_TITLE :{GOLD}Elegir el nuevo tipo de carga:
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}{}{BLACK}Costo por reformar: {RED}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}{}{BLACK}Ingreso al reformar: {GREEN}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Costo por reformar: {RED}{CURRENCY_LONG}
|
||||
STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nueva capacidad: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Ingreso al reformar: {GREEN}{CURRENCY_LONG}
|
||||
STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Elegir los vehículos de ferrocarril a reformar. Arrastrar con el ratón para elegir más de un vehículo. Clic en un espacio vacío para elegir el tren completo. Ctrl+Clic para elegir una unidad del tren y los vagones subsecuentes
|
||||
|
||||
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Elegir el tipo de cargamento para el tren
|
||||
STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Elegir el tipo de cargamento para el vehículo de carretera
|
||||
STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Elegir el tipo de cargamento para el barco
|
||||
STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Elegir el tipo de cargamento para la aeronave
|
||||
STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Elegir el tipo de carga para el tren
|
||||
STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Elegir el tipo de carga para el vehículo de carretera
|
||||
STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Elegir el tipo de carga para el barco
|
||||
STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Elegir el tipo de carga para la aeronave
|
||||
|
||||
STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Reformar tren
|
||||
STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Reformar vehículo de carretera
|
||||
STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Reformar barco
|
||||
STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Reformar aeronave
|
||||
|
||||
STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Reformar el tren para transportar el cargamento elegido
|
||||
STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reformar el vehículo de carretera para transportar el cargamento elegido
|
||||
STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Reformar el barco para transportar el cargamento elegido
|
||||
STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reformar la aeronave para transportar el cargamento elegido
|
||||
STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Reformar el tren para transportar la carga elegida
|
||||
STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reformar el vehículo de carretera para transportar la carga elegida
|
||||
STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Reformar el barco para transportar la carga elegida
|
||||
STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Reformar la aeronave para transportar la carga elegida
|
||||
|
||||
# Order view
|
||||
STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Órdenes)
|
||||
@@ -4028,11 +4029,11 @@ STR_ORDER_DROP_NO_UNLOADING :No descargar
|
||||
STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Cambiar la forma de descarga en la orden resaltada
|
||||
|
||||
STR_ORDER_REFIT :{BLACK}Reformar
|
||||
STR_ORDER_REFIT_TOOLTIP :{BLACK}Elegir el tipo de cargamento a reformar en esta orden. Ctrl+Clic para eliminar la orden
|
||||
STR_ORDER_REFIT_TOOLTIP :{BLACK}Elegir el tipo de carga a reformar en esta orden. Ctrl+Clic para eliminar la orden
|
||||
STR_ORDER_REFIT_AUTO :{BLACK}Reformar en estación
|
||||
STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Elegir el tipo de cargamento a reformar en esta orden. Ctrl+Clic para eliminar la orden. Reformar solo es posible si el vehículo lo permite
|
||||
STR_ORDER_DROP_REFIT_AUTO :Cargamento fijo
|
||||
STR_ORDER_DROP_REFIT_AUTO_ANY :Cargamento disponible
|
||||
STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Elegir la carga para reequipar en esta orden. Ctrl+Clic para eliminar la orden. Reequipar solo es posible si el vehículo lo permite
|
||||
STR_ORDER_DROP_REFIT_AUTO :Carga fija
|
||||
STR_ORDER_DROP_REFIT_AUTO_ANY :Carga disponible
|
||||
|
||||
STR_ORDER_SERVICE :{BLACK}Mantenimiento
|
||||
STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ir siempre
|
||||
@@ -4136,7 +4137,7 @@ STR_ORDER_NO_UNLOAD_REFIT :(No descargar y
|
||||
STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(No descargar y llenar todo con reforma a {STRING})
|
||||
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(No descargar y llenar cualquiera con reforma a {STRING})
|
||||
|
||||
STR_ORDER_AUTO_REFIT_ANY :cargamento disponible
|
||||
STR_ORDER_AUTO_REFIT_ANY :carga disponible
|
||||
|
||||
STR_ORDER_STOP_LOCATION_NEAR_END :[principio]
|
||||
STR_ORDER_STOP_LOCATION_MIDDLE :[centro]
|
||||
|
@@ -153,8 +153,7 @@ void LinkGraphOverlay::RebuildCache(bool incremental)
|
||||
|
||||
auto AddLinks = [&](const Station *from, const Station *to, Point from_pt, Point to_pt, btree::btree_map<std::pair<StationID, StationID>, LinkCacheItem>::iterator insert_iter) {
|
||||
LinkCacheItem *item = nullptr;
|
||||
CargoID c;
|
||||
FOR_EACH_SET_CARGO_ID(c, this->cargo_mask) {
|
||||
for (CargoID c : SetCargoBitIterator(this->cargo_mask)) {
|
||||
if (!CargoSpec::Get(c)->IsValid()) continue;
|
||||
const GoodsEntry &ge = from->goods[c];
|
||||
if (!LinkGraph::IsValidID(ge.link_graph) ||
|
||||
@@ -188,8 +187,7 @@ void LinkGraphOverlay::RebuildCache(bool incremental)
|
||||
StationID from = sta->index;
|
||||
|
||||
uint supply = 0;
|
||||
CargoID c;
|
||||
FOR_EACH_SET_CARGO_ID(c, this->cargo_mask) {
|
||||
for (CargoID c : SetCargoBitIterator(this->cargo_mask)) {
|
||||
if (!CargoSpec::Get(c)->IsValid()) continue;
|
||||
if (!LinkGraph::IsValidID(sta->goods[c].link_graph)) continue;
|
||||
const LinkGraph &lg = *LinkGraph::Get(sta->goods[c].link_graph);
|
||||
|
@@ -967,8 +967,7 @@ static bool ReadSpriteLayout(ByteReader *buf, uint num_building_sprites, bool us
|
||||
static CargoTypes TranslateRefitMask(uint32 refit_mask)
|
||||
{
|
||||
CargoTypes result = 0;
|
||||
uint8 bit;
|
||||
FOR_EACH_SET_BIT(bit, refit_mask) {
|
||||
for (uint8 bit : SetBitIterator(refit_mask)) {
|
||||
CargoID cargo = GetCargoTranslation(bit, _cur.grffile, true);
|
||||
if (cargo != CT_INVALID) SetBit(result, cargo);
|
||||
}
|
||||
@@ -9679,8 +9678,7 @@ static void CalculateRefitMasks()
|
||||
if (cargo_map_for_first_refittable != nullptr) {
|
||||
/* Use first refittable cargo from cargo translation table */
|
||||
byte best_local_slot = 0xFF;
|
||||
CargoID cargo_type;
|
||||
FOR_EACH_SET_CARGO_ID(cargo_type, ei->refit_mask) {
|
||||
for (CargoID cargo_type : SetCargoBitIterator(ei->refit_mask)) {
|
||||
byte local_slot = cargo_map_for_first_refittable[cargo_type];
|
||||
if (local_slot < best_local_slot) {
|
||||
best_local_slot = local_slot;
|
||||
|
@@ -814,8 +814,7 @@ bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID
|
||||
/* Sprite layout which needs preprocessing */
|
||||
bool separate_ground = HasBit(statspec->flags, SSF_SEPARATE_GROUND);
|
||||
uint32 var10_values = layout->PrepareLayout(total_offset, rti->fallback_railtype, 0, 0, separate_ground);
|
||||
uint8 var10;
|
||||
FOR_EACH_SET_BIT(var10, var10_values) {
|
||||
for (uint8 var10 : SetBitIterator(var10_values)) {
|
||||
uint32 var10_relocation = GetCustomStationRelocation(statspec, nullptr, INVALID_TILE, railtype, var10);
|
||||
layout->ProcessRegisters(var10, var10_relocation, separate_ground);
|
||||
}
|
||||
|
@@ -316,9 +316,8 @@ public:
|
||||
template <typename F> CargoTypes FilterLoadUnloadTypeCargoMask(F filter_func, CargoTypes cargo_mask = ALL_CARGOTYPES)
|
||||
{
|
||||
if ((this->GetLoadType() == OLFB_CARGO_TYPE_LOAD) || (this->GetUnloadType() == OUFB_CARGO_TYPE_UNLOAD)) {
|
||||
CargoID cargo;
|
||||
CargoTypes output_mask = cargo_mask;
|
||||
FOR_EACH_SET_BIT(cargo, cargo_mask) {
|
||||
for (CargoID cargo : SetCargoBitIterator(cargo_mask)) {
|
||||
if (!filter_func(this, cargo)) ClrBit(output_mask, cargo);
|
||||
}
|
||||
return output_mask;
|
||||
@@ -569,9 +568,8 @@ public:
|
||||
|
||||
template <typename F> CargoTypes FilterCargoMask(F filter_func, CargoTypes cargo_mask = ALL_CARGOTYPES)
|
||||
{
|
||||
CargoID cargo;
|
||||
CargoTypes output_mask = cargo_mask;
|
||||
FOR_EACH_SET_BIT(cargo, cargo_mask) {
|
||||
for (CargoID cargo : SetCargoBitIterator(cargo_mask)) {
|
||||
if (!filter_func(cargo)) ClrBit(output_mask, cargo);
|
||||
}
|
||||
return output_mask;
|
||||
@@ -583,8 +581,7 @@ template <typename T, typename F> T CargoMaskValueFilter(CargoTypes &cargo_mask,
|
||||
T value = filter_func(first_cargo_id);
|
||||
CargoTypes other_cargo_mask = cargo_mask;
|
||||
ClrBit(other_cargo_mask, first_cargo_id);
|
||||
CargoID cargo;
|
||||
FOR_EACH_SET_BIT(cargo, other_cargo_mask) {
|
||||
for (CargoID cargo : SetCargoBitIterator(other_cargo_mask)) {
|
||||
if (value != filter_func(cargo)) ClrBit(cargo_mask, cargo);
|
||||
}
|
||||
return value;
|
||||
|
@@ -102,7 +102,7 @@ private:
|
||||
void InitMaxWidgetWidth()
|
||||
{
|
||||
this->max_cargo_name_width = 0;
|
||||
for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) {
|
||||
for (int i = 0; i < (int)_sorted_standard_cargo_specs.size(); i++) {
|
||||
SetDParam(0, _sorted_cargo_specs[i]->name);
|
||||
this->max_cargo_name_width = std::max(this->max_cargo_name_width, GetStringBoundingBox(STR_JUST_STRING).width);
|
||||
}
|
||||
@@ -118,7 +118,7 @@ private:
|
||||
{
|
||||
StringID tooltip = STR_CARGO_TYPE_LOAD_ORDERS_DROP_TOOLTIP + this->variant;
|
||||
const Order *order = this->vehicle->GetOrder(this->order_id);
|
||||
for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) {
|
||||
for (int i = 0; i < (int)_sorted_standard_cargo_specs.size(); i++) {
|
||||
const CargoSpec *cs = _sorted_cargo_specs[i];
|
||||
const CargoID cargo_id = cs->Index();
|
||||
uint8 order_type = (this->variant == CTOWV_LOAD) ? (uint8) order->GetCargoLoadTypeRaw(cargo_id) : (uint8) order->GetCargoUnloadTypeRaw(cargo_id);
|
||||
@@ -170,7 +170,7 @@ public:
|
||||
this->CreateNestedTree(desc);
|
||||
this->GetWidget<NWidgetCore>(WID_CTO_CAPTION)->SetDataTip(STR_CARGO_TYPE_ORDERS_LOAD_CAPTION + this->variant, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS);
|
||||
this->GetWidget<NWidgetCore>(WID_CTO_HEADER)->SetDataTip(STR_CARGO_TYPE_ORDERS_LOAD_TITLE + this->variant, STR_NULL);
|
||||
this->GetWidget<NWidgetStacked>(WID_CTO_SELECT)->SetDisplayedPlane((_sorted_standard_cargo_specs_size >= 32) ? 0 : SZSP_NONE);
|
||||
this->GetWidget<NWidgetStacked>(WID_CTO_SELECT)->SetDisplayedPlane((_sorted_standard_cargo_specs.size() >= 32) ? 0 : SZSP_NONE);
|
||||
this->InitDropdownSelectedTypes();
|
||||
this->FinishInitNested(v->index);
|
||||
|
||||
@@ -262,7 +262,7 @@ public:
|
||||
} else if (widget == WID_CTO_SET_TO_ALL_DROPDOWN) {
|
||||
ModifyOrder(this->vehicle, this->order_id, mof | (action_type << 4) | (CT_INVALID << 20));
|
||||
|
||||
for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) {
|
||||
for (int i = 0; i < (int)_sorted_standard_cargo_specs.size(); i++) {
|
||||
const CargoSpec *cs = _sorted_cargo_specs[i];
|
||||
const CargoID cargo_id = cs->Index();
|
||||
if (action_type != this->GetOrderActionTypeForCargo(cargo_id)) {
|
||||
@@ -337,12 +337,12 @@ static NWidgetBase *MakeCargoTypeOrdersRows(int *biggest_index, bool right)
|
||||
|
||||
NWidgetVertical *ver = new NWidgetVertical;
|
||||
|
||||
const bool dual_column = (_sorted_standard_cargo_specs_size >= 32);
|
||||
const bool dual_column = (_sorted_standard_cargo_specs.size() >= 32);
|
||||
if (right && !dual_column) return ver;
|
||||
|
||||
const int increment = dual_column ? 2 : 1;
|
||||
|
||||
for (int i = (right ? 1 : 0); i < _sorted_standard_cargo_specs_size; i += increment) {
|
||||
for (int i = (right ? 1 : 0); i < (int)_sorted_standard_cargo_specs.size(); i += increment) {
|
||||
/* Cargo row */
|
||||
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, WID_CTO_CARGO_ROW_FIRST + i);
|
||||
ver->Add(panel);
|
||||
@@ -2447,7 +2447,7 @@ public:
|
||||
case WID_O_COND_AUX_CARGO: {
|
||||
uint value = this->vehicle->GetOrder(this->OrderGetSel())->GetConditionValue();
|
||||
DropDownList list;
|
||||
for (size_t i = 0; i < _sorted_standard_cargo_specs_size; ++i) {
|
||||
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));
|
||||
}
|
||||
|
@@ -187,8 +187,7 @@ struct CFollowTrackT
|
||||
/* Mask already reserved trackdirs. */
|
||||
m_new_td_bits &= ~TrackBitsToTrackdirBits(reserved);
|
||||
/* Mask out all trackdirs that conflict with the reservation. */
|
||||
Track t;
|
||||
FOR_EACH_SET_TRACK(t, TrackdirBitsToTrackBits(m_new_td_bits)) {
|
||||
for (Track t : SetTrackBitIterator(TrackdirBitsToTrackBits(m_new_td_bits))) {
|
||||
if (TracksOverlap(reserved | TrackToTrackBits(t))) m_new_td_bits &= ~TrackToTrackdirBits(t);
|
||||
}
|
||||
if (m_new_td_bits == TRACKDIR_BIT_NONE) {
|
||||
|
@@ -945,8 +945,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
|
||||
TrackBits reserved = GetReservedTrackbits(dst_tile);
|
||||
trackdirbits &= ~TrackBitsToTrackdirBits(reserved);
|
||||
|
||||
Track t;
|
||||
FOR_EACH_SET_TRACK(t, TrackdirBitsToTrackBits(trackdirbits)) {
|
||||
for (Track t : SetTrackBitIterator(TrackdirBitsToTrackBits(trackdirbits))) {
|
||||
if (TracksOverlap(reserved | TrackToTrackBits(t))) trackdirbits &= ~TrackToTrackdirBits(t);
|
||||
}
|
||||
}
|
||||
|
375
src/settings.cpp
375
src/settings.cpp
@@ -23,6 +23,7 @@
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <array>
|
||||
#include <charconv>
|
||||
#include <limits>
|
||||
#include "currency.h"
|
||||
#include "screenshot.h"
|
||||
@@ -98,19 +99,87 @@ ClientSettings _settings_client;
|
||||
GameSettings _settings_game; ///< Game settings of a running game or the scenario editor.
|
||||
GameSettings _settings_newgame; ///< Game settings for new games (updated from the intro screen).
|
||||
TimeSettings _settings_time; ///< The effective settings that are used for time display.
|
||||
VehicleDefaultSettings _old_vds; ///< Used for loading default vehicles settings from old savegames
|
||||
std::string _config_file; ///< Configuration file of OpenTTD
|
||||
VehicleDefaultSettings _old_vds; ///< Used for loading default vehicles settings from old savegames.
|
||||
std::string _config_file; ///< Configuration file of OpenTTD.
|
||||
std::string _config_file_text;
|
||||
std::string _private_file; ///< Private configuration file of OpenTTD.
|
||||
std::string _secrets_file; ///< Secrets configuration file of OpenTTD.
|
||||
|
||||
typedef std::list<ErrorMessageData> ErrorList;
|
||||
static ErrorList _settings_error_list; ///< Errors while loading minimal settings.
|
||||
|
||||
|
||||
typedef void SettingDescProc(IniFile *ini, const SettingTable &desc, const char *grpname, void *object, bool only_startup);
|
||||
typedef void SettingDescProcList(IniFile *ini, const char *grpname, StringList &list);
|
||||
/**
|
||||
* List of all the generic setting tables.
|
||||
*
|
||||
* There are a few tables that are special and not processed like the rest:
|
||||
* - _currency_settings
|
||||
* - _misc_settings
|
||||
* - _company_settings
|
||||
* - _win32_settings
|
||||
* As such, they are not part of this list.
|
||||
*/
|
||||
static const SettingTable _generic_setting_tables[] = {
|
||||
_settings,
|
||||
_network_settings,
|
||||
};
|
||||
|
||||
/**
|
||||
* List of all the private setting tables.
|
||||
*/
|
||||
static const SettingTable _private_setting_tables[] = {
|
||||
_network_private_settings,
|
||||
};
|
||||
|
||||
/**
|
||||
* List of all the secrets setting tables.
|
||||
*/
|
||||
static const SettingTable _secrets_setting_tables[] = {
|
||||
_network_secrets_settings,
|
||||
};
|
||||
|
||||
typedef void SettingDescProc(IniFile &ini, const SettingTable &desc, const char *grpname, void *object, bool only_startup);
|
||||
typedef void SettingDescProcList(IniFile &ini, const char *grpname, StringList &list);
|
||||
|
||||
static bool IsSignedVarMemType(VarType vt);
|
||||
|
||||
|
||||
/**
|
||||
* IniFile to store a configuration.
|
||||
*/
|
||||
class ConfigIniFile : public IniFile {
|
||||
private:
|
||||
inline static const char * const list_group_names[] = {
|
||||
"bans",
|
||||
"newgrf",
|
||||
"servers",
|
||||
"server_bind_addresses",
|
||||
nullptr,
|
||||
};
|
||||
|
||||
public:
|
||||
ConfigIniFile(const std::string &filename, std::string *save = nullptr) : IniFile(list_group_names)
|
||||
{
|
||||
this->LoadFromDisk(filename, NO_DIRECTORY, save);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Ini-file versions.
|
||||
*
|
||||
* Sometimes we move settings between different ini-files, as we need to know
|
||||
* when we have to load/remove it from the old versus reading it from the new
|
||||
* location. These versions assist with situations like that.
|
||||
*/
|
||||
enum IniFileVersion : uint32 {
|
||||
IFV_0, ///< 0 All versions prior to introduction.
|
||||
IFV_PRIVATE_SECRETS, ///< 1 PR#9298 Moving of settings from openttd.cfg to private.cfg / secrets.cfg.
|
||||
|
||||
IFV_MAX_VERSION, ///< Highest possible ini-file version.
|
||||
};
|
||||
|
||||
const uint16 INIFILE_VERSION = (IniFileVersion)(IFV_MAX_VERSION - 1); ///< Current ini-file version of OpenTTD.
|
||||
|
||||
/**
|
||||
* Get the setting at the given index into the settings table.
|
||||
* @param index The index to look for.
|
||||
@@ -122,17 +191,6 @@ const SettingDesc *GetSettingDescription(uint index)
|
||||
return _settings.begin()[index].get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Groups in openttd.cfg that are actually lists.
|
||||
*/
|
||||
static const char * const _list_group_names[] = {
|
||||
"bans",
|
||||
"newgrf",
|
||||
"servers",
|
||||
"server_bind_addresses",
|
||||
nullptr
|
||||
};
|
||||
|
||||
/**
|
||||
* Find the index value of a ONEofMANY type in a string separated by |
|
||||
* @param str the current value of the setting for which a value needs found
|
||||
@@ -326,9 +384,8 @@ void OneOfManySettingDesc::FormatValue(char *buf, const char *last, const void *
|
||||
void ManyOfManySettingDesc::FormatValue(char *buf, const char *last, const void *object) const
|
||||
{
|
||||
uint bitmask = (uint)this->Read(object);
|
||||
uint id = 0;
|
||||
bool first = true;
|
||||
FOR_EACH_SET_BIT(id, bitmask) {
|
||||
for (uint id : SetBitIterator(bitmask)) {
|
||||
if (!first) buf = strecpy(buf, "|", last);
|
||||
buf = this->FormatSingleValue(buf, last, id);
|
||||
first = false;
|
||||
@@ -549,10 +606,10 @@ const std::string &StringSettingDesc::Read(const void *object) const
|
||||
* @param object pointer to the object been loaded
|
||||
* @param only_startup load only the startup settings set
|
||||
*/
|
||||
static void IniLoadSettings(IniFile *ini, const SettingTable &settings_table, const char *grpname, void *object, bool only_startup)
|
||||
static void IniLoadSettings(IniFile &ini, const SettingTable &settings_table, const char *grpname, void *object, bool only_startup)
|
||||
{
|
||||
IniGroup *group;
|
||||
IniGroup *group_def = ini->GetGroup(grpname);
|
||||
IniGroup *group_def = ini.GetGroup(grpname);
|
||||
|
||||
for (auto &sd : settings_table) {
|
||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
|
||||
@@ -565,7 +622,7 @@ static void IniLoadSettings(IniFile *ini, const SettingTable &settings_table, co
|
||||
std::string s{ sd->name };
|
||||
auto sc = s.find('.');
|
||||
if (sc != std::string::npos) {
|
||||
group = ini->GetGroup(s.substr(0, sc));
|
||||
group = ini.GetGroup(s.substr(0, sc));
|
||||
s = s.substr(sc + 1);
|
||||
} else {
|
||||
group = group_def;
|
||||
@@ -581,7 +638,7 @@ static void IniLoadSettings(IniFile *ini, const SettingTable &settings_table, co
|
||||
/* For settings.xx.zz.yy load the settings from [zz] yy = ? in case the previous
|
||||
* did not exist (e.g. loading old config files with a [yapf] section */
|
||||
sc = s.find('.');
|
||||
if (sc != std::string::npos) item = ini->GetGroup(s.substr(0, sc))->GetItem(s.substr(sc + 1), false);
|
||||
if (sc != std::string::npos) item = ini.GetGroup(s.substr(0, sc))->GetItem(s.substr(sc + 1), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -628,7 +685,7 @@ void ListSettingDesc::ParseValue(const IniItem *item, void *object) const
|
||||
* values are reloaded when saving). If settings indeed have changed, we get
|
||||
* these and save them.
|
||||
*/
|
||||
static void IniSaveSettings(IniFile *ini, const SettingTable &settings_table, const char *grpname, void *object, bool)
|
||||
static void IniSaveSettings(IniFile &ini, const SettingTable &settings_table, const char *grpname, void *object, bool)
|
||||
{
|
||||
IniGroup *group_def = nullptr, *group;
|
||||
IniItem *item;
|
||||
@@ -645,10 +702,10 @@ static void IniSaveSettings(IniFile *ini, const SettingTable &settings_table, co
|
||||
std::string s{ sd->name };
|
||||
auto sc = s.find('.');
|
||||
if (sc != std::string::npos) {
|
||||
group = ini->GetGroup(s.substr(0, sc));
|
||||
group = ini.GetGroup(s.substr(0, sc));
|
||||
s = s.substr(sc + 1);
|
||||
} else {
|
||||
if (group_def == nullptr) group_def = ini->GetGroup(grpname);
|
||||
if (group_def == nullptr) group_def = ini.GetGroup(grpname);
|
||||
group = group_def;
|
||||
}
|
||||
|
||||
@@ -726,9 +783,9 @@ bool ListSettingDesc::IsSameValue(const IniItem *item, void *object) const
|
||||
* @param grpname character string identifying the section-header of the ini file that will be parsed
|
||||
* @param list new list with entries of the given section
|
||||
*/
|
||||
static void IniLoadSettingList(IniFile *ini, const char *grpname, StringList &list)
|
||||
static void IniLoadSettingList(IniFile &ini, const char *grpname, StringList &list)
|
||||
{
|
||||
IniGroup *group = ini->GetGroup(grpname);
|
||||
IniGroup *group = ini.GetGroup(grpname);
|
||||
|
||||
if (group == nullptr) return;
|
||||
|
||||
@@ -748,9 +805,9 @@ static void IniLoadSettingList(IniFile *ini, const char *grpname, StringList &li
|
||||
* @param list pointer to an string(pointer) array that will be used as the
|
||||
* source to be saved into the relevant ini section
|
||||
*/
|
||||
static void IniSaveSettingList(IniFile *ini, const char *grpname, StringList &list)
|
||||
static void IniSaveSettingList(IniFile &ini, const char *grpname, StringList &list)
|
||||
{
|
||||
IniGroup *group = ini->GetGroup(grpname);
|
||||
IniGroup *group = ini.GetGroup(grpname);
|
||||
|
||||
if (group == nullptr) return;
|
||||
group->Clear();
|
||||
@@ -766,7 +823,7 @@ static void IniSaveSettingList(IniFile *ini, const char *grpname, StringList &li
|
||||
* @param grpname character string identifying the section-header of the ini file that will be parsed
|
||||
* @param desc Destination WindowDesc
|
||||
*/
|
||||
void IniLoadWindowSettings(IniFile *ini, const char *grpname, void *desc)
|
||||
void IniLoadWindowSettings(IniFile &ini, const char *grpname, void *desc)
|
||||
{
|
||||
IniLoadSettings(ini, _window_settings, grpname, desc, false);
|
||||
}
|
||||
@@ -777,7 +834,7 @@ void IniLoadWindowSettings(IniFile *ini, const char *grpname, void *desc)
|
||||
* @param grpname character string identifying the section-header of the ini file
|
||||
* @param desc Source WindowDesc
|
||||
*/
|
||||
void IniSaveWindowSettings(IniFile *ini, const char *grpname, void *desc)
|
||||
void IniSaveWindowSettings(IniFile &ini, const char *grpname, void *desc)
|
||||
{
|
||||
IniSaveSettings(ini, _window_settings, grpname, desc, false);
|
||||
}
|
||||
@@ -1726,9 +1783,9 @@ static void HandleOldDiffCustom(bool savegame)
|
||||
}
|
||||
}
|
||||
|
||||
static void AILoadConfig(IniFile *ini, const char *grpname)
|
||||
static void AILoadConfig(IniFile &ini, const char *grpname)
|
||||
{
|
||||
IniGroup *group = ini->GetGroup(grpname);
|
||||
IniGroup *group = ini.GetGroup(grpname);
|
||||
IniItem *item;
|
||||
|
||||
/* Clean any configured AI */
|
||||
@@ -1754,9 +1811,9 @@ static void AILoadConfig(IniFile *ini, const char *grpname)
|
||||
}
|
||||
}
|
||||
|
||||
static void GameLoadConfig(IniFile *ini, const char *grpname)
|
||||
static void GameLoadConfig(IniFile &ini, const char *grpname)
|
||||
{
|
||||
IniGroup *group = ini->GetGroup(grpname);
|
||||
IniGroup *group = ini.GetGroup(grpname);
|
||||
IniItem *item;
|
||||
|
||||
/* Clean any configured GameScript */
|
||||
@@ -1820,9 +1877,9 @@ static bool DecodeHexText(const char *pos, uint8 *dest, size_t dest_size)
|
||||
* @param grpname Group name containing the configuration of the GRF.
|
||||
* @param is_static GRF is static.
|
||||
*/
|
||||
static GRFConfig *GRFLoadConfig(IniFile *ini, const char *grpname, bool is_static)
|
||||
static GRFConfig *GRFLoadConfig(IniFile &ini, const char *grpname, bool is_static)
|
||||
{
|
||||
IniGroup *group = ini->GetGroup(grpname);
|
||||
IniGroup *group = ini.GetGroup(grpname);
|
||||
IniItem *item;
|
||||
GRFConfig *first = nullptr;
|
||||
GRFConfig **curr = &first;
|
||||
@@ -1914,9 +1971,23 @@ static GRFConfig *GRFLoadConfig(IniFile *ini, const char *grpname, bool is_stati
|
||||
return first;
|
||||
}
|
||||
|
||||
static void AISaveConfig(IniFile *ini, const char *grpname)
|
||||
static IniFileVersion LoadVersionFromConfig(IniFile &ini)
|
||||
{
|
||||
IniGroup *group = ini->GetGroup(grpname);
|
||||
IniGroup *group = ini.GetGroup("version");
|
||||
|
||||
auto version_number = group->GetItem("ini_version", false);
|
||||
/* Older ini-file versions don't have this key yet. */
|
||||
if (version_number == nullptr || !version_number->value.has_value()) return IFV_0;
|
||||
|
||||
uint32 version = 0;
|
||||
std::from_chars(version_number->value->data(), version_number->value->data() + version_number->value->size(), version);
|
||||
|
||||
return static_cast<IniFileVersion>(version);
|
||||
}
|
||||
|
||||
static void AISaveConfig(IniFile &ini, const char *grpname)
|
||||
{
|
||||
IniGroup *group = ini.GetGroup(grpname);
|
||||
|
||||
if (group == nullptr) return;
|
||||
group->Clear();
|
||||
@@ -1937,9 +2008,9 @@ static void AISaveConfig(IniFile *ini, const char *grpname)
|
||||
}
|
||||
}
|
||||
|
||||
static void GameSaveConfig(IniFile *ini, const char *grpname)
|
||||
static void GameSaveConfig(IniFile &ini, const char *grpname)
|
||||
{
|
||||
IniGroup *group = ini->GetGroup(grpname);
|
||||
IniGroup *group = ini.GetGroup(grpname);
|
||||
|
||||
if (group == nullptr) return;
|
||||
group->Clear();
|
||||
@@ -1962,28 +2033,19 @@ static void GameSaveConfig(IniFile *ini, const char *grpname)
|
||||
* Save the version of OpenTTD to the ini file.
|
||||
* @param ini the ini to write to
|
||||
*/
|
||||
static void SaveVersionInConfig(IniFile *ini)
|
||||
static void SaveVersionInConfig(IniFile &ini)
|
||||
{
|
||||
IniGroup *group = ini->GetGroup("version");
|
||||
|
||||
char version[9];
|
||||
seprintf(version, lastof(version), "%08X", _openttd_newgrf_version);
|
||||
|
||||
const char * const versions[][2] = {
|
||||
{ "version_string", _openttd_revision },
|
||||
{ "version_number", version }
|
||||
};
|
||||
|
||||
for (uint i = 0; i < lengthof(versions); i++) {
|
||||
group->GetItem(versions[i][0], true)->SetValue(versions[i][1]);
|
||||
}
|
||||
IniGroup *group = ini.GetGroup("version");
|
||||
group->GetItem("version_string", true)->SetValue(_openttd_revision);
|
||||
group->GetItem("version_number", true)->SetValue(stdstr_fmt("%08X", _openttd_newgrf_version));
|
||||
group->GetItem("ini_version", true)->SetValue(std::to_string(INIFILE_VERSION));
|
||||
}
|
||||
|
||||
/* Save a GRF configuration to the given group name */
|
||||
static void GRFSaveConfig(IniFile *ini, const char *grpname, const GRFConfig *list)
|
||||
static void GRFSaveConfig(IniFile &ini, const char *grpname, const GRFConfig *list)
|
||||
{
|
||||
ini->RemoveGroup(grpname);
|
||||
IniGroup *group = ini->GetGroup(grpname);
|
||||
ini.RemoveGroup(grpname);
|
||||
IniGroup *group = ini.GetGroup(grpname);
|
||||
const GRFConfig *c;
|
||||
|
||||
for (c = list; c != nullptr; c = c->next) {
|
||||
@@ -2000,29 +2062,57 @@ static void GRFSaveConfig(IniFile *ini, const char *grpname, const GRFConfig *li
|
||||
}
|
||||
|
||||
/* Common handler for saving/loading variables to the configuration file */
|
||||
static void HandleSettingDescs(IniFile *ini, SettingDescProc *proc, SettingDescProcList *proc_list, bool only_startup = false)
|
||||
static void HandleSettingDescs(IniFile &generic_ini, IniFile &private_ini, IniFile &secrets_ini, SettingDescProc *proc, SettingDescProcList *proc_list, bool only_startup = false)
|
||||
{
|
||||
proc(ini, _misc_settings, "misc", nullptr, only_startup);
|
||||
proc(generic_ini, _misc_settings, "misc", nullptr, only_startup);
|
||||
#if defined(_WIN32) && !defined(DEDICATED)
|
||||
proc(ini, _win32_settings, "win32", nullptr, only_startup);
|
||||
proc(generic_ini, _win32_settings, "win32", nullptr, only_startup);
|
||||
#endif /* _WIN32 */
|
||||
|
||||
proc(ini, _settings, "patches", &_settings_newgame, only_startup);
|
||||
proc(ini, _currency_settings,"currency", &_custom_currency, only_startup);
|
||||
proc(ini, _company_settings, "company", &_settings_client.company, only_startup);
|
||||
/* The name "patches" is a fallback, as every setting should sets its own group. */
|
||||
|
||||
for (auto &table : _generic_setting_tables) {
|
||||
proc(generic_ini, table, "patches", &_settings_newgame, only_startup);
|
||||
}
|
||||
for (auto &table : _private_setting_tables) {
|
||||
proc(private_ini, table, "patches", &_settings_newgame, only_startup);
|
||||
}
|
||||
for (auto &table : _secrets_setting_tables) {
|
||||
proc(secrets_ini, table, "patches", &_settings_newgame, only_startup);
|
||||
}
|
||||
|
||||
proc(generic_ini, _currency_settings, "currency", &_custom_currency, only_startup);
|
||||
proc(generic_ini, _company_settings, "company", &_settings_client.company, only_startup);
|
||||
|
||||
if (!only_startup) {
|
||||
proc_list(ini, "server_bind_addresses", _network_bind_list);
|
||||
proc_list(ini, "servers", _network_host_list);
|
||||
proc_list(ini, "bans", _network_ban_list);
|
||||
proc_list(private_ini, "server_bind_addresses", _network_bind_list);
|
||||
proc_list(private_ini, "servers", _network_host_list);
|
||||
proc_list(private_ini, "bans", _network_ban_list);
|
||||
}
|
||||
}
|
||||
|
||||
static IniFile *IniLoadConfig()
|
||||
/**
|
||||
* Remove all entries from a settings table from an ini-file.
|
||||
*
|
||||
* This is only useful if those entries are moved to another file, and you
|
||||
* want to clean up what is left behind.
|
||||
*
|
||||
* @param ini The ini file to remove the entries from.
|
||||
* @param table The table to look for entries to remove.
|
||||
*/
|
||||
static void RemoveEntriesFromIni(IniFile &ini, const SettingTable &table)
|
||||
{
|
||||
IniFile *ini = new IniFile(_list_group_names);
|
||||
ini->LoadFromDisk(_config_file, NO_DIRECTORY, &_config_file_text);
|
||||
return ini;
|
||||
for (auto &sd : table) {
|
||||
/* For settings.xx.yy load the settings from [xx] yy = ? */
|
||||
std::string s{ sd->name };
|
||||
auto sc = s.find('.');
|
||||
if (sc == std::string::npos) continue;
|
||||
|
||||
IniGroup *group = ini.GetGroup(s.substr(0, sc));
|
||||
s = s.substr(sc + 1);
|
||||
|
||||
group->RemoveItem(s);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2031,20 +2121,30 @@ static IniFile *IniLoadConfig()
|
||||
*/
|
||||
void LoadFromConfig(bool startup)
|
||||
{
|
||||
IniFile *ini = IniLoadConfig();
|
||||
ConfigIniFile generic_ini(_config_file, &_config_file_text);
|
||||
ConfigIniFile private_ini(_private_file);
|
||||
ConfigIniFile secrets_ini(_secrets_file);
|
||||
|
||||
if (!startup) ResetCurrencies(false); // Initialize the array of currencies, without preserving the custom one
|
||||
|
||||
/* Load basic settings only during bootstrap, load other settings not during bootstrap */
|
||||
HandleSettingDescs(ini, IniLoadSettings, IniLoadSettingList, startup);
|
||||
IniFileVersion generic_version = LoadVersionFromConfig(generic_ini);
|
||||
|
||||
/* Before the split of private/secrets, we have to look in the generic for these settings. */
|
||||
if (generic_version < IFV_PRIVATE_SECRETS) {
|
||||
HandleSettingDescs(generic_ini, generic_ini, generic_ini, IniLoadSettings, IniLoadSettingList, startup);
|
||||
} else {
|
||||
HandleSettingDescs(generic_ini, private_ini, secrets_ini, IniLoadSettings, IniLoadSettingList, startup);
|
||||
}
|
||||
|
||||
/* Load basic settings only during bootstrap, load other settings not during bootstrap */
|
||||
if (!startup) {
|
||||
_grfconfig_newgame = GRFLoadConfig(ini, "newgrf", false);
|
||||
_grfconfig_static = GRFLoadConfig(ini, "newgrf-static", true);
|
||||
AILoadConfig(ini, "ai_players");
|
||||
GameLoadConfig(ini, "game_scripts");
|
||||
_grfconfig_newgame = GRFLoadConfig(generic_ini, "newgrf", false);
|
||||
_grfconfig_static = GRFLoadConfig(generic_ini, "newgrf-static", true);
|
||||
AILoadConfig(generic_ini, "ai_players");
|
||||
GameLoadConfig(generic_ini, "game_scripts");
|
||||
|
||||
PrepareOldDiffCustom();
|
||||
IniLoadSettings(ini, _gameopt_settings, "gameopt", &_settings_newgame, false);
|
||||
IniLoadSettings(generic_ini, _gameopt_settings, "gameopt", &_settings_newgame, false);
|
||||
HandleOldDiffCustom(false);
|
||||
|
||||
ValidateSettings();
|
||||
@@ -2057,28 +2157,57 @@ void LoadFromConfig(bool startup)
|
||||
ScheduleErrorMessage(_settings_error_list);
|
||||
if (FindWindowById(WC_ERRMSG, 0) == nullptr) ShowFirstError();
|
||||
}
|
||||
|
||||
delete ini;
|
||||
}
|
||||
|
||||
/** Save the values to the configuration file */
|
||||
void SaveToConfig()
|
||||
{
|
||||
IniFile *ini = IniLoadConfig();
|
||||
ConfigIniFile generic_ini(_config_file);
|
||||
ConfigIniFile private_ini(_private_file);
|
||||
ConfigIniFile secrets_ini(_secrets_file);
|
||||
|
||||
/* Remove some obsolete groups. These have all been loaded into other groups. */
|
||||
ini->RemoveGroup("patches");
|
||||
ini->RemoveGroup("yapf");
|
||||
ini->RemoveGroup("gameopt");
|
||||
IniFileVersion generic_version = LoadVersionFromConfig(generic_ini);
|
||||
|
||||
HandleSettingDescs(ini, IniSaveSettings, IniSaveSettingList);
|
||||
GRFSaveConfig(ini, "newgrf", _grfconfig_newgame);
|
||||
GRFSaveConfig(ini, "newgrf-static", _grfconfig_static);
|
||||
AISaveConfig(ini, "ai_players");
|
||||
GameSaveConfig(ini, "game_scripts");
|
||||
SaveVersionInConfig(ini);
|
||||
ini->SaveToDisk(_config_file);
|
||||
delete ini;
|
||||
/* If we newly create the private/secrets file, add a dummy group on top
|
||||
* just so we can add a comment before it (that is how IniFile works).
|
||||
* This to explain what the file is about. After doing it once, never touch
|
||||
* it again, as otherwise we might be reverting user changes. */
|
||||
if (!private_ini.GetGroup("private", false)) private_ini.GetGroup("private")->comment = "; This file possibly contains private information which can identify you as person.\n";
|
||||
if (!secrets_ini.GetGroup("secrets", false)) secrets_ini.GetGroup("secrets")->comment = "; Do not share this file with others, not even if they claim to be technical support.\n; This file contains saved passwords and other secrets that should remain private to you!\n";
|
||||
|
||||
if (generic_version == IFV_0) {
|
||||
/* Remove some obsolete groups. These have all been loaded into other groups. */
|
||||
generic_ini.RemoveGroup("patches");
|
||||
generic_ini.RemoveGroup("yapf");
|
||||
generic_ini.RemoveGroup("gameopt");
|
||||
|
||||
/* Remove all settings from the generic ini that are now in the private ini. */
|
||||
generic_ini.RemoveGroup("server_bind_addresses");
|
||||
generic_ini.RemoveGroup("servers");
|
||||
generic_ini.RemoveGroup("bans");
|
||||
for (auto &table : _private_setting_tables) {
|
||||
RemoveEntriesFromIni(generic_ini, table);
|
||||
}
|
||||
|
||||
/* Remove all settings from the generic ini that are now in the secrets ini. */
|
||||
for (auto &table : _secrets_setting_tables) {
|
||||
RemoveEntriesFromIni(generic_ini, table);
|
||||
}
|
||||
}
|
||||
|
||||
HandleSettingDescs(generic_ini, private_ini, secrets_ini, IniSaveSettings, IniSaveSettingList);
|
||||
GRFSaveConfig(generic_ini, "newgrf", _grfconfig_newgame);
|
||||
GRFSaveConfig(generic_ini, "newgrf-static", _grfconfig_static);
|
||||
AISaveConfig(generic_ini, "ai_players");
|
||||
GameSaveConfig(generic_ini, "game_scripts");
|
||||
|
||||
SaveVersionInConfig(generic_ini);
|
||||
SaveVersionInConfig(private_ini);
|
||||
SaveVersionInConfig(secrets_ini);
|
||||
|
||||
generic_ini.SaveToDisk(_config_file);
|
||||
private_ini.SaveToDisk(_private_file);
|
||||
secrets_ini.SaveToDisk(_secrets_file);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2089,8 +2218,8 @@ StringList GetGRFPresetList()
|
||||
{
|
||||
StringList list;
|
||||
|
||||
std::unique_ptr<IniFile> ini(IniLoadConfig());
|
||||
for (IniGroup *group = ini->group; group != nullptr; group = group->next) {
|
||||
ConfigIniFile ini(_config_file);
|
||||
for (IniGroup *group = ini.group; group != nullptr; group = group->next) {
|
||||
if (group->name.compare(0, 7, "preset-") == 0) {
|
||||
list.push_back(group->name.substr(7));
|
||||
}
|
||||
@@ -2111,9 +2240,8 @@ GRFConfig *LoadGRFPresetFromConfig(const char *config_name)
|
||||
char *section = (char*)alloca(len);
|
||||
seprintf(section, section + len - 1, "preset-%s", config_name);
|
||||
|
||||
IniFile *ini = IniLoadConfig();
|
||||
ConfigIniFile ini(_config_file);
|
||||
GRFConfig *config = GRFLoadConfig(ini, section, false);
|
||||
delete ini;
|
||||
|
||||
return config;
|
||||
}
|
||||
@@ -2130,10 +2258,9 @@ void SaveGRFPresetToConfig(const char *config_name, GRFConfig *config)
|
||||
char *section = (char*)alloca(len);
|
||||
seprintf(section, section + len - 1, "preset-%s", config_name);
|
||||
|
||||
IniFile *ini = IniLoadConfig();
|
||||
ConfigIniFile ini(_config_file);
|
||||
GRFSaveConfig(ini, section, config);
|
||||
ini->SaveToDisk(_config_file);
|
||||
delete ini;
|
||||
ini.SaveToDisk(_config_file);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2146,10 +2273,9 @@ void DeleteGRFPresetFromConfig(const char *config_name)
|
||||
char *section = (char*)alloca(len);
|
||||
seprintf(section, section + len - 1, "preset-%s", config_name);
|
||||
|
||||
IniFile *ini = IniLoadConfig();
|
||||
ini->RemoveGroup(section);
|
||||
ini->SaveToDisk(_config_file);
|
||||
delete ini;
|
||||
ConfigIniFile ini(_config_file);
|
||||
ini.RemoveGroup(section);
|
||||
ini.SaveToDisk(_config_file);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2227,8 +2353,18 @@ static const SettingDesc *GetCompanySettingFromName(const char *name)
|
||||
*/
|
||||
const SettingDesc *GetSettingFromName(const char *name)
|
||||
{
|
||||
auto sd = GetSettingFromName(name, _settings);
|
||||
if (sd != nullptr) return sd;
|
||||
for (auto &table : _generic_setting_tables) {
|
||||
auto sd = GetSettingFromName(name, table);
|
||||
if (sd != nullptr) return sd;
|
||||
}
|
||||
for (auto &table : _private_setting_tables) {
|
||||
auto sd = GetSettingFromName(name, table);
|
||||
if (sd != nullptr) return sd;
|
||||
}
|
||||
for (auto &table : _secrets_setting_tables) {
|
||||
auto sd = GetSettingFromName(name, table);
|
||||
if (sd != nullptr) return sd;
|
||||
}
|
||||
|
||||
return GetCompanySettingFromName(name);
|
||||
}
|
||||
@@ -2530,6 +2666,18 @@ void IConsoleGetSetting(const char *name, bool force_newgame)
|
||||
}
|
||||
}
|
||||
|
||||
static void IConsoleListSettingsTable(const SettingTable &table, const char *prefilter)
|
||||
{
|
||||
for (auto &sd : table) {
|
||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
|
||||
if (prefilter != nullptr && strstr(sd->name, prefilter) == nullptr) continue;
|
||||
if ((sd->flags & SF_NO_NEWGAME) && _game_mode == GM_MENU) continue;
|
||||
char value[80];
|
||||
sd->FormatValue(value, lastof(value), &GetGameSettings());
|
||||
IConsolePrintF(CC_DEFAULT, "%s = %s", sd->name, value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* List all settings and their value to the console
|
||||
*
|
||||
@@ -2539,13 +2687,14 @@ void IConsoleListSettings(const char *prefilter)
|
||||
{
|
||||
IConsolePrintF(CC_WARNING, "All settings with their current value:");
|
||||
|
||||
for (auto &sd : _settings) {
|
||||
if (!SlIsObjectCurrentlyValid(sd->save.version_from, sd->save.version_to, sd->save.ext_feature_test)) continue;
|
||||
if (prefilter != nullptr && strstr(sd->name, prefilter) == nullptr) continue;
|
||||
if ((sd->flags & SF_NO_NEWGAME) && _game_mode == GM_MENU) continue;
|
||||
char value[80];
|
||||
sd->FormatValue(value, lastof(value), &GetGameSettings());
|
||||
IConsolePrintF(CC_DEFAULT, "%s = %s", sd->name, value);
|
||||
for (auto &table : _generic_setting_tables) {
|
||||
IConsoleListSettingsTable(table, prefilter);
|
||||
}
|
||||
for (auto &table : _private_setting_tables) {
|
||||
IConsoleListSettingsTable(table, prefilter);
|
||||
}
|
||||
for (auto &table : _secrets_setting_tables) {
|
||||
IConsoleListSettingsTable(table, prefilter);
|
||||
}
|
||||
|
||||
IConsolePrintF(CC_WARNING, "Use 'setting' command to change a value");
|
||||
|
@@ -24,8 +24,8 @@ void IConsoleListSettings(const char *prefilter);
|
||||
void LoadFromConfig(bool minimal = false);
|
||||
void SaveToConfig();
|
||||
|
||||
void IniLoadWindowSettings(IniFile *ini, const char *grpname, void *desc);
|
||||
void IniSaveWindowSettings(IniFile *ini, const char *grpname, void *desc);
|
||||
void IniLoadWindowSettings(IniFile &ini, const char *grpname, void *desc);
|
||||
void IniSaveWindowSettings(IniFile &ini, const char *grpname, void *desc);
|
||||
|
||||
StringList GetGRFPresetList();
|
||||
struct GRFConfig *LoadGRFPresetFromConfig(const char *config_name);
|
||||
|
@@ -3289,8 +3289,7 @@ draw_default_foundation:
|
||||
/* Sprite layout which needs preprocessing */
|
||||
bool separate_ground = HasBit(statspec->flags, SSF_SEPARATE_GROUND);
|
||||
uint32 var10_values = layout->PrepareLayout(total_offset, rti->fallback_railtype, 0, 0, separate_ground);
|
||||
uint8 var10;
|
||||
FOR_EACH_SET_BIT(var10, var10_values) {
|
||||
for (uint8 var10 : SetBitIterator(var10_values)) {
|
||||
uint32 var10_relocation = GetCustomStationRelocation(statspec, st, ti->tile, INVALID_RAILTYPE, var10);
|
||||
layout->ProcessRegisters(var10, var10_relocation, separate_ground);
|
||||
}
|
||||
|
@@ -290,8 +290,7 @@ protected:
|
||||
{
|
||||
int diff = 0;
|
||||
|
||||
CargoID j;
|
||||
FOR_EACH_SET_CARGO_ID(j, cargo_filter) {
|
||||
for (CargoID j : SetCargoBitIterator(cargo_filter)) {
|
||||
diff += a->goods[j].cargo.TotalCount() - b->goods[j].cargo.TotalCount();
|
||||
}
|
||||
|
||||
@@ -303,8 +302,7 @@ protected:
|
||||
{
|
||||
int diff = 0;
|
||||
|
||||
CargoID j;
|
||||
FOR_EACH_SET_CARGO_ID(j, cargo_filter) {
|
||||
for (CargoID j : SetCargoBitIterator(cargo_filter)) {
|
||||
diff += a->goods[j].cargo.AvailableCount() - b->goods[j].cargo.AvailableCount();
|
||||
}
|
||||
|
||||
@@ -317,8 +315,7 @@ protected:
|
||||
byte maxr1 = 0;
|
||||
byte maxr2 = 0;
|
||||
|
||||
CargoID j;
|
||||
FOR_EACH_SET_CARGO_ID(j, cargo_filter) {
|
||||
for (CargoID j : SetCargoBitIterator(cargo_filter)) {
|
||||
if (a->goods[j].HasRating()) maxr1 = std::max(maxr1, a->goods[j].rating);
|
||||
if (b->goods[j].HasRating()) maxr2 = std::max(maxr2, b->goods[j].rating);
|
||||
}
|
||||
@@ -422,10 +419,12 @@ public:
|
||||
this->FinishInitNested(window_number);
|
||||
this->owner = (Owner)this->window_number;
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
if (!HasBit(this->cargo_filter, cs->Index())) continue;
|
||||
this->LowerWidget(WID_STL_CARGOSTART + index);
|
||||
uint8 index = 0;
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
if (HasBit(this->cargo_filter, cs->Index())) {
|
||||
this->LowerWidget(WID_STL_CARGOSTART + index);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
if (this->cargo_filter == this->cargo_filter_max) this->cargo_filter = _cargo_mask;
|
||||
@@ -471,8 +470,7 @@ public:
|
||||
|
||||
/* Determine appropriate width for mini station rating graph */
|
||||
this->rating_width = 0;
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
this->rating_width = std::max(this->rating_width, GetStringBoundingBox(cs->abbrev).width);
|
||||
}
|
||||
/* Approximately match original 16 pixel wide rating bars by multiplying string width by 1.6 */
|
||||
@@ -540,8 +538,8 @@ public:
|
||||
x += rtl ? -text_spacing : text_spacing;
|
||||
|
||||
/* show cargo waiting and station ratings */
|
||||
for (uint j = 0; j < _sorted_standard_cargo_specs_size; j++) {
|
||||
CargoID cid = _sorted_cargo_specs[j]->Index();
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
CargoID cid = cs->Index();
|
||||
if (st->goods[cid].cargo.TotalCount() > 0) {
|
||||
/* For RTL we work in exactly the opposite direction. So
|
||||
* decrement the space needed first, then draw to the left
|
||||
@@ -634,8 +632,7 @@ public:
|
||||
ToggleBit(this->facilities, widget - WID_STL_TRAIN);
|
||||
this->ToggleWidgetLoweredState(widget);
|
||||
} else {
|
||||
uint i;
|
||||
FOR_EACH_SET_BIT(i, this->facilities) {
|
||||
for (uint i : SetBitIterator(this->facilities)) {
|
||||
this->RaiseWidget(i + WID_STL_TRAIN);
|
||||
}
|
||||
this->facilities = 1 << (widget - WID_STL_TRAIN);
|
||||
@@ -656,7 +653,7 @@ public:
|
||||
break;
|
||||
|
||||
case WID_STL_CARGOALL: {
|
||||
for (uint i = 0; i < _sorted_standard_cargo_specs_size; i++) {
|
||||
for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) {
|
||||
this->LowerWidget(WID_STL_CARGOSTART + i);
|
||||
}
|
||||
this->LowerWidget(WID_STL_NOCARGOWAITING);
|
||||
@@ -682,7 +679,7 @@ public:
|
||||
this->include_empty = !this->include_empty;
|
||||
this->ToggleWidgetLoweredState(WID_STL_NOCARGOWAITING);
|
||||
} else {
|
||||
for (uint i = 0; i < _sorted_standard_cargo_specs_size; i++) {
|
||||
for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) {
|
||||
this->RaiseWidget(WID_STL_CARGOSTART + i);
|
||||
}
|
||||
|
||||
@@ -704,7 +701,7 @@ public:
|
||||
ToggleBit(this->cargo_filter, cs->Index());
|
||||
this->ToggleWidgetLoweredState(widget);
|
||||
} else {
|
||||
for (uint i = 0; i < _sorted_standard_cargo_specs_size; i++) {
|
||||
for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) {
|
||||
this->RaiseWidget(WID_STL_CARGOSTART + i);
|
||||
}
|
||||
this->RaiseWidget(WID_STL_NOCARGOWAITING);
|
||||
@@ -802,7 +799,7 @@ static NWidgetBase *CargoWidgets(int *biggest_index)
|
||||
{
|
||||
NWidgetHorizontal *container = new NWidgetHorizontal();
|
||||
|
||||
for (uint i = 0; i < _sorted_standard_cargo_specs_size; i++) {
|
||||
for (uint i = 0; i < _sorted_standard_cargo_specs.size(); i++) {
|
||||
NWidgetBackground *panel = new NWidgetBackground(WWT_PANEL, COLOUR_GREY, WID_STL_CARGOSTART + i);
|
||||
panel->SetMinimalSize(14, 0);
|
||||
panel->SetMinimalTextLines(1, 0, FS_NORMAL);
|
||||
@@ -811,7 +808,7 @@ static NWidgetBase *CargoWidgets(int *biggest_index)
|
||||
panel->SetDataTip(0, STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE);
|
||||
container->Add(panel);
|
||||
}
|
||||
*biggest_index = WID_STL_CARGOSTART + _sorted_standard_cargo_specs_size;
|
||||
*biggest_index = WID_STL_CARGOSTART + static_cast<int>(_sorted_standard_cargo_specs.size());
|
||||
return container;
|
||||
}
|
||||
|
||||
@@ -1530,8 +1527,7 @@ struct StationViewWindow : public Window {
|
||||
if (ofs_y < 0) return false;
|
||||
|
||||
const Station *st = Station::Get(this->window_number);
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
const GoodsEntry *ge = &st->goods[cs->Index()];
|
||||
if (!ge->HasRating()) continue;
|
||||
ofs_y -= FONT_HEIGHT_NORMAL;
|
||||
@@ -1994,8 +1990,7 @@ struct StationViewWindow : public Window {
|
||||
|
||||
this->ratings_list_y = y;
|
||||
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
const GoodsEntry *ge = &st->goods[cs->Index()];
|
||||
if (!ge->HasRating()) continue;
|
||||
|
||||
@@ -2140,8 +2135,7 @@ struct StationViewWindow : public Window {
|
||||
int row = this->GetRowFromWidget(pt.y, WID_SV_ACCEPT_RATING_LIST, WD_FRAMERECT_TOP, FONT_HEIGHT_NORMAL);
|
||||
if (row < 1) break;
|
||||
const Station *st = Station::Get(this->window_number);
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
const GoodsEntry *ge = &st->goods[cs->Index()];
|
||||
if (!ge->HasRating()) continue;
|
||||
if (row == 1) {
|
||||
|
@@ -85,16 +85,6 @@ int64 StringParameters::GetInt64(WChar type)
|
||||
return this->data[this->offset++];
|
||||
}
|
||||
|
||||
/**
|
||||
* Shift all data in the data array by the given amount to make
|
||||
* room for some extra parameters.
|
||||
*/
|
||||
void StringParameters::ShiftParameters(uint amount)
|
||||
{
|
||||
assert(amount <= this->num_param);
|
||||
MemMoveT(this->data + amount, this->data, this->num_param - amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set DParam n to some number that is suitable for string size computations.
|
||||
* @param n Index of the string parameter.
|
||||
@@ -323,15 +313,6 @@ void SetDParamStr(uint n, const std::string &str)
|
||||
SetDParamStr(n, str.c_str());
|
||||
}
|
||||
|
||||
/**
|
||||
* Shift the string parameters in the global string parameter array by \a amount positions, making room at the beginning.
|
||||
* @param amount Number of positions to shift.
|
||||
*/
|
||||
void InjectDParam(uint amount)
|
||||
{
|
||||
_global_string_params.ShiftParameters(amount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a number into a string.
|
||||
* @param buff the buffer to write to
|
||||
|
@@ -122,8 +122,6 @@ public:
|
||||
return (int32)this->GetInt64(type);
|
||||
}
|
||||
|
||||
void ShiftParameters(uint amount);
|
||||
|
||||
/** Get a pointer to the current element in the data array. */
|
||||
uint64 *GetDataPointer() const
|
||||
{
|
||||
@@ -180,8 +178,6 @@ uint32 GetStringGRFID(StringID string);
|
||||
uint ConvertKmhishSpeedToDisplaySpeed(uint speed);
|
||||
uint ConvertDisplaySpeedToKmhishSpeed(uint speed);
|
||||
|
||||
void InjectDParam(uint amount);
|
||||
|
||||
WChar GetDecimalSeparatorChar();
|
||||
|
||||
/**
|
||||
|
@@ -47,8 +47,7 @@ void Subsidy::AwardTo(CompanyID company)
|
||||
NewsStringData *company_name = new NewsStringData(GetString(STR_COMPANY_NAME));
|
||||
|
||||
/* Add a news item */
|
||||
std::pair<NewsReferenceType, NewsReferenceType> reftype = SetupSubsidyDecodeParam(this, SubsidyDecodeParamType::NewsAwarded);
|
||||
InjectDParam(1);
|
||||
std::pair<NewsReferenceType, NewsReferenceType> reftype = SetupSubsidyDecodeParam(this, SubsidyDecodeParamType::NewsAwarded, 1);
|
||||
|
||||
SetDParamStr(0, company_name->string);
|
||||
AddNewsItem(
|
||||
@@ -67,9 +66,10 @@ void Subsidy::AwardTo(CompanyID company)
|
||||
* Setup the string parameters for printing the subsidy at the screen, and compute the news reference for the subsidy.
|
||||
* @param s %Subsidy being printed.
|
||||
* @param mode Type of subsidy news message to decide on parameter format.
|
||||
* @param parameter_offset The location/index in the String DParams to start decoding the subsidy's parameters. Defaults to 0.
|
||||
* @return Reference of the subsidy in the news system.
|
||||
*/
|
||||
std::pair<NewsReferenceType, NewsReferenceType> SetupSubsidyDecodeParam(const Subsidy *s, SubsidyDecodeParamType mode)
|
||||
std::pair<NewsReferenceType, NewsReferenceType> SetupSubsidyDecodeParam(const Subsidy *s, SubsidyDecodeParamType mode, uint parameter_offset)
|
||||
{
|
||||
NewsReferenceType reftype1 = NR_NONE;
|
||||
NewsReferenceType reftype2 = NR_NONE;
|
||||
@@ -77,40 +77,40 @@ std::pair<NewsReferenceType, NewsReferenceType> SetupSubsidyDecodeParam(const Su
|
||||
/* Choose whether to use the singular or plural form of the cargo name based on how we're printing the subsidy */
|
||||
const CargoSpec *cs = CargoSpec::Get(s->cargo_type);
|
||||
if (mode == SubsidyDecodeParamType::Gui || mode == SubsidyDecodeParamType::NewsWithdrawn) {
|
||||
SetDParam(0, cs->name);
|
||||
SetDParam(parameter_offset, cs->name);
|
||||
} else {
|
||||
SetDParam(0, cs->name_single);
|
||||
SetDParam(parameter_offset, cs->name_single);
|
||||
}
|
||||
|
||||
switch (s->src_type) {
|
||||
case ST_INDUSTRY:
|
||||
reftype1 = NR_INDUSTRY;
|
||||
SetDParam(1, STR_INDUSTRY_NAME);
|
||||
SetDParam(parameter_offset + 1, STR_INDUSTRY_NAME);
|
||||
break;
|
||||
case ST_TOWN:
|
||||
reftype1 = NR_TOWN;
|
||||
SetDParam(1, STR_TOWN_NAME);
|
||||
SetDParam(parameter_offset + 1, STR_TOWN_NAME);
|
||||
break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
SetDParam(2, s->src);
|
||||
SetDParam(parameter_offset + 2, s->src);
|
||||
|
||||
switch (s->dst_type) {
|
||||
case ST_INDUSTRY:
|
||||
reftype2 = NR_INDUSTRY;
|
||||
SetDParam(4, STR_INDUSTRY_NAME);
|
||||
SetDParam(parameter_offset + 4, STR_INDUSTRY_NAME);
|
||||
break;
|
||||
case ST_TOWN:
|
||||
reftype2 = NR_TOWN;
|
||||
SetDParam(4, STR_TOWN_NAME);
|
||||
SetDParam(parameter_offset + 4, STR_TOWN_NAME);
|
||||
break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
SetDParam(5, s->dst);
|
||||
SetDParam(parameter_offset + 5, s->dst);
|
||||
|
||||
/* If the subsidy is being offered or awarded, the news item mentions the subsidy duration. */
|
||||
if (mode == SubsidyDecodeParamType::NewsOffered || mode == SubsidyDecodeParamType::NewsAwarded) {
|
||||
SetDParam(7, _settings_game.difficulty.subsidy_duration);
|
||||
SetDParam(parameter_offset + 7, _settings_game.difficulty.subsidy_duration);
|
||||
}
|
||||
|
||||
return std::pair<NewsReferenceType, NewsReferenceType>(reftype1, reftype2);
|
||||
|
@@ -17,10 +17,9 @@
|
||||
#include "news_type.h"
|
||||
#include "subsidy_base.h"
|
||||
|
||||
std::pair<NewsReferenceType, NewsReferenceType> SetupSubsidyDecodeParam(const struct Subsidy *s, SubsidyDecodeParamType mode);
|
||||
std::pair<NewsReferenceType, NewsReferenceType> SetupSubsidyDecodeParam(const struct Subsidy *s, SubsidyDecodeParamType mode, uint parameter_offset = 0);
|
||||
void DeleteSubsidyWith(SourceType type, SourceID index);
|
||||
bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, SourceID src, const Station *st);
|
||||
void RebuildSubsidisedSourceAndDestinationCache();
|
||||
void DeleteSubsidy(struct Subsidy *s);
|
||||
|
||||
#endif /* SUBSIDY_FUNC_H */
|
||||
|
@@ -1107,8 +1107,7 @@ class NIHTown : public NIHelper {
|
||||
|
||||
if (t->have_ratings != 0) {
|
||||
print(" Company ratings:");
|
||||
uint8 bit;
|
||||
FOR_EACH_SET_BIT(bit, t->have_ratings) {
|
||||
for (uint8 bit : SetBitIterator(t->have_ratings)) {
|
||||
seprintf(buffer, lastof(buffer), " %u: %d", bit, t->ratings[bit]);
|
||||
print(buffer);
|
||||
}
|
||||
|
@@ -6,6 +6,9 @@ set(TABLE_INI_SOURCE_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/currency_settings.ini
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/gameopt_settings.ini
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/misc_settings.ini
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/network_settings.ini
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/network_private_settings.ini
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/network_secrets_settings.ini
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/settings.ini
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/win32_settings.ini
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/window_settings.ini
|
||||
|
69
src/table/settings/network_private_settings.ini
Normal file
69
src/table/settings/network_private_settings.ini
Normal file
@@ -0,0 +1,69 @@
|
||||
; 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/>.
|
||||
;
|
||||
|
||||
; Network settings as stored in the private configuration file ("private.cfg").
|
||||
|
||||
[pre-amble]
|
||||
static const SettingTable _network_private_settings = {
|
||||
[post-amble]
|
||||
};
|
||||
[templates]
|
||||
SDTC_SSTR = SDTC_SSTR( $var, $type, $flags, $def, $length, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, nullptr),
|
||||
|
||||
[validation]
|
||||
|
||||
[defaults]
|
||||
flags = SF_NONE
|
||||
interval = 0
|
||||
str = STR_NULL
|
||||
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
|
||||
strval = STR_NULL
|
||||
pre_cb = nullptr
|
||||
post_cb = nullptr
|
||||
guiproc = nullptr
|
||||
load = nullptr
|
||||
from = SL_MIN_VERSION
|
||||
to = SL_MAX_VERSION
|
||||
cat = SC_ADVANCED
|
||||
extra = 0
|
||||
startup = false
|
||||
extver = SlXvFeatureTest()
|
||||
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.client_name
|
||||
type = SLE_STR
|
||||
length = NETWORK_CLIENT_NAME_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = nullptr
|
||||
pre_cb = NetworkValidateClientName
|
||||
post_cb = NetworkUpdateClientName
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.server_name
|
||||
type = SLE_STR
|
||||
length = NETWORK_NAME_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
pre_cb = NetworkValidateServerName
|
||||
post_cb = [](auto) { UpdateClientConfigValues(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.connect_to_ip
|
||||
type = SLE_STR
|
||||
length = 0
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = nullptr
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.last_joined
|
||||
type = SLE_STR
|
||||
length = 0
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = """"
|
||||
cat = SC_EXPERT
|
86
src/table/settings/network_secrets_settings.ini
Normal file
86
src/table/settings/network_secrets_settings.ini
Normal file
@@ -0,0 +1,86 @@
|
||||
; 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/>.
|
||||
;
|
||||
|
||||
; Network settings as stored in the secrets configuration file ("secrets.cfg").
|
||||
|
||||
[pre-amble]
|
||||
static bool ReplaceAsteriskWithEmptyPassword(std::string &newval);
|
||||
|
||||
static const SettingTable _network_secrets_settings = {
|
||||
[post-amble]
|
||||
};
|
||||
[templates]
|
||||
SDTC_SSTR = SDTC_SSTR( $var, $type, $flags, $def, $length, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, nullptr),
|
||||
|
||||
[validation]
|
||||
|
||||
[defaults]
|
||||
flags = SF_NONE
|
||||
interval = 0
|
||||
str = STR_NULL
|
||||
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
|
||||
strval = STR_NULL
|
||||
pre_cb = nullptr
|
||||
post_cb = nullptr
|
||||
guiproc = nullptr
|
||||
load = nullptr
|
||||
from = SL_MIN_VERSION
|
||||
to = SL_MAX_VERSION
|
||||
cat = SC_ADVANCED
|
||||
extra = 0
|
||||
startup = false
|
||||
extver = SlXvFeatureTest()
|
||||
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.server_password
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
pre_cb = ReplaceAsteriskWithEmptyPassword
|
||||
post_cb = [](auto) { NetworkServerUpdateGameInfo(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.rcon_password
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
pre_cb = ReplaceAsteriskWithEmptyPassword
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.admin_password
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.settings_password
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
pre_cb = ReplaceAsteriskWithEmptyPassword
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.default_company_pass
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = nullptr
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.network_id
|
||||
type = SLE_STR
|
||||
length = NETWORK_SERVER_ID_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
255
src/table/settings/network_settings.ini
Normal file
255
src/table/settings/network_settings.ini
Normal file
@@ -0,0 +1,255 @@
|
||||
; 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/>.
|
||||
;
|
||||
|
||||
; Network settings as stored in the main configuration file ("openttd.cfg").
|
||||
|
||||
[pre-amble]
|
||||
static void UpdateClientConfigValues();
|
||||
|
||||
static const SettingTable _network_settings = {
|
||||
[post-amble]
|
||||
};
|
||||
[templates]
|
||||
SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, nullptr),
|
||||
SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, nullptr),
|
||||
|
||||
[validation]
|
||||
SDTC_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
|
||||
|
||||
[defaults]
|
||||
flags = SF_NONE
|
||||
interval = 0
|
||||
str = STR_NULL
|
||||
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
|
||||
strval = STR_NULL
|
||||
pre_cb = nullptr
|
||||
post_cb = nullptr
|
||||
guiproc = nullptr
|
||||
load = nullptr
|
||||
from = SL_MIN_VERSION
|
||||
to = SL_MAX_VERSION
|
||||
cat = SC_ADVANCED
|
||||
extra = 0
|
||||
startup = false
|
||||
extver = SlXvFeatureTest()
|
||||
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.sync_freq
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NOT_IN_CONFIG | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 100
|
||||
min = 0
|
||||
max = 100
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.frame_freq
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NOT_IN_CONFIG | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 0
|
||||
min = 0
|
||||
max = 100
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.commands_per_frame
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 2
|
||||
min = 1
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_commands_in_queue
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 16
|
||||
min = 1
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.bytes_per_frame
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 8
|
||||
min = 1
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.bytes_per_frame_burst
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 256
|
||||
min = 1
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_init_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 100
|
||||
min = 0
|
||||
max = 32000
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_join_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 500
|
||||
min = 0
|
||||
max = 32000
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_download_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 1000
|
||||
min = 0
|
||||
max = 32000
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_password_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 2000
|
||||
min = 0
|
||||
max = 32000
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_lag_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 500
|
||||
min = 0
|
||||
max = 32000
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.pause_on_join
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = true
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.server_port
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = NETWORK_DEFAULT_PORT
|
||||
min = 0
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.server_admin_port
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = NETWORK_ADMIN_PORT
|
||||
min = 0
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.server_admin_chat
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = true
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.server_advertise
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = false
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.autoclean_companies
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = false
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.autoclean_unprotected
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
|
||||
def = 12
|
||||
min = 0
|
||||
max = 240
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.autoclean_protected
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
|
||||
def = 36
|
||||
min = 0
|
||||
max = 240
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.autoclean_novehicles
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
|
||||
def = 0
|
||||
min = 0
|
||||
max = 240
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_companies
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 15
|
||||
min = 1
|
||||
max = MAX_COMPANIES
|
||||
post_cb = [](auto) { UpdateClientConfigValues(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_clients
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 25
|
||||
min = 2
|
||||
max = MAX_CLIENTS
|
||||
post_cb = [](auto) { UpdateClientConfigValues(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_spectators
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 15
|
||||
min = 0
|
||||
max = MAX_CLIENTS
|
||||
post_cb = [](auto) { UpdateClientConfigValues(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.restart_game_year
|
||||
type = SLE_INT32
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
|
||||
def = 0
|
||||
min = MIN_YEAR
|
||||
max = MAX_YEAR
|
||||
interval = 1
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.min_active_clients
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 0
|
||||
min = 0
|
||||
max = MAX_CLIENTS
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.reload_cfg
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = false
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.no_http_content_downloads
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = false
|
||||
cat = SC_EXPERT
|
@@ -69,9 +69,6 @@ static bool CheckSharingRoad(int32 &new_value);
|
||||
static bool CheckSharingWater(int32 &new_value);
|
||||
static bool CheckSharingAir(int32 &new_value);
|
||||
|
||||
static bool ReplaceAsteriskWithEmptyPassword(std::string &newval);
|
||||
static void UpdateClientConfigValues();
|
||||
|
||||
/* End - Callback Functions for the various settings */
|
||||
|
||||
/* Begin - xref conversion callbacks */
|
||||
@@ -5754,308 +5751,6 @@ min = 1
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.sync_freq
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NOT_IN_CONFIG | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 100
|
||||
min = 0
|
||||
max = 100
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.frame_freq
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NOT_IN_CONFIG | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 0
|
||||
min = 0
|
||||
max = 100
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.commands_per_frame
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 2
|
||||
min = 1
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_commands_in_queue
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 16
|
||||
min = 1
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.bytes_per_frame
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 8
|
||||
min = 1
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.bytes_per_frame_burst
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 256
|
||||
min = 1
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_init_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 100
|
||||
min = 0
|
||||
max = 32000
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_join_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 500
|
||||
min = 0
|
||||
max = 32000
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_download_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 1000
|
||||
min = 0
|
||||
max = 32000
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_password_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 2000
|
||||
min = 0
|
||||
max = 32000
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_lag_time
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 500
|
||||
min = 0
|
||||
max = 32000
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.pause_on_join
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = true
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.server_port
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = NETWORK_DEFAULT_PORT
|
||||
min = 0
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.server_admin_port
|
||||
type = SLE_UINT16
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = NETWORK_ADMIN_PORT
|
||||
min = 0
|
||||
max = 65535
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.server_admin_chat
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = true
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.server_advertise
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = false
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.client_name
|
||||
type = SLE_STR
|
||||
length = NETWORK_CLIENT_NAME_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = nullptr
|
||||
pre_cb = NetworkValidateClientName
|
||||
post_cb = NetworkUpdateClientName
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.server_password
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
pre_cb = ReplaceAsteriskWithEmptyPassword
|
||||
post_cb = [](auto) { NetworkServerUpdateGameInfo(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.rcon_password
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
pre_cb = ReplaceAsteriskWithEmptyPassword
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.admin_password
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.settings_password
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
pre_cb = ReplaceAsteriskWithEmptyPassword
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.default_company_pass
|
||||
type = SLE_STR
|
||||
length = NETWORK_PASSWORD_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = nullptr
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.server_name
|
||||
type = SLE_STR
|
||||
length = NETWORK_NAME_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
pre_cb = NetworkValidateServerName
|
||||
post_cb = [](auto) { UpdateClientConfigValues(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.connect_to_ip
|
||||
type = SLE_STR
|
||||
length = 0
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = nullptr
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.network_id
|
||||
type = SLE_STR
|
||||
length = NETWORK_SERVER_ID_LENGTH
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = nullptr
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.autoclean_companies
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = false
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.autoclean_unprotected
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
|
||||
def = 12
|
||||
min = 0
|
||||
max = 240
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.autoclean_protected
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
|
||||
def = 36
|
||||
min = 0
|
||||
max = 240
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.autoclean_novehicles
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
|
||||
def = 0
|
||||
min = 0
|
||||
max = 240
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_companies
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 15
|
||||
min = 1
|
||||
max = MAX_COMPANIES
|
||||
post_cb = [](auto) { UpdateClientConfigValues(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_clients
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 25
|
||||
min = 2
|
||||
max = MAX_CLIENTS
|
||||
post_cb = [](auto) { UpdateClientConfigValues(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.max_spectators
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 15
|
||||
min = 0
|
||||
max = MAX_CLIENTS
|
||||
post_cb = [](auto) { UpdateClientConfigValues(); }
|
||||
cat = SC_BASIC
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.restart_game_year
|
||||
type = SLE_INT32
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL | SF_NETWORK_ONLY
|
||||
def = 0
|
||||
min = MIN_YEAR
|
||||
max = MAX_YEAR
|
||||
interval = 1
|
||||
|
||||
[SDTC_VAR]
|
||||
var = network.min_active_clients
|
||||
type = SLE_UINT8
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = 0
|
||||
min = 0
|
||||
max = MAX_CLIENTS
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.reload_cfg
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_NETWORK_ONLY
|
||||
def = false
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_SSTR]
|
||||
var = network.last_joined
|
||||
type = SLE_STR
|
||||
length = 0
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = """"
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDTC_BOOL]
|
||||
var = network.no_http_content_downloads
|
||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
|
||||
def = false
|
||||
cat = SC_EXPERT
|
||||
|
||||
[SDT_BOOL]
|
||||
var = vehicle.pay_for_repair
|
||||
def = true
|
||||
|
65
src/tgp.cpp
65
src/tgp.cpp
@@ -161,11 +161,10 @@ static const int amplitude_decimal_bits = 10;
|
||||
/** Height map - allocated array of heights (MapSizeX() + 1) x (MapSizeY() + 1) */
|
||||
struct HeightMap
|
||||
{
|
||||
height_t *h; //< array of heights
|
||||
std::vector<height_t> h; //< array of heights
|
||||
/* Even though the sizes are always positive, there are many cases where
|
||||
* X and Y need to be signed integers due to subtractions. */
|
||||
int dim_x; //< height map size_x MapSizeX() + 1
|
||||
int total_size; //< height map total size
|
||||
int size_x; //< MapSizeX()
|
||||
int size_y; //< MapSizeY()
|
||||
|
||||
@@ -182,7 +181,7 @@ struct HeightMap
|
||||
};
|
||||
|
||||
/** Global height map instance */
|
||||
static HeightMap _height_map = {nullptr, 0, 0, 0, 0};
|
||||
static HeightMap _height_map = { {}, 0, 0, 0 };
|
||||
|
||||
/** Conversion: int to height_t */
|
||||
#define I2H(i) ((i) << height_decimal_bits)
|
||||
@@ -197,10 +196,6 @@ static HeightMap _height_map = {nullptr, 0, 0, 0, 0};
|
||||
/** Conversion: amplitude_t to height_t */
|
||||
#define A2H(a) ((a) >> (amplitude_decimal_bits - height_decimal_bits))
|
||||
|
||||
|
||||
/** Walk through all items of _height_map.h */
|
||||
#define FOR_ALL_TILES_IN_HEIGHT(h) for (h = _height_map.h; h < &_height_map.h[_height_map.total_size]; h++)
|
||||
|
||||
/** Maximum number of TGP noise frequencies. */
|
||||
static const int MAX_TGP_FREQUENCIES = 10;
|
||||
|
||||
@@ -326,18 +321,15 @@ static inline bool IsValidXY(int x, int y)
|
||||
*/
|
||||
static inline bool AllocHeightMap()
|
||||
{
|
||||
height_t *h;
|
||||
assert(_height_map.h.empty());
|
||||
|
||||
_height_map.size_x = MapSizeX();
|
||||
_height_map.size_y = MapSizeY();
|
||||
|
||||
/* Allocate memory block for height map row pointers */
|
||||
_height_map.total_size = (_height_map.size_x + 1) * (_height_map.size_y + 1);
|
||||
size_t total_size = (_height_map.size_x + 1) * (_height_map.size_y + 1);
|
||||
_height_map.dim_x = _height_map.size_x + 1;
|
||||
_height_map.h = CallocT<height_t>(_height_map.total_size);
|
||||
|
||||
/* Iterate through height map and initialise values. */
|
||||
FOR_ALL_TILES_IN_HEIGHT(h) *h = 0;
|
||||
_height_map.h.resize(total_size);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -345,8 +337,7 @@ static inline bool AllocHeightMap()
|
||||
/** Free height map */
|
||||
static inline void FreeHeightMap()
|
||||
{
|
||||
free(_height_map.h);
|
||||
_height_map.h = nullptr;
|
||||
_height_map.h.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -370,7 +361,7 @@ static inline height_t RandomHeight(amplitude_t rMax)
|
||||
static void HeightMapGenerate()
|
||||
{
|
||||
/* Trying to apply noise to uninitialized height map */
|
||||
assert(_height_map.h != nullptr);
|
||||
assert(!_height_map.h.empty());
|
||||
|
||||
int start = std::max(MAX_TGP_FREQUENCIES - (int)std::min(MapLogX(), MapLogY()), 0);
|
||||
bool first = true;
|
||||
@@ -429,15 +420,15 @@ static void HeightMapGenerate()
|
||||
/** Returns min, max and average height from height map */
|
||||
static void HeightMapGetMinMaxAvg(height_t *min_ptr, height_t *max_ptr, height_t *avg_ptr)
|
||||
{
|
||||
height_t h_min, h_max, h_avg, *h;
|
||||
height_t h_min, h_max, h_avg;
|
||||
int64 h_accu = 0;
|
||||
h_min = h_max = _height_map.height(0, 0);
|
||||
|
||||
/* Get h_min, h_max and accumulate heights into h_accu */
|
||||
FOR_ALL_TILES_IN_HEIGHT(h) {
|
||||
if (*h < h_min) h_min = *h;
|
||||
if (*h > h_max) h_max = *h;
|
||||
h_accu += *h;
|
||||
for (const height_t &h : _height_map.h) {
|
||||
if (h < h_min) h_min = h;
|
||||
if (h > h_max) h_max = h;
|
||||
h_accu += h;
|
||||
}
|
||||
|
||||
/* Get average height */
|
||||
@@ -453,13 +444,12 @@ static void HeightMapGetMinMaxAvg(height_t *min_ptr, height_t *max_ptr, height_t
|
||||
static int *HeightMapMakeHistogram(height_t h_min, height_t h_max, int *hist_buf)
|
||||
{
|
||||
int *hist = hist_buf - h_min;
|
||||
height_t *h;
|
||||
|
||||
/* Count the heights and fill the histogram */
|
||||
FOR_ALL_TILES_IN_HEIGHT(h) {
|
||||
assert(*h >= h_min);
|
||||
assert(*h <= h_max);
|
||||
hist[*h]++;
|
||||
for (const height_t &h : _height_map.h){
|
||||
assert(h >= h_min);
|
||||
assert(h <= h_max);
|
||||
hist[h]++;
|
||||
}
|
||||
return hist;
|
||||
}
|
||||
@@ -467,15 +457,13 @@ static int *HeightMapMakeHistogram(height_t h_min, height_t h_max, int *hist_buf
|
||||
/** Applies sine wave redistribution onto height map */
|
||||
static void HeightMapSineTransform(height_t h_min, height_t h_max)
|
||||
{
|
||||
height_t *h;
|
||||
|
||||
FOR_ALL_TILES_IN_HEIGHT(h) {
|
||||
for (height_t &h : _height_map.h) {
|
||||
double fheight;
|
||||
|
||||
if (*h < h_min) continue;
|
||||
if (h < h_min) continue;
|
||||
|
||||
/* Transform height into 0..1 space */
|
||||
fheight = (double)(*h - h_min) / (double)(h_max - h_min);
|
||||
fheight = (double)(h - h_min) / (double)(h_max - h_min);
|
||||
/* Apply sine transform depending on landscape type */
|
||||
switch (_settings_game.game_creation.landscape) {
|
||||
case LT_TOYLAND:
|
||||
@@ -535,9 +523,9 @@ static void HeightMapSineTransform(height_t h_min, height_t h_max)
|
||||
break;
|
||||
}
|
||||
/* Transform it back into h_min..h_max space */
|
||||
*h = (height_t)(fheight * (h_max - h_min) + h_min);
|
||||
if (*h < 0) *h = I2H(0);
|
||||
if (*h >= h_max) *h = h_max - 1;
|
||||
h = (height_t)(fheight * (h_max - h_min) + h_min);
|
||||
if (h < 0) h = I2H(0);
|
||||
if (h >= h_max) h = h_max - 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -690,7 +678,6 @@ static void HeightMapAdjustWaterLevel(amplitude_t water_percent, height_t h_max_
|
||||
{
|
||||
height_t h_min, h_max, h_avg, h_water_level;
|
||||
int64 water_tiles, desired_water_tiles;
|
||||
height_t *h;
|
||||
int *hist;
|
||||
|
||||
HeightMapGetMinMaxAvg(&h_min, &h_max, &h_avg);
|
||||
@@ -715,12 +702,12 @@ static void HeightMapAdjustWaterLevel(amplitude_t water_percent, height_t h_max_
|
||||
* values from range: h_water_level..h_max are transformed into 0..h_max_new
|
||||
* where h_max_new is depending on terrain type and map size.
|
||||
*/
|
||||
FOR_ALL_TILES_IN_HEIGHT(h) {
|
||||
for (height_t &h : _height_map.h) {
|
||||
/* Transform height from range h_water_level..h_max into 0..h_max_new range */
|
||||
*h = (height_t)(((int)h_max_new) * (*h - h_water_level) / (h_max - h_water_level)) + I2H(1);
|
||||
h = (height_t)(((int)h_max_new) * (h - h_water_level) / (h_max - h_water_level)) + I2H(1);
|
||||
/* Make sure all values are in the proper range (0..h_max_new) */
|
||||
if (*h < 0) *h = I2H(0);
|
||||
if (*h >= h_max_new) *h = h_max_new - 1;
|
||||
if (h < 0) h = I2H(0);
|
||||
if (h >= h_max_new) h = h_max_new - 1;
|
||||
}
|
||||
|
||||
free(hist_buf);
|
||||
|
@@ -4112,8 +4112,7 @@ void UpdateAllTownRatings()
|
||||
if (Company::IsValidID(_local_company) && HasBit(t->have_ratings, _local_company) && t->ratings[_local_company] <= 0) {
|
||||
ZoningTownAuthorityRatingChange();
|
||||
}
|
||||
uint8 c;
|
||||
FOR_EACH_SET_BIT(c, t->have_ratings) {
|
||||
for (uint8 c : SetBitIterator(t->have_ratings)) {
|
||||
t->ratings[c] = RATING_MAXIMUM;
|
||||
}
|
||||
if (t->have_ratings != 0) {
|
||||
|
@@ -91,8 +91,7 @@ private:
|
||||
static int GetNthSetBit(uint32 bits, int n)
|
||||
{
|
||||
if (n >= 0) {
|
||||
uint i;
|
||||
FOR_EACH_SET_BIT(i, bits) {
|
||||
for (uint i : SetBitIterator(bits)) {
|
||||
n--;
|
||||
if (n < 0) return i;
|
||||
}
|
||||
|
@@ -563,12 +563,12 @@ static const TraceRestrictDropDownListSet *GetSortedCargoTypeDropDownListSet()
|
||||
cargo_list_str, cargo_list_id,
|
||||
};
|
||||
|
||||
for (size_t i = 0; i < _sorted_standard_cargo_specs_size; ++i) {
|
||||
for (size_t i = 0; i < _sorted_standard_cargo_specs.size(); ++i) {
|
||||
const CargoSpec *cs = _sorted_cargo_specs[i];
|
||||
cargo_list_str[i] = cs->name;
|
||||
cargo_list_id[i] = cs->Index();
|
||||
}
|
||||
cargo_list_str[_sorted_standard_cargo_specs_size] = INVALID_STRING_ID;
|
||||
cargo_list_str[_sorted_standard_cargo_specs.size()] = INVALID_STRING_ID;
|
||||
|
||||
return &cargo_list;
|
||||
}
|
||||
|
@@ -15,16 +15,7 @@
|
||||
#include "direction_func.h"
|
||||
#include "slope_func.h"
|
||||
|
||||
/**
|
||||
* Iterate through each set Track in a TrackBits value.
|
||||
* For more information see FOR_EACH_SET_BIT_EX.
|
||||
*
|
||||
* @param var Loop index variable that stores fallowing set track. Must be of type Track.
|
||||
* @param track_bits The value to iterate through (any expression).
|
||||
*
|
||||
* @see FOR_EACH_SET_BIT_EX
|
||||
*/
|
||||
#define FOR_EACH_SET_TRACK(var, track_bits) FOR_EACH_SET_BIT_EX(Track, var, TrackBits, track_bits)
|
||||
using SetTrackBitIterator = SetBitIterator<Track, TrackBits>;
|
||||
|
||||
/**
|
||||
* Checks if a Track is valid.
|
||||
|
@@ -5876,8 +5876,7 @@ static void DeleteLastWagon(Train *v)
|
||||
|
||||
/* It is important that these two are the first in the loop, as reservation cannot deal with every trackbit combination */
|
||||
assert(TRACK_BEGIN == TRACK_X && TRACK_Y == TRACK_BEGIN + 1);
|
||||
Track t;
|
||||
FOR_EACH_SET_TRACK(t, remaining_trackbits) TryReserveRailTrack(tile, t);
|
||||
for (Track t : SetTrackBitIterator(remaining_trackbits)) TryReserveRailTrack(tile, t);
|
||||
}
|
||||
|
||||
/* check if the wagon was on a road/rail-crossing */
|
||||
|
@@ -356,8 +356,7 @@ void BaseVehicleListWindow::SetCargoFilterArray()
|
||||
filter_items++;
|
||||
|
||||
/* Collect available cargo types for filtering. */
|
||||
const CargoSpec *cs;
|
||||
FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) {
|
||||
for (const CargoSpec *cs : _sorted_standard_cargo_specs) {
|
||||
this->cargo_filter[filter_items] = cs->Index();
|
||||
this->cargo_filter_texts[filter_items] = cs->name;
|
||||
filter_items++;
|
||||
|
@@ -1288,8 +1288,7 @@ void TileLoop_Water(TileIndex tile)
|
||||
|
||||
case FLOOD_DRYUP: {
|
||||
Slope slope_here = GetFoundationSlope(tile) & ~SLOPE_HALFTILE_MASK & ~SLOPE_STEEP;
|
||||
uint dir;
|
||||
FOR_EACH_SET_BIT(dir, _flood_from_dirs[slope_here]) {
|
||||
for (uint dir : SetBitIterator(_flood_from_dirs[slope_here])) {
|
||||
TileIndex dest = tile + TileOffsByDir((Direction)dir);
|
||||
if (!IsValidTile(dest)) continue;
|
||||
|
||||
@@ -1327,8 +1326,7 @@ void ConvertGroundTilesIntoWaterTiles()
|
||||
break;
|
||||
|
||||
default:
|
||||
uint dir;
|
||||
FOR_EACH_SET_BIT(dir, _flood_from_dirs[slope & ~SLOPE_STEEP]) {
|
||||
for (uint dir : SetBitIterator(_flood_from_dirs[slope & ~SLOPE_STEEP])) {
|
||||
TileIndex dest = TileAddByDir(tile, (Direction)dir);
|
||||
Slope slope_dest = GetTileSlope(dest) & ~SLOPE_STEEP;
|
||||
if (slope_dest == SLOPE_FLAT || IsSlopeWithOneCornerRaised(slope_dest)) {
|
||||
|
@@ -143,13 +143,12 @@ int16 WindowDesc::GetDefaultHeight() const
|
||||
*/
|
||||
void WindowDesc::LoadFromConfig()
|
||||
{
|
||||
IniFile *ini = new IniFile();
|
||||
ini->LoadFromDisk(_windows_file, NO_DIRECTORY);
|
||||
IniFile ini;
|
||||
ini.LoadFromDisk(_windows_file, NO_DIRECTORY);
|
||||
for (WindowDesc *wd : *_window_descs) {
|
||||
if (wd->ini_key == nullptr) continue;
|
||||
IniLoadWindowSettings(ini, wd->ini_key, wd);
|
||||
}
|
||||
delete ini;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -169,14 +168,13 @@ void WindowDesc::SaveToConfig()
|
||||
/* Sort the stuff to get a nice ini file on first write */
|
||||
std::sort(_window_descs->begin(), _window_descs->end(), DescSorter);
|
||||
|
||||
IniFile *ini = new IniFile();
|
||||
ini->LoadFromDisk(_windows_file, NO_DIRECTORY);
|
||||
IniFile ini;
|
||||
ini.LoadFromDisk(_windows_file, NO_DIRECTORY);
|
||||
for (WindowDesc *wd : *_window_descs) {
|
||||
if (wd->ini_key == nullptr) continue;
|
||||
IniSaveWindowSettings(ini, wd->ini_key, wd);
|
||||
}
|
||||
ini->SaveToDisk(_windows_file);
|
||||
delete ini;
|
||||
ini.SaveToDisk(_windows_file);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user