diff src/saveload/afterload.cpp @ 11234:6ebdffe6e5e6 draft

(svn r15588) -Fix: change owner of waypoints and deleted stations when merging companies or when a company benkrupts
author smatz <smatz@openttd.org>
date Thu, 26 Feb 2009 14:07:42 +0000
parents 8da1855e9f14
children 1ff15dc56369 f7b6f8f03e5e
line wrap: on
line diff
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -1615,14 +1615,6 @@
 				}
 			}
 		}
-
-		/* Give owners to waypoints, based on rail tracks it is sitting on.
-		 * If none is available, specify OWNER_NONE */
-		Waypoint *wp;
-		FOR_ALL_WAYPOINTS(wp) {
-			Owner owner = (IsRailWaypointTile(wp->xy) ? GetTileOwner(wp->xy) : OWNER_NONE);
-			wp->owner = IsValidCompanyID(owner) ? owner : OWNER_NONE;
-		}
 	}
 
 	if (CheckSavegameVersion(102)) {
@@ -1722,6 +1714,26 @@
 		}
 	}
 
+	if (CheckSavegameVersion(114)) {
+		/* There could be (deleted) stations with invalid owner, set owner to OWNER NONE.
+		 * The conversion affects oil rigs and buoys too, but it doesn't matter as
+		 * they have st->owner == OWNER_NONE already. */
+		Station *st;
+		FOR_ALL_STATIONS(st) {
+			if (!IsValidCompanyID(st->owner)) st->owner = OWNER_NONE;
+		}
+
+		/* Give owners to waypoints, based on rail tracks it is sitting on.
+		 * If none is available, specify OWNER_NONE.
+		 * This code was in CheckSavegameVersion(101) in the past, but in some cases,
+		 * the owner of waypoints could be incorrect. */
+		Waypoint *wp;
+		FOR_ALL_WAYPOINTS(wp) {
+			Owner owner = IsTileType(wp->xy, MP_RAILWAY) ? GetTileOwner(wp->xy) : OWNER_NONE;
+			wp->owner = IsValidCompanyID(owner) ? owner : OWNER_NONE;
+		}
+	}
+
 	GamelogPrintDebug(1);
 
 	bool ret = InitializeWindowsAndCaches();