Merge branch 'master' into jgrpp
# Conflicts: # src/build_vehicle_gui.cpp # src/cheat_gui.cpp # src/console_cmds.cpp # src/crashlog.cpp # src/date_gui.cpp # src/engine.cpp # src/group_cmd.cpp # src/landscape.cpp # src/network/network_gui.cpp # src/newgrf.cpp # src/saveload/afterload.cpp # src/script/api/script_date.cpp # src/sl/oldloader_sl.cpp # src/station_cmd.cpp # src/station_cmd.h # src/strings.cpp # src/subsidy_gui.cpp # src/survey.cpp # src/timer/timer_game_calendar.cpp # src/timer/timer_game_calendar.h
This commit is contained in:
@@ -1128,8 +1128,7 @@ void TestedEngineDetails::FillDefaultCapacities(const Engine *e)
|
||||
int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number, TestedEngineDetails &te)
|
||||
{
|
||||
const Engine *e = Engine::Get(engine_number);
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(e->intro_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(e->intro_date);
|
||||
bool refittable = IsArticulatedVehicleRefittable(engine_number);
|
||||
bool articulated_cargo = false;
|
||||
|
||||
|
@@ -108,8 +108,7 @@ static int32 ClickChangeDateCheat(int32 p1, int32 p2)
|
||||
p1 = Clamp(p1, MIN_YEAR, MAX_YEAR);
|
||||
if (p1 == _cur_year) return _cur_year;
|
||||
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(_date);
|
||||
Date new_date = ConvertYMDToDate(p1, ymd.month, ymd.day);
|
||||
|
||||
/* Shift cached dates. */
|
||||
|
@@ -665,8 +665,7 @@ static void DumpSubCommandLogEntry(char *&buffer, const char *last, const Comman
|
||||
return (entry.log_flags & CLEF_SCRIPT_ASYNC) ? 'A' : 'a';
|
||||
};
|
||||
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(entry.date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(entry.date);
|
||||
buffer += seprintf(buffer, last, "%4i-%02i-%02i, %2i, %3i", ymd.year, ymd.month + 1, ymd.day, entry.date_fract, entry.tick_skip_counter);
|
||||
if (_networking) {
|
||||
buffer += seprintf(buffer, last, ", %08X", entry.frame_counter);
|
||||
|
@@ -1060,6 +1060,20 @@ CommandCost CmdSetCompanyManagerFace(TileIndex tile, DoCommandFlag flags, uint32
|
||||
return CommandCost();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update liveries for a company. This is called when the LS_DEFAULT scheme is changed, to update schemes with colours
|
||||
* set to default.
|
||||
* @param c Company to update.
|
||||
*/
|
||||
void UpdateCompanyLiveries(Company *c)
|
||||
{
|
||||
for (int i = 1; i < LS_END; i++) {
|
||||
if (!HasBit(c->livery[i].in_use, 0)) c->livery[i].colour1 = c->livery[LS_DEFAULT].colour1;
|
||||
if (!HasBit(c->livery[i].in_use, 1)) c->livery[i].colour2 = c->livery[LS_DEFAULT].colour2;
|
||||
}
|
||||
UpdateCompanyGroupLiveries(c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the company's company-colour
|
||||
* @param tile unused
|
||||
@@ -1100,9 +1114,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||
/* If setting the first colour of the default scheme, adjust the
|
||||
* original and cached company colours too. */
|
||||
if (scheme == LS_DEFAULT) {
|
||||
for (int i = 1; i < LS_END; i++) {
|
||||
if (!HasBit(c->livery[i].in_use, 0)) c->livery[i].colour1 = colour;
|
||||
}
|
||||
UpdateCompanyLiveries(c);
|
||||
_company_colours[_current_company] = colour;
|
||||
c->colour = colour;
|
||||
CompanyAdminUpdate(c);
|
||||
@@ -1113,9 +1125,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||
c->livery[scheme].colour2 = colour;
|
||||
|
||||
if (scheme == LS_DEFAULT) {
|
||||
for (int i = 1; i < LS_END; i++) {
|
||||
if (!HasBit(c->livery[i].in_use, 1)) c->livery[i].colour2 = colour;
|
||||
}
|
||||
UpdateCompanyGroupLiveries(c);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -24,6 +24,7 @@ void ShowBuyCompanyDialog(CompanyID company, bool hostile_takeover);
|
||||
void CompanyAdminUpdate(const Company *company);
|
||||
void CompanyAdminBankrupt(CompanyID company_id);
|
||||
void UpdateLandscapingLimits();
|
||||
void UpdateCompanyLiveries(Company *c);
|
||||
|
||||
bool CheckCompanyHasMoney(CommandCost &cost);
|
||||
void SubtractMoneyFromCompany(const CommandCost& cost);
|
||||
|
@@ -931,18 +931,18 @@ public:
|
||||
int y = ir.top;
|
||||
|
||||
/* Helper function to draw livery info. */
|
||||
auto draw_livery = [&](StringID str, const Livery &liv, bool sel, bool def, int indent) {
|
||||
auto draw_livery = [&](StringID str, const Livery &livery, bool is_selected, bool is_default_scheme, int indent) {
|
||||
/* Livery Label. */
|
||||
DrawString(sch.left + (rtl ? 0 : indent), sch.right - (rtl ? indent : 0), y + text_offs, str, sel ? TC_WHITE : TC_BLACK);
|
||||
DrawString(sch.left + (rtl ? 0 : indent), sch.right - (rtl ? indent : 0), y + text_offs, str, is_selected ? TC_WHITE : TC_BLACK);
|
||||
|
||||
/* Text below the first dropdown. */
|
||||
DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(liv.colour1), pri_squ.left, y + square_offs);
|
||||
DrawString(pri.left, pri.right, y + text_offs, (def || HasBit(liv.in_use, 0)) ? STR_COLOUR_DARK_BLUE + liv.colour1 : STR_COLOUR_DEFAULT, sel ? TC_WHITE : TC_GOLD);
|
||||
DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(livery.colour1), pri_squ.left, y + square_offs);
|
||||
DrawString(pri.left, pri.right, y + text_offs, (is_default_scheme || HasBit(livery.in_use, 0)) ? STR_COLOUR_DARK_BLUE + livery.colour1 : STR_COLOUR_DEFAULT, is_selected ? TC_WHITE : TC_GOLD);
|
||||
|
||||
/* Text below the second dropdown. */
|
||||
if (sec.right > sec.left) { // Second dropdown has non-zero size.
|
||||
DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(liv.colour2), sec_squ.left, y + square_offs);
|
||||
DrawString(sec.left, sec.right, y + text_offs, (def || HasBit(liv.in_use, 1)) ? STR_COLOUR_DARK_BLUE + liv.colour2 : STR_COLOUR_DEFAULT, sel ? TC_WHITE : TC_GOLD);
|
||||
DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(livery.colour2), sec_squ.left, y + square_offs);
|
||||
DrawString(sec.left, sec.right, y + text_offs, (is_default_scheme || HasBit(livery.in_use, 1)) ? STR_COLOUR_DARK_BLUE + livery.colour2 : STR_COLOUR_DEFAULT, is_selected ? TC_WHITE : TC_GOLD);
|
||||
}
|
||||
|
||||
y += this->line_height;
|
||||
@@ -962,9 +962,8 @@ public:
|
||||
uint max = static_cast<uint>(std::min<size_t>(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.size()));
|
||||
for (uint i = this->vscroll->GetPosition(); i < max; ++i) {
|
||||
const Group *g = this->groups[i];
|
||||
const bool livery_set = HasBit(g->livery.in_use, 0);
|
||||
SetDParam(0, g->index);
|
||||
draw_livery(STR_GROUP_NAME, livery_set ? g->livery : c->livery[LS_DEFAULT], this->sel == g->index, livery_set, this->indents[i] * WidgetDimensions::scaled.hsep_indent);
|
||||
draw_livery(STR_GROUP_NAME, g->livery, this->sel == g->index, false, this->indents[i] * WidgetDimensions::scaled.hsep_indent);
|
||||
}
|
||||
|
||||
if (this->vscroll->GetCount() == 0) {
|
||||
|
@@ -2738,10 +2738,8 @@ DEF_CONSOLE_CMD(ConDumpLinkgraphJobs)
|
||||
|
||||
IConsolePrintF(CC_DEFAULT, PRINTF_SIZE " link graph jobs", LinkGraphJob::GetNumItems());
|
||||
for (const LinkGraphJob *lgj : LinkGraphJob::Iterate()) {
|
||||
YearMonthDay start_ymd;
|
||||
ConvertDateToYMD(lgj->StartDateTicks().ToDate(), &start_ymd);
|
||||
YearMonthDay join_ymd;
|
||||
ConvertDateToYMD(lgj->JoinDateTicks().ToDate(), &join_ymd);
|
||||
YearMonthDay start_ymd = ConvertDateToYMD(lgj->StartDateTicks().ToDate());
|
||||
YearMonthDay join_ymd = ConvertDateToYMD(lgj->JoinDateTicks().ToDate());
|
||||
IConsolePrintF(CC_DEFAULT, " Job: %5u, nodes: %u, cost: " OTTD_PRINTF64U ", start: (%u, %4i-%02i-%02i, %i), end: (%u, %4i-%02i-%02i, %i), duration: %u",
|
||||
lgj->index, lgj->Graph().Size(), lgj->Graph().CalculateCostEstimate(),
|
||||
lgj->StartDateTicks().base(), start_ymd.year, start_ymd.month + 1, start_ymd.day, lgj->StartDateTicks().ToDateFractRemainder(),
|
||||
|
@@ -484,8 +484,7 @@ char *CrashLog::LogRecentNews(char *buffer, const char *last) const
|
||||
|
||||
int i = 0;
|
||||
for (NewsItem *news = _latest_news; i < 32 && news != nullptr; news = news->prev, i++) {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(news->date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(news->date);
|
||||
buffer += seprintf(buffer, last, "(%i-%02i-%02i) StringID: %u, Type: %u, Ref1: %u, %u, Ref2: %u, %u\n",
|
||||
ymd.year, ymd.month + 1, ymd.day, news->string_id, news->type,
|
||||
news->reftype1, news->ref1, news->reftype2, news->ref2);
|
||||
@@ -665,8 +664,7 @@ char *CrashLog::FillDesyncCrashLog(char *buffer, const char *last, const DesyncE
|
||||
extern uint8 _last_sync_tick_skip_counter;
|
||||
extern uint32 _last_sync_frame_counter;
|
||||
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(_last_sync_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(_last_sync_date);
|
||||
buffer += seprintf(buffer, last, "Last sync at: %i-%02i-%02i (%i, %i), %08X\n",
|
||||
ymd.year, ymd.month + 1, ymd.day, _last_sync_date_fract, _last_sync_tick_skip_counter, _last_sync_frame_counter);
|
||||
}
|
||||
@@ -731,8 +729,7 @@ char *CrashLog::FillInconsistencyLog(char *buffer, const char *last, const Incon
|
||||
extern uint8 _last_sync_tick_skip_counter;
|
||||
extern uint32 _last_sync_frame_counter;
|
||||
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(_last_sync_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(_last_sync_date);
|
||||
buffer += seprintf(buffer, last, "Last sync at: %i-%02i-%02i (%i, %i), %08X\n",
|
||||
ymd.year, ymd.month + 1, ymd.day, _last_sync_date_fract, _last_sync_tick_skip_counter, _last_sync_frame_counter);
|
||||
}
|
||||
|
18
src/date.cpp
18
src/date.cpp
@@ -90,11 +90,9 @@ void SetDate(Date date, DateFract fract, bool preserve_scaled_ticks)
|
||||
{
|
||||
assert(fract < DAY_TICKS);
|
||||
|
||||
YearMonthDay ymd;
|
||||
|
||||
_date = date;
|
||||
_date_fract = fract;
|
||||
ConvertDateToYMD(date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(date);
|
||||
_cur_date_ymd = ymd;
|
||||
if (preserve_scaled_ticks) {
|
||||
RebaseScaledDateTicksBase();
|
||||
@@ -153,7 +151,7 @@ static const uint16 _accum_days_for_month[] = {
|
||||
* @param date the date to convert from
|
||||
* @param ymd the year, month and day to write to
|
||||
*/
|
||||
void ConvertDateToYMD(Date date, YearMonthDay *ymd)
|
||||
YearMonthDay ConvertDateToYMD(Date date)
|
||||
{
|
||||
/* Year determination in multiple steps to account for leap
|
||||
* years. First do the large steps, then the smaller ones.
|
||||
@@ -195,11 +193,14 @@ void ConvertDateToYMD(Date date, YearMonthDay *ymd)
|
||||
/* Skip the 29th of February in non-leap years */
|
||||
if (!IsLeapYear(yr) && rem >= ACCUM_MAR - 1) rem++;
|
||||
|
||||
ymd->year = yr;
|
||||
YearMonthDay ymd;
|
||||
ymd.year = yr;
|
||||
|
||||
x = _month_date_from_year_day[rem];
|
||||
ymd->month = x >> 5;
|
||||
ymd->day = x & 0x1F;
|
||||
ymd.month = x >> 5;
|
||||
ymd.day = x & 0x1F;
|
||||
|
||||
return ymd;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -345,8 +346,7 @@ void IncreaseDate()
|
||||
/* increase day counter */
|
||||
_date++;
|
||||
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(_date);
|
||||
|
||||
/* check if we entered a new month? */
|
||||
bool new_month = ymd.month != _cur_date_ymd.month;
|
||||
|
@@ -29,7 +29,7 @@ extern DateFract _game_load_date_fract;
|
||||
extern uint8 _game_load_tick_skip_counter;
|
||||
|
||||
void SetDate(Date date, DateFract fract, bool preserve_scaled_ticks = true);
|
||||
void ConvertDateToYMD(Date date, YearMonthDay *ymd);
|
||||
YearMonthDay ConvertDateToYMD(Date date);
|
||||
Date ConvertYMDToDate(Year year, Month month, Day day);
|
||||
void SetScaledTickVariables();
|
||||
|
||||
|
@@ -57,7 +57,7 @@ struct SetDateWindow : Window {
|
||||
this->FinishInitNested(window_number);
|
||||
|
||||
if (initial_date == 0) initial_date = _date;
|
||||
ConvertDateToYMD(initial_date, &this->date);
|
||||
this->date = ConvertDateToYMD(initial_date);
|
||||
this->date.year = Clamp(this->date.year, min_year, max_year);
|
||||
}
|
||||
|
||||
|
@@ -399,13 +399,11 @@ void ClearDesyncMsgLog()
|
||||
char *DumpDesyncMsgLog(char *buffer, const char *last)
|
||||
{
|
||||
buffer = _desync_msg_log.Dump(buffer, last, "Desync Msg Log", [](int display_num, char *buffer, const char *last, const DesyncMsgLogEntry &entry) -> int {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(entry.date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(entry.date);
|
||||
return seprintf(buffer, last, "%5u | %4i-%02i-%02i, %2i, %3i | %s\n", display_num, ymd.year, ymd.month + 1, ymd.day, entry.date_fract, entry.tick_skip_counter, entry.msg.c_str());
|
||||
});
|
||||
buffer = _remote_desync_msg_log.Dump(buffer, last, "Remote Client Desync Msg Log", [](int display_num, char *buffer, const char *last, const DesyncMsgLogEntry &entry) -> int {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(entry.date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(entry.date);
|
||||
return seprintf(buffer, last, "%5u | Client %5u | %4i-%02i-%02i, %2i, %3i | %s\n", display_num, entry.src_id, ymd.year, ymd.month + 1, ymd.day, entry.date_fract, entry.tick_skip_counter, entry.msg.c_str());
|
||||
});
|
||||
return buffer;
|
||||
|
@@ -651,8 +651,7 @@ static void ClearLastVariant(EngineID engine_id, VehicleType type)
|
||||
static void RetireEngineIfPossible(Engine *e, int age_threshold)
|
||||
{
|
||||
if (_settings_game.vehicle.no_expire_vehicles_after > 0) {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(e->intro_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(e->intro_date);
|
||||
if ((ymd.year * 12) + ymd.month + age_threshold >= _settings_game.vehicle.no_expire_vehicles_after * 12) return;
|
||||
}
|
||||
|
||||
@@ -725,8 +724,7 @@ void SetYearEngineAgingStops()
|
||||
if (e->type == VEH_TRAIN && e->u.rail.railveh_type == RAILVEH_WAGON) continue;
|
||||
|
||||
/* Base year ending date on half the model life */
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(ei->base_intro + (static_cast<int32_t>(ei->lifelength) * DAYS_IN_LEAP_YEAR) / 2, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(ei->base_intro + (static_cast<int32_t>(ei->lifelength) * DAYS_IN_LEAP_YEAR) / 2);
|
||||
|
||||
_year_engine_aging_stops = std::max(_year_engine_aging_stops, ymd.year);
|
||||
}
|
||||
@@ -779,14 +777,25 @@ void StartupOneEngine(Engine *e, Date aging_date, uint32 seed, Date no_introduce
|
||||
e->type ^
|
||||
e->GetGRFID());
|
||||
|
||||
r = Random();
|
||||
e->reliability_start = GB(r, 16, 14) + 0x7AE0;
|
||||
e->reliability_max = GB(r, 0, 14) + 0xBFFF;
|
||||
/* Base reliability defined as a percentage of UINT16_MAX. */
|
||||
const uint16_t RELIABILITY_START = UINT16_MAX * 48 / 100;
|
||||
const uint16_t RELIABILITY_MAX = UINT16_MAX * 75 / 100;
|
||||
const uint16_t RELIABILITY_FINAL = UINT16_MAX * 25 / 100;
|
||||
|
||||
static_assert(RELIABILITY_START == 0x7AE0);
|
||||
static_assert(RELIABILITY_MAX == 0xBFFF);
|
||||
static_assert(RELIABILITY_FINAL == 0x3FFF);
|
||||
|
||||
r = Random();
|
||||
e->reliability_final = GB(r, 16, 14) + 0x3FFF;
|
||||
/* 14 bits gives a value between 0 and 16383, which is up to an additional 25%p reliability on top of the base reliability. */
|
||||
e->reliability_start = GB(r, 16, 14) + RELIABILITY_START;
|
||||
e->reliability_max = GB(r, 0, 14) + RELIABILITY_MAX;
|
||||
|
||||
r = Random();
|
||||
e->reliability_final = GB(r, 16, 14) + RELIABILITY_FINAL;
|
||||
|
||||
e->duration_phase_1 = GB(r, 0, 5) + 7;
|
||||
e->duration_phase_2 = GB(r, 5, 4) + ei->base_life * 12 - 96;
|
||||
e->duration_phase_2 = std::max(0, int(GB(r, 5, 4)) + ei->base_life * 12 - 96);
|
||||
e->duration_phase_3 = GB(r, 9, 7) + 120;
|
||||
|
||||
RestoreRandomSeeds(saved_seeds);
|
||||
|
@@ -90,8 +90,7 @@ char *DumpSpecialEventsLog(char *buffer, const char *last)
|
||||
}
|
||||
const SpecialEventLogEntry &entry = _special_event_log.log[log_index];
|
||||
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(entry.date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(entry.date);
|
||||
buffer += seprintf(buffer, last, " %3u | %4i-%02i-%02i, %2i, %3i | cc: %3u, lc: %3u | %s\n",
|
||||
i, ymd.year, ymd.month + 1, ymd.day, entry.date_fract, entry.tick_skip_counter, (uint) entry.current_company, (uint) entry.local_company, entry.msg.c_str());
|
||||
}
|
||||
|
@@ -117,6 +117,7 @@ void SetTrainGroupID(Train *v, GroupID grp);
|
||||
void UpdateTrainGroupID(Train *v);
|
||||
void RemoveAllGroupsForCompany(const CompanyID company);
|
||||
bool GroupIsInGroup(GroupID search, GroupID group);
|
||||
void UpdateCompanyGroupLiveries(const Company *c);
|
||||
|
||||
std::string GenerateAutoNameForVehicleGroup(const Vehicle *v);
|
||||
|
||||
|
@@ -320,26 +320,48 @@ void IterateDescendantsOfGroup(GroupID id_top, F func)
|
||||
/**
|
||||
* Propagate a livery change to a group's children.
|
||||
* @param g Group.
|
||||
* Propagate a livery change to a group's children, and optionally update cached vehicle colourmaps.
|
||||
* @param g Group to propagate colours to children.
|
||||
* @param reset_cache Reset colourmap of vehicles in this group.
|
||||
*/
|
||||
void PropagateChildLivery(const Group *g)
|
||||
static void PropagateChildLivery(const Group *g, bool reset_cache)
|
||||
{
|
||||
/* Company colour data is indirectly cached. */
|
||||
for (Vehicle *v : Vehicle::Iterate()) {
|
||||
if (v->group_id == g->index && (!v->IsGroundVehicle() || v->IsFrontEngine())) {
|
||||
for (Vehicle *u = v; u != nullptr; u = u->Next()) {
|
||||
u->colourmap = PAL_NONE;
|
||||
u->InvalidateNewGRFCache();
|
||||
u->InvalidateImageCache();
|
||||
if (reset_cache) {
|
||||
/* Company colour data is indirectly cached. */
|
||||
for (Vehicle *v : Vehicle::Iterate()) {
|
||||
if (v->group_id == g->index && (!v->IsGroundVehicle() || v->IsFrontEngine())) {
|
||||
for (Vehicle *u = v; u != nullptr; u = u->Next()) {
|
||||
u->colourmap = PAL_NONE;
|
||||
u->InvalidateNewGRFCache();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IterateDescendantsOfGroup(g, [&](Group *cg) {
|
||||
if (!HasBit(cg->livery.in_use, 0)) cg->livery.colour1 = g->livery.colour1;
|
||||
if (!HasBit(cg->livery.in_use, 1)) cg->livery.colour2 = g->livery.colour2;
|
||||
});
|
||||
for (Group *cg : Group::Iterate()) {
|
||||
if (cg->parent == g->index) {
|
||||
if (!HasBit(cg->livery.in_use, 0)) cg->livery.colour1 = g->livery.colour1;
|
||||
if (!HasBit(cg->livery.in_use, 1)) cg->livery.colour2 = g->livery.colour2;
|
||||
PropagateChildLivery(cg, reset_cache);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update group liveries for a company. This is called when the LS_DEFAULT scheme is changed, to update groups with
|
||||
* colours set to default.
|
||||
* @param c Company to update.
|
||||
*/
|
||||
void UpdateCompanyGroupLiveries(const Company *c)
|
||||
{
|
||||
for (Group *g : Group::Iterate()) {
|
||||
if (g->owner == c->index && g->parent == INVALID_GROUP) {
|
||||
if (!HasBit(g->livery.in_use, 0)) g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
|
||||
if (!HasBit(g->livery.in_use, 1)) g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
|
||||
PropagateChildLivery(g, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Group::Group(Owner owner)
|
||||
{
|
||||
@@ -509,12 +531,13 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||
GroupStatistics::UpdateAutoreplace(g->owner);
|
||||
if (g->vehicle_type == VEH_TRAIN) ReindexTemplateReplacementsRecursive();
|
||||
|
||||
if (g->livery.in_use == 0) {
|
||||
if (!HasBit(g->livery.in_use, 0) || !HasBit(g->livery.in_use, 1)) {
|
||||
/* Update livery with new parent's colours if either colour is default. */
|
||||
const Livery *livery = GetParentLivery(g);
|
||||
g->livery.colour1 = livery->colour1;
|
||||
g->livery.colour2 = livery->colour2;
|
||||
if (!HasBit(g->livery.in_use, 0)) g->livery.colour1 = livery->colour1;
|
||||
if (!HasBit(g->livery.in_use, 1)) g->livery.colour2 = livery->colour2;
|
||||
|
||||
PropagateChildLivery(g);
|
||||
PropagateChildLivery(g, true);
|
||||
MarkWholeScreenDirty();
|
||||
}
|
||||
}
|
||||
@@ -852,7 +875,7 @@ CommandCost CmdSetGroupLivery(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
|
||||
g->livery.colour2 = colour;
|
||||
}
|
||||
|
||||
PropagateChildLivery(g);
|
||||
PropagateChildLivery(g, true);
|
||||
MarkWholeScreenDirty();
|
||||
}
|
||||
|
||||
|
@@ -2197,9 +2197,17 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibe es
|
||||
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Exibir os esquemas de cor de automóveis
|
||||
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Exibir esquemas de cor de embarcação
|
||||
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Exibir esquemas de cor de aviões
|
||||
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Exibir cores de grupos de trens
|
||||
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Exibir cores dos grupos de veículos
|
||||
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Exibir cores de grupos de embarcações
|
||||
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Exibir cores dos grupos de aeronaves
|
||||
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Escolha a cor principal para o esquema selecionado. Ctrl+Clique seleciona essa cor para todos os esquemas
|
||||
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Escolha a cor secundária para o esquema selecionado. Ctrl+Clique seleciona essa cor para todos os esquemas
|
||||
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Selecionar um esquema de cores para mudar, ou múltiplos esquemas com CTRL+clique. Marque a opção para utilizar o esquema
|
||||
STR_LIVERY_TRAIN_GROUP_EMPTY :Não há grupos de trens configurados
|
||||
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Não há grupos de veículos configurados
|
||||
STR_LIVERY_SHIP_GROUP_EMPTY :Não há grupos de embarcações configurados
|
||||
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Não há grupos de aeronaves configurados
|
||||
|
||||
###length 23
|
||||
STR_LIVERY_DEFAULT :Cores padrão
|
||||
@@ -4654,9 +4662,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Correspo
|
||||
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Alternar correspondencia de "case" quando comparar mensagens de resgisto da IA contra a sequencia de falhas
|
||||
STR_AI_DEBUG_CONTINUE :{BLACK}Continuar
|
||||
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Despausar e continuar o AI
|
||||
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Ver a depuração produzida desta IA
|
||||
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Ver saída de depuração desta IA
|
||||
STR_AI_GAME_SCRIPT :{BLACK}Game Script
|
||||
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Checando o log do Game Script
|
||||
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verifique o registo do Script de jogo
|
||||
|
||||
STR_ERROR_AI_NO_AI_FOUND :Nenhuma IA adequada encontrada para carregar.{} Esta IA é falsa e não irá fazer nada.{} Você pode pode baixar várias IA através do sistema de 'Conteúdo Online'
|
||||
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Um dos scripts em execução travou. Favor relatar isto ao autor do script com uma captura de tela da Janela de Depuração da I.A./Script do jogo
|
||||
|
@@ -2194,12 +2194,19 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis farv
|
||||
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Vis farveskemaer for køretøjer
|
||||
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Vis farveskemaer for skibe
|
||||
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Vis farveskemaer for fly
|
||||
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Vis farver på toggrupper
|
||||
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Vis farver på vejkøretøjsgrupper
|
||||
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Vis farver på skibsgrupper
|
||||
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Vis farverne på flygrupper
|
||||
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Vælg den primære farve for det valgte farveskema. Ctrl+Click vil sætte denne farve for alle farveskemaer
|
||||
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Vælg den sekundære farve for det valgte farveskema. Ctrl+Click vil sætte denne farve for alle farveskemaer
|
||||
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Vælg et farveskema, som skal ændres, eller flere farveskemaer vha. CTRL+klik. Klik på boksen for at slå brug af farveskemaet til/fra
|
||||
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Der er ikke oprettet grupper af vejkøretøjer
|
||||
STR_LIVERY_SHIP_GROUP_EMPTY :Der er ikke oprettet skibsgrupper
|
||||
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Der er ikke oprettet flygrupper
|
||||
|
||||
###length 23
|
||||
STR_LIVERY_DEFAULT :Standardfarver
|
||||
STR_LIVERY_DEFAULT :Standard Livery
|
||||
STR_LIVERY_STEAM :Damplokomotiv
|
||||
STR_LIVERY_DIESEL :Diesellokomotiv
|
||||
STR_LIVERY_ELECTRIC :Elektrisk lokomotiv
|
||||
@@ -4651,7 +4658,7 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Match st
|
||||
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Vis matchende stort/lille bogstav ved sammenligning af AI log beskeder messages mod teksten
|
||||
STR_AI_DEBUG_CONTINUE :{BLACK}Fortsæt
|
||||
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sæt spillet i gang, og start den kunstige intelligens igen
|
||||
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Se debug output for denne AI
|
||||
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Se fejlretningsoutput af denne AI. Ctrl-klik for at åbne i et nyt vindue
|
||||
STR_AI_GAME_SCRIPT :{BLACK}Spil Script
|
||||
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Tjek SpilScript-loggen
|
||||
|
||||
|
@@ -2196,12 +2196,20 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show tra
|
||||
STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Show road vehicle colour schemes
|
||||
STR_LIVERY_SHIP_TOOLTIP :{BLACK}Show ship colour schemes
|
||||
STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Show aircraft colour schemes
|
||||
STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Show colours of train groups
|
||||
STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Show colours of road vehicle groups
|
||||
STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Show colours of ship groups
|
||||
STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Show colours of aircraft groups
|
||||
STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Choose the primary colour for the selected scheme. Ctrl+Click will set this colour for every scheme
|
||||
STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Choose the secondary colour for the selected scheme. Ctrl+Click will set this colour for every scheme
|
||||
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Select a colour scheme to change, or multiple schemes with Ctrl+Click. Click on the box to toggle use of the scheme
|
||||
STR_LIVERY_TRAIN_GROUP_EMPTY :No train groups are set up
|
||||
STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :No road vehicle groups are set up
|
||||
STR_LIVERY_SHIP_GROUP_EMPTY :No ship groups are set up
|
||||
STR_LIVERY_AIRCRAFT_GROUP_EMPTY :No aircraft groups are set up
|
||||
|
||||
###length 23
|
||||
STR_LIVERY_DEFAULT :Standard Livery
|
||||
STR_LIVERY_DEFAULT :Default Livery
|
||||
STR_LIVERY_STEAM :Steam Engine
|
||||
STR_LIVERY_DIESEL :Diesel Engine
|
||||
STR_LIVERY_ELECTRIC :Electric Engine
|
||||
@@ -4653,9 +4661,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Match ca
|
||||
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Toggle matching case when comparing AI log messages against the break string
|
||||
STR_AI_DEBUG_CONTINUE :{BLACK}Continue
|
||||
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Unpause and continue the AI
|
||||
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}View debug output of this AI
|
||||
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}View debug output of this AI. Ctrl-Click to open in a new window
|
||||
STR_AI_GAME_SCRIPT :{BLACK}Game Script
|
||||
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Check the Game Script log
|
||||
STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Check the Game Script log. Ctrl-Click to open in a new window
|
||||
|
||||
STR_ERROR_AI_NO_AI_FOUND :No suitable AI found to load.{}This AI is a dummy AI and won't do anything.{}You can download several AIs via the 'Online Content' system
|
||||
STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}One of the running scripts crashed. Please report this to the script author with a screenshot of the AI/Game Script Debug Window
|
||||
|
@@ -386,8 +386,7 @@ protected:
|
||||
if (const NWidgetBase *nwid = this->GetWidget<NWidgetBase>(WID_NG_DATE); nwid->current_x != 0) {
|
||||
/* current date */
|
||||
Rect date = nwid->GetCurrentRect();
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(cur_item->info.game_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(cur_item->info.game_date);
|
||||
SetDParam(0, ymd.year);
|
||||
DrawString(date.left, date.right, y + text_y_offset, STR_JUST_INT, TC_BLACK, SA_HOR_CENTER);
|
||||
}
|
||||
@@ -395,9 +394,8 @@ protected:
|
||||
if (const NWidgetBase *nwid = this->GetWidget<NWidgetBase>(WID_NG_YEARS); nwid->current_x != 0) {
|
||||
/* number of years the game is running */
|
||||
Rect years = nwid->GetCurrentRect();
|
||||
YearMonthDay ymd_cur, ymd_start;
|
||||
ConvertDateToYMD(cur_item->info.game_date, &ymd_cur);
|
||||
ConvertDateToYMD(cur_item->info.start_date, &ymd_start);
|
||||
YearMonthDay ymd_cur = ConvertDateToYMD(cur_item->info.game_date);
|
||||
YearMonthDay ymd_start = ConvertDateToYMD(cur_item->info.start_date);
|
||||
SetDParam(0, ymd_cur.year - ymd_start.year);
|
||||
DrawString(years.left, years.right, y + text_y_offset, STR_JUST_INT, TC_BLACK, SA_HOR_CENTER);
|
||||
}
|
||||
|
@@ -2455,15 +2455,12 @@ void NetworkServerNewCompany(const Company *c, NetworkClientInfo *ci)
|
||||
char *NetworkServerDumpClients(char *buffer, const char *last)
|
||||
{
|
||||
for (NetworkClientInfo *ci : NetworkClientInfo::Iterate()) {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(ci->join_date, &ymd);
|
||||
buffer += seprintf(buffer, last, " #%d: name: '%s', company: %u",
|
||||
ci->client_id,
|
||||
ci->client_name.c_str(),
|
||||
ci->client_playas);
|
||||
if (ci->join_date != 0) {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(ci->join_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(ci->join_date);
|
||||
buffer += seprintf(buffer, last, ", joined: %4i-%02i-%02i, %i, %i, frame: %08X",
|
||||
ymd.year, ymd.month + 1, ymd.day, ci->join_date_fract, ci->join_tick_skip_counter, ci->join_frame);
|
||||
}
|
||||
|
@@ -237,9 +237,7 @@ static void SurveyTimers(nlohmann::json &survey)
|
||||
survey["ticks"] = _scaled_tick_counter;
|
||||
survey["seconds"] = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::steady_clock::now() - _switch_mode_time).count();
|
||||
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(_date, &ymd);
|
||||
survey["calendar"] = fmt::format("{:04}-{:02}-{:02} ({})", ymd.year, ymd.month + 1, ymd.day, _date_fract);
|
||||
survey["calendar"] = fmt::format("{:04}-{:02}-{:02} ({})", _cur_date_ymd.year, _cur_date_ymd.month + 1, _cur_date_ymd.day, _date_fract);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -1792,7 +1792,7 @@ bool AfterLoadGame()
|
||||
if (IsSavegameVersionBefore(SLV_31)) {
|
||||
_date += DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta();
|
||||
SetScaledTickVariables();
|
||||
ConvertDateToYMD(_date, &_cur_date_ymd);
|
||||
_cur_date_ymd = ConvertDateToYMD(_date);
|
||||
UpdateCachedSnowLine();
|
||||
|
||||
for (Station *st : Station::Iterate()) st->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR.AsDelta();
|
||||
@@ -4299,6 +4299,10 @@ bool AfterLoadGame()
|
||||
}
|
||||
}
|
||||
|
||||
for (Company *c : Company::Iterate()) {
|
||||
UpdateCompanyLiveries(c);
|
||||
}
|
||||
|
||||
/*
|
||||
* The center of train vehicles was changed, fix up spacing.
|
||||
* Delay this until all train and track updates have been performed.
|
||||
|
@@ -37,8 +37,7 @@
|
||||
{
|
||||
if (date < 0) return DATE_INVALID;
|
||||
|
||||
::YearMonthDay ymd;
|
||||
::ConvertDateToYMD(date, &ymd);
|
||||
::YearMonthDay ymd = ::ConvertDateToYMD(date);
|
||||
return ymd.year;
|
||||
}
|
||||
|
||||
@@ -46,8 +45,7 @@
|
||||
{
|
||||
if (date < 0) return DATE_INVALID;
|
||||
|
||||
::YearMonthDay ymd;
|
||||
::ConvertDateToYMD(date, &ymd);
|
||||
::YearMonthDay ymd = ::ConvertDateToYMD(date);
|
||||
return ymd.month + 1;
|
||||
}
|
||||
|
||||
@@ -55,8 +53,7 @@
|
||||
{
|
||||
if (date < 0) return DATE_INVALID;
|
||||
|
||||
::YearMonthDay ymd;
|
||||
::ConvertDateToYMD(date, &ymd);
|
||||
::YearMonthDay ymd = ::ConvertDateToYMD(date);
|
||||
return ymd.day;
|
||||
}
|
||||
|
||||
|
@@ -462,8 +462,7 @@ static char *FormatWallClockString(char *buff, DateTicksScaled ticks, const char
|
||||
Date date = ScaledDateTicksToDate(ticks);
|
||||
int64 final_arg;
|
||||
if (_settings_client.gui.date_with_time == 1) {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(date);
|
||||
final_arg = ymd.year;
|
||||
} else {
|
||||
final_arg = date.base();
|
||||
@@ -487,8 +486,7 @@ static char *FormatTimeHHMMString(char *buff, uint time, const char *last, uint
|
||||
|
||||
static char *FormatYmdString(char *buff, Date date, const char *last, uint case_index)
|
||||
{
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(date);
|
||||
|
||||
auto tmp_params = MakeParameters(ymd.day + STR_DAY_NUMBER_1ST - 1, STR_MONTH_ABBREV_JAN + ymd.month, ymd.year);
|
||||
return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_LONG), tmp_params, last, case_index);
|
||||
@@ -496,8 +494,7 @@ static char *FormatYmdString(char *buff, Date date, const char *last, uint case_
|
||||
|
||||
static char *FormatMonthAndYear(char *buff, Date date, const char *last, uint case_index)
|
||||
{
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(date);
|
||||
|
||||
auto tmp_params = MakeParameters(STR_MONTH_JAN + ymd.month, ymd.year);
|
||||
return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_SHORT), tmp_params, last, case_index);
|
||||
@@ -505,8 +502,7 @@ static char *FormatMonthAndYear(char *buff, Date date, const char *last, uint ca
|
||||
|
||||
static char *FormatTinyOrISODate(char *buff, Date date, StringID str, const char *last)
|
||||
{
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(date);
|
||||
|
||||
/* Day and month are zero-padded with ZEROFILL_NUM, hence the two 2s. */
|
||||
auto tmp_params = MakeParameters(ymd.day, 2, ymd.month + 1, 2, ymd.year);
|
||||
|
@@ -557,10 +557,8 @@ class NIHVehicle : public NIHelper {
|
||||
caps++;
|
||||
}
|
||||
}
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(e->intro_date, &ymd);
|
||||
YearMonthDay base_ymd;
|
||||
ConvertDateToYMD(e->info.base_intro, &base_ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(e->intro_date);
|
||||
YearMonthDay base_ymd = ConvertDateToYMD(e->info.base_intro);
|
||||
seprintf(buffer, lastof(buffer), " Intro: %4i-%02i-%02i (base: %4i-%02i-%02i), Age: %u, Base life: %u, Durations: %u %u %u (sum: %u)",
|
||||
ymd.year, ymd.month + 1, ymd.day, base_ymd.year, base_ymd.month + 1, base_ymd.day,
|
||||
e->age, e->info.base_life, e->duration_phase_1, e->duration_phase_2, e->duration_phase_3,
|
||||
@@ -1528,12 +1526,11 @@ class NIHObject : public NIHelper {
|
||||
output.print(buffer);
|
||||
|
||||
{
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(spec->introduction_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(spec->introduction_date);
|
||||
char *b = buffer + seprintf(buffer, lastof(buffer), " intro: %4i-%02i-%02i",
|
||||
ymd.year, ymd.month + 1, ymd.day);
|
||||
if (spec->end_of_life_date < MAX_DATE) {
|
||||
ConvertDateToYMD(spec->end_of_life_date, &ymd);
|
||||
ymd = ConvertDateToYMD(spec->end_of_life_date);
|
||||
seprintf(b, lastof(buffer), ", end of life: %4i-%02i-%02i",
|
||||
ymd.year, ymd.month + 1, ymd.day);
|
||||
}
|
||||
@@ -1679,8 +1676,7 @@ class NIHRailType : public NIHelper {
|
||||
seprintf(buffer, lastof(buffer), " Cost multiplier: %u/8, Maintenance multiplier: %u/8", info->cost_multiplier, info->maintenance_multiplier);
|
||||
output.print(buffer);
|
||||
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(info->introduction_date, &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(info->introduction_date);
|
||||
seprintf(buffer, lastof(buffer), " Introduction date: %4i-%02i-%02i", ymd.year, ymd.month + 1, ymd.day);
|
||||
output.print(buffer);
|
||||
seprintf(buffer, lastof(buffer), " Intro required railtypes: 0x" OTTD_PRINTFHEX64, info->introduction_required_railtypes);
|
||||
|
@@ -2409,14 +2409,12 @@ int GetTraceRestrictTimeDateValueFromDate(TraceRestrictTimeDateValueField type,
|
||||
return minutes.ClockHHMM();
|
||||
|
||||
case TRTDVF_DAY: {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(ScaledDateTicksToDate(scaled_date_ticks), &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(ScaledDateTicksToDate(scaled_date_ticks));
|
||||
return ymd.day;
|
||||
}
|
||||
|
||||
case TRTDVF_MONTH: {
|
||||
YearMonthDay ymd;
|
||||
ConvertDateToYMD(ScaledDateTicksToDate(scaled_date_ticks), &ymd);
|
||||
YearMonthDay ymd = ConvertDateToYMD(ScaledDateTicksToDate(scaled_date_ticks));
|
||||
return ymd.month + 1;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user