Mercurial > hg > openttd
changeset 19948:e4c42446f3e6 draft
(svn r24882) -Fix: desync when NewGRF changes the stats related to acceleration (power, weight, tractive effort, etc) during service or 32 day triggers
author | rubidium <rubidium@openttd.org> |
---|---|
date | Wed, 02 Jan 2013 22:20:07 +0000 |
parents | 4275147c7ab5 |
children | ed7153fa1d53 |
files | src/economy.cpp src/vehicle.cpp |
diffstat | 2 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/economy.cpp +++ b/src/economy.cpp @@ -1637,6 +1637,9 @@ 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); }
--- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -836,7 +836,11 @@ 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 @@ 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);