summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2010-01-04 11:35:12 +0000
committerrubidium <rubidium@openttd.org>2010-01-04 11:35:12 +0000
commit3e481c4027b04ac85c6551e8a6e543ee0654b091 (patch)
tree23b0414ed5bd96a2499dd1cf05a6957ac55cbedd /src
parentabb147d9742f349513d076a76b2957eb573d78e7 (diff)
downloadopenttd-3e481c4027b04ac85c6551e8a6e543ee0654b091.tar.xz
(svn r18710) -Fix [FS#3478]: the wrong town is mentioned in the error when trying to make one way roads of town owned roads
Diffstat (limited to 'src')
-rw-r--r--src/company_cmd.cpp27
-rw-r--r--src/functions.h2
-rw-r--r--src/road_cmd.cpp2
-rw-r--r--src/tunnelbridge_cmd.cpp2
4 files changed, 28 insertions, 5 deletions
diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp
index 44993becc..92e3c0d96 100644
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -210,6 +210,12 @@ void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cst)
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, TileIndex tile)
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, TileIndex tile)
}
-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);
diff --git a/src/functions.h b/src/functions.h
index 81d1872fd..64684886d 100644
--- a/src/functions.h
+++ b/src/functions.h
@@ -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 */
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp
index 5a5e96257..a2fde8984 100644
--- a/src/road_cmd.cpp
+++ b/src/road_cmd.cpp
@@ -503,7 +503,7 @@ CommandCost CmdBuildRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
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;
diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp
index 0b199bb4e..bdf7ced77 100644
--- a/src/tunnelbridge_cmd.cpp
+++ b/src/tunnelbridge_cmd.cpp
@@ -589,7 +589,7 @@ static inline bool CheckAllowRemoveTunnelBridge(TileIndex tile)
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: