Fix date cheat/scenario load not adjusting vehicle date of last service

pull/251/head
Jonathan G Rennison 3 years ago
parent ff35a783bf
commit e6a858c0dc

@ -29,6 +29,7 @@
#include "error.h"
#include "network/network.h"
#include "order_base.h"
#include "vehicle_base.h"
#include "currency.h"
#include "widgets/cheat_widget.h"
@ -111,6 +112,7 @@ static int32 ClickChangeDateCheat(int32 p1, int32 p2)
Date new_date = ConvertYMDToDate(p1, ymd.month, ymd.day);
LinkGraphSchedule::instance.ShiftDates(new_date - _date);
ShiftOrderDates(new_date - _date);
ShiftVehicleDates(new_date - _date);
SetDate(new_date, _date_fract);
EnginesMonthlyLoop();
InvalidateWindowClassesData(WC_BUILD_STATION, 0);

@ -228,9 +228,9 @@ static void OnNewYear()
_cur_date_ymd.year--;
days_this_year = IsLeapYear(_cur_date_ymd.year) ? DAYS_IN_LEAP_YEAR : DAYS_IN_YEAR;
_date -= days_this_year;
for (Vehicle *v : Vehicle::Iterate()) v->date_of_last_service -= days_this_year;
for (LinkGraph *lg : LinkGraph::Iterate()) lg->ShiftDates(-days_this_year);
ShiftOrderDates(-days_this_year);
ShiftVehicleDates(-days_this_year);
/* Because the _date wraps here, and text-messages expire by game-days, we have to clean out
* all of them if the date is set back, else those messages will hang for ever */

@ -1131,6 +1131,7 @@ void SetStartingYear(Year year)
/* If you open a savegame as scenario there may already be link graphs.*/
LinkGraphSchedule::instance.ShiftDates(new_date - _date);
ShiftOrderDates(new_date - _date);
ShiftVehicleDates(new_date - _date);
SetDate(new_date, 0);
}

@ -4204,3 +4204,10 @@ void DumpVehicleStats(char *buffer, const char *last)
buffer += seprintf(buffer, last, "\n");
}
}
void ShiftVehicleDates(int interval)
{
for (Vehicle *v : Vehicle::Iterate()) {
v->date_of_last_service += interval;
}
}

@ -1427,4 +1427,6 @@ void ClearVehicleTickCaches();
void RemoveFromOtherVehicleTickCache(const Vehicle *v);
void UpdateAllVehiclesIsDrawn();
void ShiftVehicleDates(int interval);
#endif /* VEHICLE_BASE_H */

Loading…
Cancel
Save