diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index d15a4ec64e..1287eac16b 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -888,10 +888,11 @@ static CommandCost CmdRailTrackHelper(DoCommandFlags flags, TileIndex tile, Tile CommandCost last_error = CMD_ERROR; for (;;) { ret = remove ? Command::Do(flags, tile, TrackdirToTrack(trackdir)) : Command::Do(flags, tile, railtype, TrackdirToTrack(trackdir), auto_remove_signals); + if (!remove && ret.Failed() && ret.GetErrorMessage() == STR_ERROR_ALREADY_BUILT) ret = CommandCost(); // Treat "already built" as success if (ret.Failed()) { last_error = std::move(ret); - if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT && !remove) { + if (!remove) { if (fail_on_obstacle) return last_error; if (had_success) break; // Keep going if we haven't constructed any rail yet, skipping the start of the drag } diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 2ceeeebaf9..211186114c 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1020,12 +1020,12 @@ CommandCost CmdBuildLongRoad(DoCommandFlags flags, TileIndex end_tile, TileIndex } CommandCost ret = Command::Do(flags, tile, bits, rt, drd, TownID::Invalid()); + if (ret.Failed() && ret.GetErrorMessage() == STR_ERROR_ALREADY_BUILT) ret = CommandCost(); // Treat "already built" as success + if (ret.Failed()) { last_error = std::move(ret); - if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT) { - if (is_ai) return last_error; - if (had_success) break; // Keep going if we haven't constructed any road yet, skipping the start of the drag - } + if (is_ai) return last_error; + if (had_success) break; // Keep going if we haven't constructed any road yet, skipping the start of the drag } else { had_success = true; /* Only pay for the upgrade on one side of the bridges and tunnels */