(svn r24882) -Fix: desync when NewGRF changes the stats related to acceleration (power, weight, tractive effort, etc) during service or 32 day triggers

This commit is contained in:
rubidium 2013-01-02 22:20:07 +00:00
parent 34b7a60a54
commit 0dd0bbc071
2 changed files with 10 additions and 1 deletions

View File

@ -1637,6 +1637,9 @@ static void LoadUnloadVehicle(Vehicle *front, int *cargo_left)
front->load_unload_ticks = max(1, unloading_time);
if (completely_emptied) {
/* Make sure the vehicle is marked dirty, since we need to update the NewGRF
* properties such as weight, power and TE whenever the trigger runs. */
assert(dirty_vehicle);
TriggerVehicle(front, VEHICLE_TRIGGER_EMPTY);
}

View File

@ -836,7 +836,11 @@ static void RunVehicleDayProc()
if ((v->day_counter & 0x1F) == 0 && v->HasEngineType()) {
uint16 callback = GetVehicleCallback(CBID_VEHICLE_32DAY_CALLBACK, 0, 0, v->engine_type, v);
if (callback != CALLBACK_FAILED) {
if (HasBit(callback, 0)) TriggerVehicle(v, VEHICLE_TRIGGER_CALLBACK_32); // Trigger vehicle trigger 10
if (HasBit(callback, 0)) {
/* After a vehicle trigger, the graphics and properties of the vehicle could change. */
TriggerVehicle(v, VEHICLE_TRIGGER_CALLBACK_32); // Trigger vehicle trigger 10
v->MarkDirty();
}
if (HasBit(callback, 1)) v->colourmap = PAL_NONE;
if (callback & ~3) ErrorUnknownCallbackResult(v->GetGRFID(), CBID_VEHICLE_32DAY_CALLBACK, callback);
@ -1340,7 +1344,9 @@ void VehicleEnterDepot(Vehicle *v)
VehicleServiceInDepot(v);
/* After a vehicle trigger, the graphics and properties of the vehicle could change. */
TriggerVehicle(v, VEHICLE_TRIGGER_DEPOT);
v->MarkDirty();
if (v->current_order.IsType(OT_GOTO_DEPOT)) {
SetWindowDirty(WC_VEHICLE_VIEW, v->index);