summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2009-04-10 22:47:19 +0000
committerrubidium <rubidium@openttd.org>2009-04-10 22:47:19 +0000
commitf16aa9f50988bbee22c10f48eff2e2c9528db30d (patch)
tree48655aa82d7d4de847c5d6373871160f2d11a5ac
parentbee930f9b3b9dad52945c1186227519cf9d566aa (diff)
downloadopenttd-f16aa9f50988bbee22c10f48eff2e2c9528db30d.tar.xz
(svn r16025) -Fix [FS#2818]: "build separate station" in the station picker would reuse deleted stations.
-rw-r--r--src/station_cmd.cpp16
-rw-r--r--src/station_gui.cpp2
-rw-r--r--src/station_type.h1
3 files changed, 14 insertions, 5 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 2d97c2fd2..63f17d4e9 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -922,6 +922,8 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, DoCommandFlag flags, uin
}
StationID station_to_join = GB(p2, 16, 16);
+ bool reuse = (station_to_join != NEW_STATION);
+ if (!reuse) station_to_join = INVALID_STATION;
bool distant_join = (station_to_join != INVALID_STATION);
if (distant_join && (!_settings_game.station.distant_join_stations || !IsValidStationID(station_to_join))) return CMD_ERROR;
@@ -975,7 +977,7 @@ CommandCost CmdBuildRailroadStation(TileIndex tile_org, DoCommandFlag flags, uin
if (st == NULL && distant_join) st = GetStation(station_to_join);
/* See if there is a deleted station close to us. */
- if (st == NULL) st = GetClosestDeletedStation(tile_org);
+ if (st == NULL && reuse) st = GetClosestDeletedStation(tile_org);
if (st != NULL) {
/* Reuse an existing station. */
@@ -1403,6 +1405,8 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
bool build_over_road = is_drive_through && IsNormalRoadTile(tile);
RoadTypes rts = (RoadTypes)GB(p2, 2, 2);
StationID station_to_join = GB(p2, 16, 16);
+ bool reuse = (station_to_join != NEW_STATION);
+ if (!reuse) station_to_join = INVALID_STATION;
bool distant_join = (station_to_join != INVALID_STATION);
Owner tram_owner = _current_company;
Owner road_owner = _current_company;
@@ -1470,7 +1474,7 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
if (st == NULL && distant_join) st = GetStation(station_to_join);
/* Find a deleted station close to us */
- if (st == NULL) st = GetClosestDeletedStation(tile);
+ if (st == NULL && reuse) st = GetClosestDeletedStation(tile);
/* give us a road stop in the list, and check if something went wrong */
if (!RoadStop::CanAllocateItem()) return_cmd_error(type ? STR_TOO_MANY_TRUCK_STOPS : STR_TOO_MANY_BUS_STOPS);
@@ -1855,6 +1859,8 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
{
bool airport_upgrade = true;
StationID station_to_join = GB(p2, 16, 16);
+ bool reuse = (station_to_join != NEW_STATION);
+ if (!reuse) station_to_join = INVALID_STATION;
bool distant_join = (station_to_join != INVALID_STATION);
if (distant_join && (!_settings_game.station.distant_join_stations || !IsValidStationID(station_to_join))) return CMD_ERROR;
@@ -1919,7 +1925,7 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
if (st == NULL && distant_join) st = GetStation(station_to_join);
/* Find a deleted station close to us */
- if (st == NULL) st = GetClosestDeletedStation(tile);
+ if (st == NULL && reuse) st = GetClosestDeletedStation(tile);
if (st != NULL) {
if (st->owner != _current_company) {
@@ -2175,6 +2181,8 @@ static const byte _dock_h_chk[4] = { 1, 2, 1, 2 };
CommandCost CmdBuildDock(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
{
StationID station_to_join = GB(p2, 16, 16);
+ bool reuse = (station_to_join != NEW_STATION);
+ if (!reuse) station_to_join = INVALID_STATION;
bool distant_join = (station_to_join != INVALID_STATION);
if (distant_join && (!_settings_game.station.distant_join_stations || !IsValidStationID(station_to_join))) return CMD_ERROR;
@@ -2224,7 +2232,7 @@ CommandCost CmdBuildDock(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
if (st == NULL && distant_join) st = GetStation(station_to_join);
/* Find a deleted station close to us */
- if (st == NULL) st = GetClosestDeletedStation(tile);
+ if (st == NULL && reuse) st = GetClosestDeletedStation(tile);
if (st != NULL) {
if (st->owner != _current_company) {
diff --git a/src/station_gui.cpp b/src/station_gui.cpp
index a1a37e5c6..185e8d382 100644
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -1170,7 +1170,7 @@ struct SelectStationWindow : Window {
/* Insert station to be joined into stored command */
SB(this->select_station_cmd.p2, 16, 16,
- (distant_join ? _stations_nearby_list[st_index] : INVALID_STATION));
+ (distant_join ? _stations_nearby_list[st_index] : NEW_STATION));
/* Execute stored Command */
DoCommandP(&this->select_station_cmd);
diff --git a/src/station_type.h b/src/station_type.h
index 854746b0b..3f2e6846b 100644
--- a/src/station_type.h
+++ b/src/station_type.h
@@ -12,6 +12,7 @@ struct Station;
struct RoadStop;
struct StationSpec;
+static const StationID NEW_STATION = 0xFFFE;
static const StationID INVALID_STATION = 0xFFFF;
/** Station types */