summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lang/english.txt1
-rw-r--r--src/newgrf_station.cpp18
-rw-r--r--src/station_cmd.cpp2
3 files changed, 14 insertions, 7 deletions
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 3871c72a8..4c9b9b85e 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -1912,6 +1912,7 @@ STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD :{WHITE}Too clos
STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Adjoins more than one existing station/loading area
STR_3007_TOO_MANY_STATIONS_LOADING :{WHITE}Too many stations/loading areas in this town
STR_3008_TOO_MANY_STATIONS_LOADING :{WHITE}Too many stations/loading areas
+STR_TOO_MANY_STATION_SPECS :{WHITE}Too many railway station parts
STR_TOO_MANY_BUS_STOPS :{WHITE}Too many bus stops
STR_TOO_MANY_TRUCK_STOPS :{WHITE}Too many lorry stations
STR_3009_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Too close to another station/loading area
diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp
index be0253f95..a2ad21ec6 100644
--- a/src/newgrf_station.cpp
+++ b/src/newgrf_station.cpp
@@ -693,16 +693,22 @@ int AllocateSpecToStation(const StationSpec *statspec, Station *st, bool exec)
if (statspec == NULL || st == NULL) return 0;
- /* Check if this spec has already been allocated */
- for (i = 1; i < st->num_specs && i < MAX_SPECLIST; i++) {
- if (st->speclist[i].spec == statspec) return i;
- }
-
for (i = 1; i < st->num_specs && i < MAX_SPECLIST; i++) {
if (st->speclist[i].spec == NULL && st->speclist[i].grfid == 0) break;
}
- if (i == MAX_SPECLIST) return -1;
+ if (i == MAX_SPECLIST) {
+ /* As final effort when the spec list is already full...
+ * try to find the same spec and return that one. This might
+ * result in slighty "wrong" (as per specs) looking stations,
+ * but it's fairly unlikely that one reaches the limit anyways.
+ */
+ for (i = 1; i < st->num_specs && i < MAX_SPECLIST; i++) {
+ if (st->speclist[i].spec == statspec) return i;
+ }
+
+ return -1;
+ }
if (exec) {
if (i >= st->num_specs) {
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index cfa23287d..ca641577b 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -1031,7 +1031,7 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1,
/* Check if we can allocate a custom stationspec to this station */
const StationSpec *statspec = GetCustomStationSpec((StationClassID)GB(p2, 0, 8), GB(p2, 8, 8));
int specindex = AllocateSpecToStation(statspec, st, flags & DC_EXEC);
- if (specindex == -1) return CMD_ERROR;
+ if (specindex == -1) return_cmd_error(STR_TOO_MANY_STATION_SPECS);
if (statspec != NULL) {
/* Perform NewStation checks */