From b7a216696254af51ba1308f19cf44e4f468342e2 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 1 Jul 2019 10:37:59 +0200 Subject: [PATCH] Fix #7633: Allow zero-cost track conversion to succeed. (#7634) --- src/rail_cmd.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 3230d9bf22..ef1137e297 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1565,6 +1565,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 CommandCost cost(EXPENSES_CONSTRUCTION); CommandCost error = CommandCost(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK); // by default, there is no track to convert. + bool found_convertible_track = false; // whether we actually did convert some track (see bug #7633) TileIterator *iter = diagonal ? (TileIterator *)new DiagonalTileIterator(area_start, area_end) : new OrthogonalTileIterator(area_start, area_end); for (; (tile = *iter) != INVALID_TILE; ++(*iter)) { @@ -1660,6 +1661,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 InvalidateWindowData(WC_VEHICLE_DEPOT, tile); InvalidateWindowData(WC_BUILD_VEHICLE, tile); } + found_convertible_track = true; cost.AddCost(RailConvertCost(type, totype)); break; @@ -1671,6 +1673,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 YapfNotifyTrackLayoutChange(tile, RemoveFirstTrack(&tracks)); } } + found_convertible_track = true; cost.AddCost(RailConvertCost(type, totype) * CountBits(GetTrackBits(tile))); break; } @@ -1733,6 +1736,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } } + found_convertible_track = true; cost.AddCost((GetTunnelBridgeLength(tile, endtile) + 2) * RailConvertCost(type, totype)); break; } @@ -1743,6 +1747,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 YapfNotifyTrackLayoutChange(tile, track); } + found_convertible_track = true; cost.AddCost(RailConvertCost(type, totype)); break; } @@ -1760,7 +1765,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } delete iter; - return (cost.GetCost() == 0) ? error : cost; + return found_convertible_track ? cost : error; } static CommandCost RemoveTrainDepot(TileIndex tile, DoCommandFlag flags)