summaryrefslogtreecommitdiff
path: root/src/station_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/station_cmd.cpp')
-rw-r--r--src/station_cmd.cpp53
1 files changed, 39 insertions, 14 deletions
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index 3747ae5e1..40efc314c 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -865,8 +865,10 @@ static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags
Owner road_owner = GetRoadOwner(cur_tile, ROADTYPE_ROAD);
if (road_owner == OWNER_TOWN) {
if (!_settings_game.construction.road_stop_on_town_road) return_cmd_error(STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD);
- } else if (!_settings_game.construction.road_stop_on_competitor_road && road_owner != OWNER_NONE && !CheckOwnership(road_owner)) {
- return CMD_ERROR;
+ } else if (!_settings_game.construction.road_stop_on_competitor_road && road_owner != OWNER_NONE) {
+ CommandCost ret = CheckOwnership(road_owner);
+ ret.SetGlobalErrorMessage();
+ if (ret.Failed()) return ret;
}
num_roadbits += CountBits(GetRoadBits(cur_tile, ROADTYPE_ROAD));
}
@@ -874,8 +876,10 @@ static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags
/* There is a tram, check if we can build road+tram stop over it. */
if (HasBit(cur_rts, ROADTYPE_TRAM)) {
Owner tram_owner = GetRoadOwner(cur_tile, ROADTYPE_TRAM);
- if (!_settings_game.construction.road_stop_on_competitor_road && tram_owner != OWNER_NONE && !CheckOwnership(tram_owner)) {
- return CMD_ERROR;
+ if (!_settings_game.construction.road_stop_on_competitor_road && tram_owner != OWNER_NONE) {
+ CommandCost ret = CheckOwnership(tram_owner);
+ ret.SetGlobalErrorMessage();
+ if (ret.Failed()) return ret;
}
num_roadbits += CountBits(GetRoadBits(cur_tile, ROADTYPE_TRAM));
}
@@ -1383,7 +1387,14 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, SmallVector<T *, 4> &affected
/* Check ownership of station */
T *st = T::GetByTile(tile);
if (st == NULL) continue;
- if (_current_company != OWNER_WATER && !CheckOwnership(st->owner)) continue;
+
+ if (_current_company != OWNER_WATER) {
+ CommandCost ret = CheckOwnership(st->owner);
+ if (ret.Failed()) {
+ ret.SetGlobalErrorMessage();
+ continue;
+ }
+ }
/* Do not allow removing from stations if non-uniform stations are not enabled
* The check must be here to give correct error message
@@ -1529,7 +1540,11 @@ template <class T>
CommandCost RemoveRailStation(T *st, DoCommandFlag flags)
{
/* Current company owns the station? */
- if (_current_company != OWNER_WATER && !CheckOwnership(st->owner)) return CMD_ERROR;
+ if (_current_company != OWNER_WATER) {
+ CommandCost ret = CheckOwnership(st->owner);
+ ret.SetGlobalErrorMessage();
+ if (ret.Failed()) return ret;
+ }
/* determine width and height of platforms */
TileArea ta = st->train_station;
@@ -1829,8 +1844,10 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags)
{
Station *st = Station::GetByTile(tile);
- if (_current_company != OWNER_WATER && !CheckOwnership(st->owner)) {
- return CMD_ERROR;
+ if (_current_company != OWNER_WATER) {
+ CommandCost ret = CheckOwnership(st->owner);
+ ret.SetGlobalErrorMessage();
+ if (ret.Failed()) return ret;
}
bool is_truck = IsTruckStop(tile);
@@ -2241,8 +2258,10 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags)
{
Station *st = Station::GetByTile(tile);
- if (_current_company != OWNER_WATER && !CheckOwnership(st->owner)) {
- return CMD_ERROR;
+ if (_current_company != OWNER_WATER) {
+ CommandCost ret = CheckOwnership(st->owner);
+ ret.SetGlobalErrorMessage();
+ if (ret.Failed()) return ret;
}
tile = st->airport.tile;
@@ -2456,12 +2475,14 @@ CommandCost CmdBuildDock(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
static CommandCost RemoveDock(TileIndex tile, DoCommandFlag flags)
{
Station *st = Station::GetByTile(tile);
- if (!CheckOwnership(st->owner)) return CMD_ERROR;
+ CommandCost ret = CheckOwnership(st->owner);
+ ret.SetGlobalErrorMessage();
+ if (ret.Failed()) return ret;
TileIndex tile1 = st->dock_tile;
TileIndex tile2 = tile1 + TileOffsByDiagDir(GetDockDirection(tile1));
- CommandCost ret = EnsureNoVehicleOnGround(tile1);
+ ret = EnsureNoVehicleOnGround(tile1);
if (ret.Succeeded()) ret = EnsureNoVehicleOnGround(tile2);
ret.SetGlobalErrorMessage();
if (ret.Failed()) return ret;
@@ -3194,7 +3215,11 @@ static bool IsUniqueStationName(const char *name)
CommandCost CmdRenameStation(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
{
Station *st = Station::GetIfValid(p1);
- if (st == NULL || !CheckOwnership(st->owner)) return CMD_ERROR;
+ if (st == NULL) return CMD_ERROR;
+
+ CommandCost ret = CheckOwnership(st->owner);
+ ret.SetGlobalErrorMessage();
+ if (ret.Failed()) return ret;
bool reset = StrEmpty(text);
@@ -3441,7 +3466,7 @@ static bool CanRemoveRoadWithStop(TileIndex tile, DoCommandFlag flags)
if (HasBit(rts, ROADTYPE_ROAD)) road_owner = GetRoadOwner(tile, ROADTYPE_ROAD);
if (HasBit(rts, ROADTYPE_TRAM)) tram_owner = GetRoadOwner(tile, ROADTYPE_TRAM);
- if ((road_owner != OWNER_TOWN && !CheckOwnership(road_owner)) || !CheckOwnership(tram_owner)) return false;
+ if ((road_owner != OWNER_TOWN && CheckOwnership(road_owner).Failed()) || CheckOwnership(tram_owner).Failed()) return false;
return road_owner != OWNER_TOWN || CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, ROADTYPE_ROAD), OWNER_TOWN, ROADTYPE_ROAD, flags).Succeeded();
}