Changeset - r14152:d949117093c2
[Not reviewed]
master
0 4 0
rubidium - 14 years ago 2010-01-04 11:35:12
rubidium@openttd.org
(svn r18710) -Fix [FS#3478]: the wrong town is mentioned in the error when trying to make one way roads of town owned roads
4 files changed with 28 insertions and 5 deletions:
0 comments (0 inline, 0 general)
src/company_cmd.cpp
Show inline comments
 
@@ -210,6 +210,12 @@ void SubtractMoneyFromCompanyFract(Compa
 
	if (cost != 0) SubtractMoneyFromAnyCompany(c, CommandCost(cst.GetExpensesType(), cost));
 
}
 

	
 
/**
 
 * Set the right DParams to get the name of an owner.
 
 * @param owner the owner to get the name of.
 
 * @param tile  optional tile to get the right town.
 
 * @pre if tile == 0, then owner can't be OWNER_TOWN.
 
 */
 
void GetNameOfOwner(Owner owner, TileIndex tile)
 
{
 
	SetDParam(2, owner);
 
@@ -222,6 +228,7 @@ void GetNameOfOwner(Owner owner, TileInd
 
			SetDParam(1, owner);
 
		}
 
	} else {
 
		assert(tile != 0);
 
		const Town *t = ClosestTownFromTile(tile, UINT_MAX);
 

	
 
		SetDParam(0, STR_TOWN_NAME);
 
@@ -230,16 +237,32 @@ void GetNameOfOwner(Owner owner, TileInd
 
}
 

	
 

	
 
bool CheckOwnership(Owner owner)
 
/**
 
 * Check whether the current owner owns something.
 
 * If that isn't the case an appropriate error will be given.
 
 * @param owner the owner of the thing to check.
 
 * @param tile  optional tile to get the right town.
 
 * @pre if tile == 0 then the owner can't be OWNER_TOWN.
 
 * @return true iff it's owned by the current company.
 
 */
 
bool CheckOwnership(Owner owner, TileIndex tile)
 
{
 
	assert(owner < OWNER_END);
 
	assert(owner != OWNER_TOWN || tile != 0);
 

	
 
	if (owner == _current_company) return true;
 
	_error_message = STR_ERROR_OWNED_BY;
 
	GetNameOfOwner(owner, 0);
 
	GetNameOfOwner(owner, tile);
 
	return false;
 
}
 

	
 
/**
 
 * Check whether the current owner owns the stuff on
 
 * the given tile.  If that isn't the case an
 
 * appropriate error will be given.
 
 * @param tile the tile to check.
 
 * @return true iff it's owned by the current company.
 
 */
 
bool CheckTileOwnership(TileIndex tile)
 
{
 
	Owner owner = GetTileOwner(tile);
src/functions.h
Show inline comments
 
@@ -26,7 +26,7 @@ void TileLoopClearHelper(TileIndex tile)
 
bool CheckCompanyHasMoney(CommandCost cost);
 
void SubtractMoneyFromCompany(CommandCost cost);
 
void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cost);
 
bool CheckOwnership(Owner owner);
 
bool CheckOwnership(Owner owner, TileIndex tile = 0);
 
bool CheckTileOwnership(TileIndex tile);
 

	
 
/* misc functions */
src/road_cmd.cpp
Show inline comments
 
@@ -503,7 +503,7 @@ CommandCost CmdBuildRoad(TileIndex tile,
 
							if (crossing) return_cmd_error(STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION);
 

	
 
							Owner owner = GetRoadOwner(tile, ROADTYPE_ROAD);
 
							if (owner != OWNER_NONE && !CheckOwnership(owner)) return CMD_ERROR;
 
							if (owner != OWNER_NONE && !CheckOwnership(owner, tile)) return CMD_ERROR;
 

	
 
							if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
 

	
src/tunnelbridge_cmd.cpp
Show inline comments
 
@@ -589,7 +589,7 @@ static inline bool CheckAllowRemoveTunne
 
			if (road_owner == OWNER_NONE || road_owner == OWNER_TOWN) road_owner = _current_company;
 
			if (tram_owner == OWNER_NONE) tram_owner = _current_company;
 

	
 
			return CheckOwnership(road_owner) && CheckOwnership(tram_owner);
 
			return CheckOwnership(road_owner, tile) && CheckOwnership(tram_owner, tile);
 
		}
 

	
 
		case TRANSPORT_RAIL:
0 comments (0 inline, 0 general)