(svn r11027) -Fix: do not unconditionally assume that a tile has a depot.
authorrubidium
Fri, 31 Aug 2007 20:52:38 +0000
changeset 8008 82de75c83c3e
parent 8007 18733d9487d8
child 8009 9e1e8ff6ac95
(svn r11027) -Fix: do not unconditionally assume that a tile has a depot.
src/depot.h
src/vehicle.cpp
--- a/src/depot.h	Fri Aug 31 20:50:59 2007 +0000
+++ b/src/depot.h	Fri Aug 31 20:52:38 2007 +0000
@@ -12,6 +12,7 @@
 #include "road_map.h"
 #include "rail_map.h"
 #include "water_map.h"
+#include "station_map.h"
 
 struct Depot;
 DECLARE_OLD_POOL(Depot, Depot, 3, 8000)
@@ -63,7 +64,7 @@
 			return IsTileType(tile, MP_RAILWAY) && GetRailTileType(tile)  == RAIL_TILE_DEPOT;
 
 		case TRANSPORT_ROAD:
-			return IsTileType(tile, MP_ROAD)  && GetRoadTileType(tile)  == ROAD_TILE_DEPOT;
+			return IsTileType(tile, MP_ROAD)    && GetRoadTileType(tile)  == ROAD_TILE_DEPOT;
 
 		case TRANSPORT_WATER:
 			return IsTileType(tile, MP_WATER)   && GetWaterTileType(tile) == WATER_TILE_DEPOT;
@@ -74,6 +75,21 @@
 	}
 }
 
+/**
+ * Is the given tile a tile with a depot on it?
+ * @param tile the tile to check
+ * @return true if and only if there is a depot on the tile.
+ */
+static inline bool IsDepotTile(TileIndex tile)
+{
+	switch (GetTileType(tile)) {
+		case MP_ROAD:    return GetRoadTileType(tile)  == ROAD_TILE_DEPOT;
+		case MP_WATER:   return GetWaterTileType(tile) == WATER_TILE_DEPOT;
+		case MP_RAILWAY: return GetRailTileType(tile)  == RAIL_TILE_DEPOT;
+		case MP_STATION: return IsHangar(tile);
+		default:         return false;
+	}
+}
 
 /**
  * Find out if the slope of the tile is suitable to build a depot of given direction
--- a/src/vehicle.cpp	Fri Aug 31 20:50:59 2007 +0000
+++ b/src/vehicle.cpp	Fri Aug 31 20:52:38 2007 +0000
@@ -1634,7 +1634,7 @@
 	CommandCost cost;
 	VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8);
 
-	if (!IsTileOwner(tile, _current_player)) return CMD_ERROR;
+	if (!IsDepotTile(tile) || !IsTileOwner(tile, _current_player)) return CMD_ERROR;
 
 	/* Get the list of vehicles in the depot */
 	BuildDepotVehicleList(vehicle_type, tile, &vl, &engine_list_length, &engine_count, NULL, NULL, NULL);