changeset 15846:c7db31e8c68a draft

(svn r20528) -Fix: in old savegames aircraft can have an invalid state
author yexo <yexo@openttd.org>
date Tue, 17 Aug 2010 21:46:25 +0000
parents 705cbdda3656
children b3d15890d817
files src/saveload/afterload.cpp
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -2226,6 +2226,26 @@
 		FOR_ALL_DEPOTS(d) d->build_date = _date;
 	}
 
+	/* In old versions it was possible to remove an airport while a plane was
+	 * taking off or landing. This gives all kind of problems when building
+	 * another airport in the same station so we don't allow that anymore.
+	 * For old savegames with such aircraft we just throw them in the air and
+	 * treat the aircraft like they were flying already. */
+	if (CheckSavegameVersion(146)) {
+		Aircraft *v;
+		FOR_ALL_AIRCRAFT(v) {
+			if (!v->IsNormalAircraft()) continue;
+			Station *st = GetTargetAirportIfValid(v);
+			if (st == NULL && v->state != FLYING) {
+				v->state = FLYING;
+				UpdateAircraftCache(v);
+				AircraftNextAirportPos_and_Order(v);
+				/* get aircraft back on running altitude */
+				if ((v->vehstatus & VS_CRASHED) == 0) SetAircraftPosition(v, v->x_pos, v->y_pos, GetAircraftFlyingAltitude(v));
+			}
+		}
+	}
+
 	/* Road stops is 'only' updating some caches */
 	AfterLoadRoadStops();
 	AfterLoadLabelMaps();