summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorplanetmaker <planetmaker@openttd.org>2015-04-11 11:50:02 +0000
committerplanetmaker <planetmaker@openttd.org>2015-04-11 11:50:02 +0000
commit84e5c5a9cb71ef1df1ded88d9ca424e48cb07dcb (patch)
tree1bc63ee3a91b8ea9b1cd39e82e42044b5c08f238
parent5c80edb7edeb983d65d8fff73c057f0addc2fdb3 (diff)
downloadopenttd-84e5c5a9cb71ef1df1ded88d9ca424e48cb07dcb.tar.xz
(svn r27225) -Change [FS#6262]: Be more lenient about road stop removal when at least one stop could be removed (afd88)
-rw-r--r--src/station_cmd.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 37b553f1a..43b5f8a6e 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -2048,8 +2048,10 @@ CommandCost CmdRemoveRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
TileArea roadstop_area(tile, width, height);
- int quantity = 0;
CommandCost cost(EXPENSES_CONSTRUCTION);
+ CommandCost last_error(STR_ERROR_THERE_IS_NO_STATION);
+ bool had_success = false;
+
TILE_AREA_LOOP(cur_tile, roadstop_area) {
/* Make sure the specified tile is a road stop of the correct type */
if (!IsTileType(cur_tile, MP_STATION) || !IsRoadStop(cur_tile) || (uint32)GetRoadStopType(cur_tile) != GB(p2, 0, 1)) continue;
@@ -2064,10 +2066,13 @@ CommandCost CmdRemoveRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
Owner road_owner = GetRoadOwner(cur_tile, ROADTYPE_ROAD);
Owner tram_owner = GetRoadOwner(cur_tile, ROADTYPE_TRAM);
CommandCost ret = RemoveRoadStop(cur_tile, flags);
- if (ret.Failed()) return ret;
+ if (ret.Failed()) {
+ last_error = ret;
+ continue;
+ }
cost.AddCost(ret);
+ had_success = true;
- quantity++;
/* If the stop was a drive-through stop replace the road */
if ((flags & DC_EXEC) && is_drive_through) {
MakeRoadNormal(cur_tile, road_bits, rts, ClosestTownFromTile(cur_tile, UINT_MAX)->index,
@@ -2085,9 +2090,7 @@ CommandCost CmdRemoveRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
}
}
- if (quantity == 0) return_cmd_error(STR_ERROR_THERE_IS_NO_STATION);
-
- return cost;
+ return had_success ? cost : last_error;
}
/**