(svn r21939) -Fix (r16357): the check for valid depot wasn't strict enough

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
smatz 14 years ago
parent 0ebc548a89
commit b15719bbd2

@ -28,6 +28,11 @@ Depot::~Depot()
{
if (CleaningPool()) return;
if (!IsDepotTile(this->xy) || GetDepotIndex(this->xy) != this->index) {
/* It can happen there is no depot here anymore (TTO/TTD savegames) */
return;
}
/* Clear the order backup. */
OrderBackup::Reset(this->xy, false);
@ -40,7 +45,7 @@ Depot::~Depot()
/* Delete the depot list */
VehicleType vt;
switch (GetTileType(this->xy)) {
default: return; // It can happen there is no depot here anymore (TTO/TTD savegames)
default: NOT_REACHED();
case MP_RAILWAY: vt = VEH_TRAIN; break;
case MP_ROAD: vt = VEH_ROAD; break;
case MP_WATER: vt = VEH_SHIP; break;

@ -108,7 +108,7 @@ static void FixTTDDepots()
{
const Depot *d;
FOR_ALL_DEPOTS_FROM(d, 252) {
if (!IsRoadDepotTile(d->xy) && !IsRailDepotTile(d->xy) && !IsShipDepotTile(d->xy) && !IsHangarTile(d->xy)) {
if (!IsDepotTile(d->xy) || GetDepotIndex(d->xy) != d->index) {
/** Workaround for SVXConverter bug, depots 252-255 could be invalid */
delete d;
}
@ -670,7 +670,10 @@ static bool LoadOldDepot(LoadgameState *ls, int num)
if (!LoadChunk(ls, d, depot_chunk)) return false;
if (d->xy != 0) {
d->town = Town::Get(RemapTownIndex(_old_town_index));
/* In some cases, there could be depots referencing invalid town. */
Town *t = Town::GetIfValid(RemapTownIndex(_old_town_index));
if (t == NULL) t = Town::GetRandom();
d->town = t;
} else {
delete d;
}

Loading…
Cancel
Save