diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 19c044e317..7bab2a2544 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -155,7 +155,9 @@ static const byte _track_sloped_sprites[14] = { static bool EnsureNoTrainOnTrack(TileIndex tile, Track track) { TrackBits rail_bits = TrackToTrackBits(track); - return EnsureNoTrainOnTrackBits(tile, rail_bits); + CommandCost ret = EnsureNoTrainOnTrackBits(tile, rail_bits); + ret.SetGlobalErrorMessage(); + return ret.Succeeded(); } /** Check that the new track bits may be built. diff --git a/src/signal.cpp b/src/signal.cpp index 778e19c0e3..cdcde264ec 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -301,7 +301,8 @@ static SigFlags ExploreSegment(Owner owner) if (tracks == TRACK_BIT_HORZ || tracks == TRACK_BIT_VERT) { // there is exactly one incidating track, no need to check tracks = tracks_masked; - if (!(flags & SF_TRAIN) && !EnsureNoTrainOnTrackBits(tile, tracks)) flags |= SF_TRAIN; + /* If no train detected yet, and there is not no train -> there is a train -> set the flag */ + if (!(flags & SF_TRAIN) && EnsureNoTrainOnTrackBits(tile, tracks).Failed()) flags |= SF_TRAIN; } else { if (tracks_masked == TRACK_BIT_NONE) continue; // no incidating track if (!(flags & SF_TRAIN) && HasVehicleOnPos(tile, NULL, &TrainOnTileEnum)) flags |= SF_TRAIN; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 312813c36a..44e3991ff8 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -472,15 +472,15 @@ static Vehicle *EnsureNoTrainOnTrackProc(Vehicle *v, void *data) * @param track_bits The track bits. * @return \c true if no train that interacts, is found. \c false if a train is found. */ -bool EnsureNoTrainOnTrackBits(TileIndex tile, TrackBits track_bits) +CommandCost EnsureNoTrainOnTrackBits(TileIndex tile, TrackBits track_bits) { /* Value v is not safe in MP games, however, it is used to generate a local * error message only (which may be different for different machines). * Such a message does not affect MP synchronisation. */ Vehicle *v = VehicleFromPos(tile, &track_bits, &EnsureNoTrainOnTrackProc, true); - if (v != NULL) _error_message = STR_ERROR_TRAIN_IN_THE_WAY + v->type; - return v == NULL; + if (v != NULL) return_cmd_error(STR_ERROR_TRAIN_IN_THE_WAY + v->type); + return CommandCost(); } static void UpdateNewVehiclePosHash(Vehicle *v, bool remove) diff --git a/src/vehicle_func.h b/src/vehicle_func.h index ed9f16e659..a0b976ef4d 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -158,7 +158,7 @@ static inline uint32 GetCmdSendToDepot(const BaseVehicle *v) } CommandCost EnsureNoVehicleOnGround(TileIndex tile); -bool EnsureNoTrainOnTrackBits(TileIndex tile, TrackBits track_bits); +CommandCost EnsureNoTrainOnTrackBits(TileIndex tile, TrackBits track_bits); void StopAllVehicles(); extern VehicleID _vehicle_id_ctr_day;