Changeset - r17361:f6bd0f7fe25f
[Not reviewed]
master
0 1 0
frosch - 13 years ago 2011-02-20 15:19:16
frosch@openttd.org
(svn r22117) -Fix [FS#4523-ish]: CanRemoveRoadWithStop() failed for _current_company = OWNER_TOWN, and for OWNER_NONE-owned road.
1 file changed with 14 insertions and 9 deletions:
0 comments (0 inline, 0 general)
src/station_cmd.cpp
Show inline comments
 
@@ -3443,34 +3443,39 @@ static void ChangeTileOwner_Station(Tile
 
 * Check if a drive-through road stop tile can be cleared.
 
 * Road stops built on town-owned roads check the conditions
 
 * that would allow clearing of the original road.
 
 * @param tile road stop tile to check
 
 * @param flags command flags
 
 * @return true if the road can be cleared
 
 */
 
static bool CanRemoveRoadWithStop(TileIndex tile, DoCommandFlag flags)
 
{
 
	/* Yeah... water can always remove stops, right? */
 
	if (_current_company == OWNER_WATER) return true;
 

	
 
	Owner road_owner = _current_company;
 
	Owner tram_owner = _current_company;
 

	
 
	RoadTypes rts = GetRoadTypes(tile);
 
	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).Failed()) || CheckOwnership(tram_owner).Failed()) return false;
 

	
 
	return road_owner != OWNER_TOWN || CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, ROADTYPE_ROAD), OWNER_TOWN, ROADTYPE_ROAD, flags).Succeeded();
 
	if (HasBit(rts, ROADTYPE_TRAM)) {
 
		Owner tram_owner = GetRoadOwner(tile, ROADTYPE_TRAM);
 
		if (tram_owner != OWNER_NONE && CheckOwnership(tram_owner).Failed()) return false;
 
	}
 
	if (HasBit(rts, ROADTYPE_ROAD)) {
 
		Owner road_owner = GetRoadOwner(tile, ROADTYPE_ROAD);
 
		if (road_owner != OWNER_TOWN) {
 
			if (road_owner != OWNER_NONE && CheckOwnership(road_owner).Failed()) return false;
 
		} else {
 
			if (CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, ROADTYPE_ROAD), OWNER_TOWN, ROADTYPE_ROAD, flags).Failed()) return false;
 
		}
 
	}
 

	
 
	return true;
 
}
 

	
 
CommandCost ClearTile_Station(TileIndex tile, DoCommandFlag flags)
 
{
 
	if (flags & DC_AUTO) {
 
		switch (GetStationType(tile)) {
 
			default: break;
 
			case STATION_RAIL:     return_cmd_error(STR_ERROR_MUST_DEMOLISH_RAILROAD);
 
			case STATION_WAYPOINT: return_cmd_error(STR_ERROR_BUILDING_MUST_BE_DEMOLISHED);
 
			case STATION_AIRPORT:  return_cmd_error(STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST);
 
			case STATION_TRUCK:    return_cmd_error(HasTileRoadType(tile, ROADTYPE_TRAM) ? STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST : STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST);
 
			case STATION_BUS:      return_cmd_error(HasTileRoadType(tile, ROADTYPE_TRAM) ? STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST : STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST);
0 comments (0 inline, 0 general)