mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r4466) -Fix: (FS#71) Game no longer crashes when the last vehicle serving a station has been deleted.
-Negative side effect: upon loading old games, stations whose last vehicle was a station have (temporarily) lower ratings. -Positive side effect: station.h no longer includes vehicle.h (breaks the station.h->vehicle.h->rail.h chain)
This commit is contained in:
parent
62f7907d3a
commit
e75e4e8f74
|
@ -1435,7 +1435,7 @@ int LoadUnloadVehicle(Vehicle *v)
|
|||
v->cargo_source = ge->enroute_from;
|
||||
v->cargo_days = ge->enroute_time;
|
||||
result |= 2;
|
||||
st->last_vehicle = v->index;
|
||||
st->last_vehicle_type = v->type;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -682,7 +682,7 @@ static const OldChunks station_chunk[] = {
|
|||
OCL_SVAR( OC_UINT8, Station, blocked_months_obsolete ),
|
||||
OCL_NULL( 1 ), // Unknown
|
||||
OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Station, airport_flags ),
|
||||
OCL_SVAR( OC_UINT16, Station, last_vehicle ),
|
||||
OCL_NULL( 2 ), // last_vehicle. now last_vehicle_type
|
||||
|
||||
OCL_NULL( 4 ), // Junk at end of chunk
|
||||
|
||||
|
|
|
@ -1403,6 +1403,13 @@ bool AfterLoadGame(void)
|
|||
}
|
||||
}
|
||||
|
||||
if (CheckSavegameVersion(26)) {
|
||||
Station *st;
|
||||
FOR_ALL_STATIONS(st) {
|
||||
st->last_vehicle_type = VEH_Invalid;
|
||||
}
|
||||
}
|
||||
|
||||
FOR_ALL_PLAYERS(p) p->avail_railtypes = GetPlayerRailtypes(p->index);
|
||||
|
||||
return true;
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "variables.h"
|
||||
#include <setjmp.h>
|
||||
|
||||
const uint16 SAVEGAME_VERSION = 25;
|
||||
const uint16 SAVEGAME_VERSION = 26;
|
||||
uint16 _sl_version; /// the major savegame version identifier
|
||||
byte _sl_minor_version; /// the minor savegame version, DO NOT USE!
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#include "pool.h"
|
||||
#include "sprite.h"
|
||||
#include "tile.h"
|
||||
#include "vehicle.h"
|
||||
#include "newgrf_station.h"
|
||||
|
||||
typedef struct GoodsEntry {
|
||||
|
@ -72,7 +71,7 @@ struct Station {
|
|||
uint32 airport_flags;
|
||||
StationID index;
|
||||
|
||||
VehicleID last_vehicle;
|
||||
byte last_vehicle_type;
|
||||
GoodsEntry goods[NUM_CARGO];
|
||||
|
||||
/* Stuff that is no longer used, but needed for conversion */
|
||||
|
|
|
@ -467,7 +467,7 @@ static void StationInitialize(Station *st, TileIndex tile)
|
|||
st->delete_ctr = 0;
|
||||
st->facilities = 0;
|
||||
|
||||
st->last_vehicle = INVALID_VEHICLE;
|
||||
st->last_vehicle_type = VEH_Invalid;
|
||||
|
||||
for (ge = st->goods; ge != endof(st->goods); ge++) {
|
||||
ge->waiting_acceptance = 0;
|
||||
|
@ -2317,8 +2317,7 @@ static void UpdateStationRating(Station *st)
|
|||
|
||||
{
|
||||
byte days = ge->days_since_pickup;
|
||||
if (st->last_vehicle != INVALID_VEHICLE &&
|
||||
GetVehicle(st->last_vehicle)->type == VEH_Ship)
|
||||
if (st->last_vehicle_type == VEH_Ship)
|
||||
days >>= 2;
|
||||
(days > 21) ||
|
||||
(rating += 25, days > 12) ||
|
||||
|
@ -2644,7 +2643,7 @@ void BuildOilRig(TileIndex tile)
|
|||
st->time_since_load = 255;
|
||||
st->time_since_unload = 255;
|
||||
st->delete_ctr = 0;
|
||||
st->last_vehicle = INVALID_VEHICLE;
|
||||
st->last_vehicle_type = VEH_Invalid;
|
||||
st->facilities = FACIL_AIRPORT | FACIL_DOCK;
|
||||
st->build_date = _date;
|
||||
|
||||
|
@ -2817,7 +2816,8 @@ static const SaveLoad _station_desc[] = {
|
|||
SLE_CONDVAR(Station,airport_flags, SLE_VAR_U32 | SLE_FILE_U16, 0, 2),
|
||||
SLE_CONDVAR(Station,airport_flags, SLE_UINT32, 3, SL_MAX_VERSION),
|
||||
|
||||
SLE_VAR(Station,last_vehicle, SLE_UINT16),
|
||||
SLE_CONDNULL(2, 0, 25), /* Ex last-vehicle */
|
||||
SLE_CONDVAR(Station,last_vehicle_type, SLE_UINT8 , 26, SL_MAX_VERSION),
|
||||
|
||||
// Was custom station class and id
|
||||
SLE_CONDNULL(2, 3, 25),
|
||||
|
|
Loading…
Reference in New Issue