# HG changeset patch # User Jonathan G Rennison # Date 2024-02-20 23:56:46 # Node ID 14d02a6bd08307fe32a67af3258f225a8abcf00c # Parent b0e955ab5da2451f1ba54b3f176d57619f32a8c7 Fix #12145: Incorrect date handling in date cheat in wallclock time-keeping mode diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -107,18 +107,21 @@ static int32_t ClickChangeDateCheat(int3 TimerGameCalendar::YearMonthDay ymd = TimerGameCalendar::ConvertDateToYMD(TimerGameCalendar::date); TimerGameCalendar::Date new_calendar_date = TimerGameCalendar::ConvertYMDToDate(new_year, ymd.month, ymd.day); - /* Keep economy and calendar dates synced. */ - TimerGameEconomy::Date new_economy_date = new_calendar_date.base(); - /* Shift cached dates before we change the date. */ - for (auto v : Vehicle::Iterate()) v->ShiftDates(new_economy_date - TimerGameEconomy::date); - LinkGraphSchedule::instance.ShiftDates(new_economy_date - TimerGameEconomy::date); - - /* Now it's safe to actually change the date. */ TimerGameCalendar::SetDate(new_calendar_date, TimerGameCalendar::date_fract); /* If not using wallclock units, we keep economy date in sync with calendar date and must change it also. */ - if (!TimerGameEconomy::UsingWallclockUnits()) TimerGameEconomy::SetDate(new_economy_date, TimerGameEconomy::date_fract); + if (!TimerGameEconomy::UsingWallclockUnits()) { + /* Keep economy and calendar dates synced. */ + TimerGameEconomy::Date new_economy_date = new_calendar_date.base(); + + /* Shift cached dates before we change the date. */ + for (auto v : Vehicle::Iterate()) v->ShiftDates(new_economy_date - TimerGameEconomy::date); + LinkGraphSchedule::instance.ShiftDates(new_economy_date - TimerGameEconomy::date); + + /* Now it's safe to actually change the date. */ + TimerGameEconomy::SetDate(new_economy_date, TimerGameEconomy::date_fract); + } CalendarEnginesMonthlyLoop(); SetWindowDirty(WC_STATUS_BAR, 0);