diff --git a/src/pathfinder/yapf/yapf_costrail.hpp b/src/pathfinder/yapf/yapf_costrail.hpp index daf4721e91..e9f1d582af 100644 --- a/src/pathfinder/yapf/yapf_costrail.hpp +++ b/src/pathfinder/yapf/yapf_costrail.hpp @@ -221,10 +221,14 @@ private: TileIndex tile = v->tile; Trackdir trackdir = v->GetVehicleTrackdir(); - CFollowTrackRail ft(v); - TileIndex candidate_tile = INVALID_TILE; + if (IsRailDepotTile(v->tile)) { + candidate_tile = v->tile; + } + + CFollowTrackRail ft(v); + for (;;) { if (IsTileType(tile, MP_RAILWAY) && HasSignalOnTrackdir(tile, trackdir)) { if (HasPbsSignalOnTrackdir(tile, trackdir)) { diff --git a/src/pbs.cpp b/src/pbs.cpp index e087edce0e..ac6f2c7701 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -409,6 +409,10 @@ Train *GetTrainForReservation(TileIndex tile, Track track) */ TileIndex VehiclePosTraceRestrictPreviousSignalCallback(const Train *v, const void *) { + if (IsRailDepotTile(v->tile)) { + return v->tile; + } + // scan forwards from vehicle position, for the case that train is waiting at/approaching PBS signal TileIndex tile = v->tile; diff --git a/src/tracerestrict_gui.cpp b/src/tracerestrict_gui.cpp index 819f0022cf..f241b3335c 100644 --- a/src/tracerestrict_gui.cpp +++ b/src/tracerestrict_gui.cpp @@ -1413,21 +1413,25 @@ public: TraceRestrictItem item = GetSelected(); if (GetTraceRestrictTypeProperties(item).value_type != TRVT_TILE_INDEX) return; - if (!IsPlainRailTile(tile)) { - ShowErrorMessage(error_message, STR_ERROR_THERE_IS_NO_RAILROAD_TRACK, WL_INFO); - return; - } - - if (GetPresentSignals(tile) == 0) { - ShowErrorMessage(error_message, STR_ERROR_THERE_ARE_NO_SIGNALS, WL_INFO); - return; - } - if (!IsTileOwner(tile, _local_company)) { ShowErrorMessage(error_message, STR_ERROR_AREA_IS_OWNED_BY_ANOTHER, WL_INFO); return; } + if (IsRailDepotTile(tile)) { + // OK + } else { + if (!IsPlainRailTile(tile)) { + ShowErrorMessage(error_message, STR_ERROR_THERE_IS_NO_RAILROAD_TRACK, WL_INFO); + return; + } + + if (GetPresentSignals(tile) == 0) { + ShowErrorMessage(error_message, STR_ERROR_THERE_ARE_NO_SIGNALS, WL_INFO); + return; + } + } + TraceRestrictDoCommandP(this->tile, this->track, TRDCT_MODIFY_DUAL_ITEM, this->selected_instruction - 1, tile, STR_TRACE_RESTRICT_ERROR_CAN_T_MODIFY_ITEM); }