From b590a647188a8c98efca81f81cf7cb1a1c6228e1 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sun, 11 May 2014 18:31:38 +0000 Subject: (svn r26581) -Fix [FS#5989]: transfering cargo to a station doesn't give that station a rating and thus the cargo does not decay... until the first pickup happens For cargo drops from industries/houses, the station gets a rating too so why not when cargo is dropped at the station from a train? --- src/economy.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/economy.cpp b/src/economy.cpp index cf74a9d6e..0d3902dfa 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1558,8 +1558,18 @@ static void LoadUnloadVehicle(Vehicle *front) } } - /* Mark the station dirty if we transfer, but not if we only deliver. */ - dirty_station = v->cargo.ActionCount(VehicleCargoList::MTA_TRANSFER) > 0; + if (v->cargo.ActionCount(VehicleCargoList::MTA_TRANSFER) > 0) { + /* Mark the station dirty if we transfer, but not if we only deliver. */ + dirty_station = true; + + if (!ge->HasRating()) { + /* Upon transfering cargo, make sure the station has a rating. Fake a pickup for the + * first unload to prevent the cargo from quickly decaying after the initial drop. */ + ge->time_since_pickup = 0; + SetBit(ge->status, GoodsEntry::GES_RATING); + } + } + amount_unloaded = v->cargo.Unload(amount_unloaded, &ge->cargo, payment); remaining = v->cargo.UnloadCount() > 0; if (amount_unloaded > 0) { @@ -1758,6 +1768,7 @@ static void LoadUnloadVehicle(Vehicle *front) if (dirty_station) { st->MarkTilesDirty(true); SetWindowDirty(WC_STATION_VIEW, last_visited); + InvalidateWindowData(WC_STATION_LIST, last_visited); } } -- cgit v1.2.3-70-g09d2