Fix: Update last servicing dates when using the date cheat (#9694)

This commit is contained in:
nchappe 2021-11-19 00:04:22 +00:00 committed by Patric Stout
parent 521287839b
commit a4428a0cbe
4 changed files with 15 additions and 1 deletions

View File

@ -14,6 +14,7 @@
#include "company_func.h" #include "company_func.h"
#include "date_func.h" #include "date_func.h"
#include "saveload/saveload.h" #include "saveload/saveload.h"
#include "vehicle_base.h"
#include "textbuf_gui.h" #include "textbuf_gui.h"
#include "window_gui.h" #include "window_gui.h"
#include "string_func.h" #include "string_func.h"
@ -106,6 +107,7 @@ static int32 ClickChangeDateCheat(int32 p1, int32 p2)
if (p1 == _cur_year) return _cur_year; if (p1 == _cur_year) return _cur_year;
Date new_date = ConvertYMDToDate(p1, ymd.month, ymd.day); Date new_date = ConvertYMDToDate(p1, ymd.month, ymd.day);
for (auto v : Vehicle::Iterate()) v->ShiftDates(new_date - _date);
LinkGraphSchedule::instance.ShiftDates(new_date - _date); LinkGraphSchedule::instance.ShiftDates(new_date - _date);
SetDate(new_date, _date_fract); SetDate(new_date, _date_fract);
EnginesMonthlyLoop(); EnginesMonthlyLoop();

View File

@ -211,7 +211,7 @@ static void OnNewYear()
_cur_year--; _cur_year--;
days_this_year = IsLeapYear(_cur_year) ? DAYS_IN_LEAP_YEAR : DAYS_IN_YEAR; days_this_year = IsLeapYear(_cur_year) ? DAYS_IN_LEAP_YEAR : DAYS_IN_YEAR;
_date -= days_this_year; _date -= days_this_year;
for (Vehicle *v : Vehicle::Iterate()) v->date_of_last_service -= days_this_year; for (Vehicle *v : Vehicle::Iterate()) v->ShiftDates(-days_this_year);
for (LinkGraph *lg : LinkGraph::Iterate()) lg->ShiftDates(-days_this_year); for (LinkGraph *lg : LinkGraph::Iterate()) lg->ShiftDates(-days_this_year);
/* Because the _date wraps here, and text-messages expire by game-days, we have to clean out /* Because the _date wraps here, and text-messages expire by game-days, we have to clean out

View File

@ -763,6 +763,16 @@ uint32 Vehicle::GetGRFID() const
return this->GetEngine()->GetGRFID(); return this->GetEngine()->GetGRFID();
} }
/**
* Shift all dates by given interval.
* This is useful if the date has been modified with the cheat menu.
* @param interval Number of days to be added or substracted.
*/
void Vehicle::ShiftDates(int interval)
{
this->date_of_last_service += interval;
}
/** /**
* Handle the pathfinding result, especially the lost status. * Handle the pathfinding result, especially the lost status.
* If the vehicle is now lost and wasn't previously fire an * If the vehicle is now lost and wasn't previously fire an

View File

@ -545,6 +545,8 @@ public:
*/ */
virtual void OnNewDay() {}; virtual void OnNewDay() {};
void ShiftDates(int interval);
/** /**
* Crash the (whole) vehicle chain. * Crash the (whole) vehicle chain.
* @param flooded whether the cause of the crash is flooding or not. * @param flooded whether the cause of the crash is flooding or not.