From 4bd72e4a7846af5ef33ac8d3436edbdd4d70709a Mon Sep 17 00:00:00 2001 From: Kuhnovic <68320206+Kuhnovic@users.noreply.github.com> Date: Fri, 4 Apr 2025 17:21:04 +0200 Subject: [PATCH] Fix #11528: Starting autorail dragging from existing track tiles resulted in adding non-continuous tracks. (#13885) --- src/rail_cmd.cpp | 3 ++- src/road_cmd.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) 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 */