From 719dcbb650938a2584480c2044727dbdecd6a158 Mon Sep 17 00:00:00 2001 From: mix Date: Tue, 4 Nov 2025 00:16:16 +0000 Subject: [PATCH] Prevent track design ghost add/delete when shift height is invalid --- src/openrct2-ui/windows/TrackDesignPlace.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/openrct2-ui/windows/TrackDesignPlace.cpp b/src/openrct2-ui/windows/TrackDesignPlace.cpp index 7c59c90c7f..0e70f09f38 100644 --- a/src/openrct2-ui/windows/TrackDesignPlace.cpp +++ b/src/openrct2-ui/windows/TrackDesignPlace.cpp @@ -219,25 +219,26 @@ namespace OpenRCT2::Ui::Windows if (GameIsNotPaused() || getGameState().cheats.buildInPauseMode) { ClearProvisional(); - auto res = FindValidTrackDesignPlaceHeight(trackLoc, GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST); + CoordsXYZD ghostTrackLoc = trackLoc; + auto res = FindValidTrackDesignPlaceHeight(ghostTrackLoc, GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST); if (res.Error == GameActions::Status::Ok) { // Valid location found. Place the ghost at the location. - auto tdAction = GameActions::TrackDesignAction(trackLoc, *_trackDesign, !gTrackDesignSceneryToggle); + auto tdAction = GameActions::TrackDesignAction(ghostTrackLoc, *_trackDesign, !gTrackDesignSceneryToggle); tdAction.SetFlags(GAME_COMMAND_FLAG_NO_SPEND | GAME_COMMAND_FLAG_GHOST); tdAction.SetCallback([&](const GameActions::GameAction*, const GameActions::Result* result) { if (result->Error == GameActions::Status::Ok) { _placementGhostRideId = result->GetData(); - _placementGhostLoc = trackLoc; + _placementGhostLoc = ghostTrackLoc; _hasPlacementGhost = true; } }); res = GameActions::Execute(&tdAction, getGameState()); cost = res.Error == GameActions::Status::Ok ? res.Cost : kMoney64Undefined; - VirtualFloorSetHeight(trackLoc.z); + VirtualFloorSetHeight(ghostTrackLoc.z); } }