(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
authorDarkvater
Wed, 14 Sep 2005 22:03:27 +0000
changeset 2427 b7a0ad02af26
parent 2426 3362e577adb1
child 2428 b2e4fb6665d0
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
station_cmd.c
--- a/station_cmd.c	Wed Sep 14 19:22:06 2005 +0000
+++ b/station_cmd.c	Wed Sep 14 22:03:27 2005 +0000
@@ -2886,53 +2886,56 @@
 
 void BuildOilRig(TileIndex tile)
 {
-	Station *st;
 	int j;
-
-	FOR_ALL_STATIONS(st) {
-		if (st->xy == 0) {
-			st->town = ClosestTownFromTile(tile, (uint)-1);
-			st->sign.width_1 = 0;
-			if (!GenerateStationName(st, tile, 2))
-				return;
-
-			SetTileType(tile, MP_STATION);
-			_m[tile].m5 = 0x4B;
-			SetTileOwner(tile, OWNER_NONE);
-			_m[tile].m3 = 0;
-			_m[tile].m4 = 0;
-			_m[tile].m2 = st->index;
-
-			st->owner = OWNER_NONE;
-      st->airport_flags = 0;
-			st->airport_type = AT_OILRIG;
-			st->xy = tile;
-			st->bus_stops = NULL;
-			st->truck_stops = NULL;
-			st->airport_tile = tile;
-			st->dock_tile = tile;
-			st->train_tile = 0;
-			st->had_vehicle_of_type = 0;
-			st->time_since_load = 255;
-			st->time_since_unload = 255;
-			st->delete_ctr = 0;
-			st->last_vehicle = INVALID_VEHICLE;
-			st->facilities = FACIL_AIRPORT | FACIL_DOCK;
-			st->build_date = _date;
-			for(j=0; j!=NUM_CARGO; j++) {
-				st->goods[j].waiting_acceptance = 0;
-				st->goods[j].days_since_pickup = 0;
-				st->goods[j].enroute_from = INVALID_STATION;
-				st->goods[j].rating = 175;
-				st->goods[j].last_speed = 0;
-				st->goods[j].last_age = 255;
-			}
-
-			UpdateStationVirtCoordDirty(st);
-			UpdateStationAcceptance(st, false);
-			return;
-		}
+	Station *st = AllocateStation();
+
+	if (st == NULL) {
+		DEBUG(misc, 0) ("Couldn't allocate station for oilrig at %#X, reverting to oilrig only...", tile);
+		return;
 	}
+	if (!GenerateStationName(st, tile, 2)) {
+		DEBUG(misc, 0) ("Couldn't allocate station-name for oilrig at %#X, reverting to oilrig only...", tile);
+		return;
+	}
+
+	st->town = ClosestTownFromTile(tile, (uint)-1);
+	st->sign.width_1 = 0;
+
+	SetTileType(tile, MP_STATION);
+	_m[tile].m5 = 0x4B;
+	SetTileOwner(tile, OWNER_NONE);
+	_m[tile].m3 = 0;
+	_m[tile].m4 = 0;
+	_m[tile].m2 = st->index;
+
+	st->owner = OWNER_NONE;
+	st->airport_flags = 0;
+	st->airport_type = AT_OILRIG;
+	st->xy = tile;
+	st->bus_stops = NULL;
+	st->truck_stops = NULL;
+	st->airport_tile = tile;
+	st->dock_tile = tile;
+	st->train_tile = 0;
+	st->had_vehicle_of_type = 0;
+	st->time_since_load = 255;
+	st->time_since_unload = 255;
+	st->delete_ctr = 0;
+	st->last_vehicle = INVALID_VEHICLE;
+	st->facilities = FACIL_AIRPORT | FACIL_DOCK;
+	st->build_date = _date;
+
+	for (j = 0; j != NUM_CARGO; j++) {
+		st->goods[j].waiting_acceptance = 0;
+		st->goods[j].days_since_pickup = 0;
+		st->goods[j].enroute_from = INVALID_STATION;
+		st->goods[j].rating = 175;
+		st->goods[j].last_speed = 0;
+		st->goods[j].last_age = 255;
+	}
+
+	UpdateStationVirtCoordDirty(st);
+	UpdateStationAcceptance(st, false);
 }
 
 void DeleteOilRig(TileIndex tile)