diff --git a/water_cmd.c b/water_cmd.c --- a/water_cmd.c +++ b/water_cmd.c @@ -148,7 +148,7 @@ static int32 DoBuildShiplift(TileIndex t } if (flags & DC_EXEC) { - MakeLock(tile, dir); + MakeLock(tile, _current_player, dir); MarkTileDirtyByTile(tile); MarkTileDirtyByTile(tile - delta); MarkTileDirtyByTile(tile + delta); @@ -161,6 +161,8 @@ static int32 RemoveShiplift(TileIndex ti { TileIndexDiff delta = TileOffsByDir(GetLockDirection(tile)); + if (!CheckTileOwnership(tile)) return CMD_ERROR; + // make sure no vehicle is on the tile. if (!EnsureNoVehicle(tile) || !EnsureNoVehicle(tile + delta) || !EnsureNoVehicle(tile - delta)) return CMD_ERROR; @@ -249,7 +251,11 @@ int32 CmdBuildCanal(TileIndex tile, uint cost += ret; if (flags & DC_EXEC) { - MakeWater(tile); + if (TileHeight(tile) == 0) { + MakeWater(tile); + } else { + MakeCanal(tile, _current_player); + } MarkTileDirtyByTile(tile); MarkTilesAroundDirty(tile); } @@ -279,6 +285,8 @@ static int32 ClearTile_Water(TileIndex t return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP); } + if (GetTileOwner(tile) != OWNER_WATER && !CheckTileOwnership(tile)) return CMD_ERROR; + if (flags & DC_EXEC) DoClearSquare(tile); return _price.clear_water;