Mercurial > hg > openttd
changeset 14417:b5a77c309ac3 draft
(svn r18974) -Fix [FS#3578]: CMD_BUILD_ROAD missed CMD_AUTO. Also do not access tiles anymore after clearing them; that fails either in test or exec run.
author | frosch <frosch@openttd.org> |
---|---|
date | Sun, 31 Jan 2010 20:28:36 +0000 |
parents | 4ab0cc96d96e |
children | 1a5f2a839c10 |
files | src/command.cpp src/road_cmd.cpp |
diffstat | 2 files changed, 6 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/command.cpp +++ b/src/command.cpp @@ -221,7 +221,7 @@ {CmdRemoveRoadStop, 0}, // CMD_REMOVE_ROAD_STOP {CmdBuildLongRoad, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_LONG_ROAD {CmdRemoveLongRoad, CMD_NO_TEST | CMD_AUTO}, // CMD_REMOVE_LONG_ROAD; towns may disallow removing road bits (as they are connected) in test, but in exec they're removed and thus removing is allowed. - {CmdBuildRoad, 0}, // CMD_BUILD_ROAD + {CmdBuildRoad, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_ROAD {CmdRemoveRoad, 0}, // CMD_REMOVE_ROAD {CmdBuildRoadDepot, CMD_NO_WATER | CMD_AUTO}, // CMD_BUILD_ROAD_DEPOT
--- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -483,6 +483,7 @@ Slope tileh = GetTileSlope(tile, NULL); + bool tile_cleared = false; // Used to remember that the tile was cleared during test run switch (GetTileType(tile)) { case MP_ROAD: switch (GetRoadTileType(tile)) { @@ -601,6 +602,7 @@ CommandCost ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); if (ret.Failed()) return ret; cost.AddCost(ret); + tile_cleared = true; } break; } @@ -615,7 +617,7 @@ cost.AddCost(ret); } - if (IsTileType(tile, MP_ROAD)) { + if (!tile_cleared && IsTileType(tile, MP_ROAD)) { /* Don't put the pieces that already exist */ pieces &= ComplementRoadBits(existing); @@ -637,10 +639,10 @@ } } - if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; + if (!tile_cleared && !EnsureNoVehicleOnGround(tile)) return CMD_ERROR; cost.AddCost(CountBits(pieces) * _price[PR_BUILD_ROAD]); - if (IsTileType(tile, MP_TUNNELBRIDGE)) { + if (!tile_cleared && IsTileType(tile, MP_TUNNELBRIDGE)) { /* Pay for *every* tile of the bridge or tunnel */ cost.MultiplyCost(GetTunnelBridgeLength(GetOtherTunnelBridgeEnd(tile), tile) + 2); }