(svn r19718) -Fix: The cost of clearing tiles was not taken into account when building locks.

This commit is contained in:
terkhen 2010-04-25 13:50:15 +00:00
parent 3be66a5e79
commit e83797d2e0
1 changed files with 15 additions and 5 deletions

View File

@ -198,16 +198,22 @@ static CommandCost RemoveShipDepot(TileIndex tile, DoCommandFlag flags)
*/ */
static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlag flags) static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlag flags)
{ {
CommandCost cost(EXPENSES_CONSTRUCTION);
/* middle tile */ /* middle tile */
CommandCost ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); CommandCost ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (ret.Failed()) return ret; if (ret.Failed()) return ret;
cost.AddCost(ret);
int delta = TileOffsByDiagDir(dir); int delta = TileOffsByDiagDir(dir);
/* lower tile */ /* lower tile */
WaterClass wc_lower = IsWaterTile(tile - delta) ? GetWaterClass(tile - delta) : WATER_CLASS_CANAL; WaterClass wc_lower = IsWaterTile(tile - delta) ? GetWaterClass(tile - delta) : WATER_CLASS_CANAL;
ret = DoCommand(tile - delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR); if (!IsWaterTile(tile - delta)) {
if (ret.Failed()) return ret; ret = DoCommand(tile - delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (ret.Failed()) return ret;
cost.AddCost(ret);
}
if (GetTileSlope(tile - delta, NULL) != SLOPE_FLAT) { if (GetTileSlope(tile - delta, NULL) != SLOPE_FLAT) {
return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
} }
@ -215,8 +221,11 @@ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlag
/* upper tile */ /* upper tile */
WaterClass wc_upper = IsWaterTile(tile + delta) ? GetWaterClass(tile + delta) : WATER_CLASS_CANAL; WaterClass wc_upper = IsWaterTile(tile + delta) ? GetWaterClass(tile + delta) : WATER_CLASS_CANAL;
ret = DoCommand(tile + delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR); if (!IsWaterTile(tile + delta)) {
if (ret.Failed()) return ret; ret = DoCommand(tile + delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
if (ret.Failed()) return ret;
cost.AddCost(ret);
}
if (GetTileSlope(tile + delta, NULL) != SLOPE_FLAT) { if (GetTileSlope(tile + delta, NULL) != SLOPE_FLAT) {
return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
} }
@ -235,8 +244,9 @@ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlag
MarkCanalsAndRiversAroundDirty(tile - delta); MarkCanalsAndRiversAroundDirty(tile - delta);
MarkCanalsAndRiversAroundDirty(tile + delta); MarkCanalsAndRiversAroundDirty(tile + delta);
} }
cost.AddCost(_price[PR_CLEAR_WATER] * 22 >> 3);
return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_CLEAR_WATER] * 22 >> 3); return cost;
} }
/** Remove a lock. /** Remove a lock.