From 8c85125fd9c06d1470f02e807bf359329338f97b Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 31 Aug 2007 20:03:50 +0000 Subject: [PATCH] (svn r11024) -Fix [FS#1173]: give a more correct error when building some things on tile 0; "Can't build on water" or "Too close to the edge" instead of "Vehicle in the way". Patch by SmatZ. --- src/clear_cmd.cpp | 2 -- src/tree_cmd.cpp | 5 +++++ src/water_cmd.cpp | 15 +++------------ 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index 7934977031..c89e5c6cbf 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -403,8 +403,6 @@ CommandCost CmdPurchaseLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); - if (!EnsureNoVehicle(tile)) return CMD_ERROR; - if (IsOwnedLandTile(tile) && IsTileOwner(tile, _current_player)) { return_cmd_error(STR_5807_YOU_ALREADY_OWN_IT); } diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 7419457d46..52010a2051 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -255,6 +255,11 @@ CommandCost CmdPlantTree(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) cost.AddCost(_price.build_trees * 2); break; + case MP_WATER: + msg = STR_3807_CAN_T_BUILD_ON_WATER; + continue; + break; + case MP_CLEAR: if (!IsTileOwner(tile, OWNER_NONE) || IsBridgeAbove(tile)) { diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 4a069840fe..c0f620cbf9 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -67,12 +67,9 @@ CommandCost CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2 SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); - if (!EnsureNoVehicle(tile)) return CMD_ERROR; - Axis axis = Extract(p1); tile2 = tile + (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); - if (!EnsureNoVehicle(tile2)) return CMD_ERROR; if (!IsClearWaterTile(tile) || !IsClearWaterTile(tile2)) return_cmd_error(STR_3801_MUST_BE_BUILT_ON_WATER); @@ -289,15 +286,15 @@ static CommandCost ClearTile_Water(TileIndex tile, byte flags) case WATER_TILE_CLEAR: if (flags & DC_NO_WATER) return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER); - /* Make sure no vehicle is on the tile */ - if (!EnsureNoVehicle(tile)) return CMD_ERROR; - /* Make sure it's not an edge tile. */ if (!IS_INT_INSIDE(TileX(tile), 1, MapMaxX() - 1) || !IS_INT_INSIDE(TileY(tile), 1, MapMaxY() - 1)) { return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP); } + /* Make sure no vehicle is on the tile */ + if (!EnsureNoVehicle(tile)) return CMD_ERROR; + if (GetTileOwner(tile) != OWNER_WATER && GetTileOwner(tile) != OWNER_NONE && !CheckTileOwnership(tile)) return CMD_ERROR; if (flags & DC_EXEC) DoClearSquare(tile); @@ -309,12 +306,6 @@ static CommandCost ClearTile_Water(TileIndex tile, byte flags) /* Make sure no vehicle is on the tile */ if (!EnsureNoVehicle(tile)) return CMD_ERROR; - /* Make sure it's not an edge tile. */ - if (!IS_INT_INSIDE(TileX(tile), 1, MapMaxX() - 1) || - !IS_INT_INSIDE(TileY(tile), 1, MapMaxY() - 1)) { - return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP); - } - if (flags & DC_EXEC) DoClearSquare(tile); if (slope == SLOPE_N || slope == SLOPE_E || slope == SLOPE_S || slope == SLOPE_W) { return CommandCost(_price.clear_water);