Index: src/station_cmd.cpp
===================================================================
--- src/station_cmd.cpp (revision 27653)
+++ src/station_cmd.cpp (working copy)
@@ -12,6 +12,7 @@
#include "stdafx.h"
#include "aircraft.h"
#include "bridge_map.h"
+#include "tunnelbridge_map.h"
#include "cmd_helper.h"
#include "viewport_func.h"
#include "command_func.h"
@@ -2500,8 +2501,12 @@
if (ret.Failed()) return ret;
tile_cur += TileOffsByDiagDir(direction);
- if (!IsTileType(tile_cur, MP_WATER) || !IsTileFlat(tile_cur)) {
+ if (IsTileType(tile_cur, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(tile_cur) != TRANSPORT_WATER) {
return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
+ } else {
+ if (!IsTileType(tile_cur, MP_WATER) && !IsBuoyTile(tile_cur) || !IsTileFlat(tile_cur) && !IsSlopeWithOneCornerRaised(GetTileSlope(tile_cur))) {
+ return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
+ }
}
TileArea dock_area = TileArea(tile + ToTileIndexDiff(_dock_tileoffs_chkaround[direction]),
Index: src/vehicle.cpp
===================================================================
--- src/vehicle.cpp (revision 27653)
+++ src/vehicle.cpp (working copy)
@@ -481,7 +481,7 @@
*/
Vehicle *v = VehicleFromPos(tile, &z, &EnsureNoVehicleProcZ, true);
if (v != NULL) return_cmd_error(STR_ERROR_TRAIN_IN_THE_WAY + v->type);
- return CommandCost();
+return CommandCost();
}
/** Procedure called for every vehicle found in tunnel/bridge in the hash map */
Index: src/waypoint_cmd.cpp
===================================================================
--- src/waypoint_cmd.cpp (revision 27653)
+++ src/waypoint_cmd.cpp (working copy)
@@ -297,12 +297,15 @@
Waypoint *wp = FindDeletedWaypointCloseTo(tile, STR_SV_STNAME_BUOY, OWNER_NONE);
if (wp == NULL && !Waypoint::CanAllocateItem()) return_cmd_error(STR_ERROR_TOO_MANY_STATIONS_LOADING);
+ CommandCost ret;
CommandCost cost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_WAYPOINT_BUOY]);
if (!IsWaterTile(tile)) {
- CommandCost ret = DoCommand(tile, 0, 0, flags | DC_AUTO, CMD_LANDSCAPE_CLEAR);
+ ret = DoCommand(tile, 0, 0, flags | DC_AUTO, CMD_LANDSCAPE_CLEAR);
if (ret.Failed()) return ret;
cost.AddCost(ret);
}
+ ret = EnsureNoVehicleOnGround(tile);
+ if (ret.Failed()) return ret;
if (flags & DC_EXEC) {
if (wp == NULL) {