Mercurial > hg > openttd
changeset 7442:60cf5845f300 draft
(svn r10890) -Fix [FS#1125]: removing road with the road removal tool would also work with a negative bank account, making the bank account even more negative than it was.
author | rubidium <rubidium@openttd.org> |
---|---|
date | Tue, 14 Aug 2007 17:05:33 +0000 |
parents | 25df1c3356e9 |
children | 823cd23494ea |
files | src/road_cmd.cpp |
diffstat | 1 files changed, 14 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -673,7 +673,7 @@ CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2) { TileIndex start_tile, tile; - CommandCost cost, ret; + CommandCost cost, ret, money; SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); @@ -695,6 +695,7 @@ p2 ^= IS_INT_INSIDE(p2 & 3, 1, 3) ? 3 : 0; } + money.AddCost(GetAvailableMoneyForCommand()); tile = start_tile; /* Start tile is the small number. */ for (;;) { @@ -705,8 +706,18 @@ /* try to remove the halves. */ if (bits != 0) { - ret = DoCommand(tile, rt << 4 | bits, 0, flags, CMD_REMOVE_ROAD); - if (CmdSucceeded(ret)) cost.AddCost(ret); + ret = DoCommand(tile, rt << 4 | bits, 0, flags & ~DC_EXEC, CMD_REMOVE_ROAD); + if (CmdSucceeded(ret)) { + if (flags & DC_EXEC) { + money.AddCost(-ret.GetCost()); + if (money.GetCost() < 0) { + _additional_cash_required = DoCommand(end_tile, start_tile, p2, flags & ~DC_EXEC, CMD_REMOVE_LONG_ROAD).GetCost(); + return cost; + } + DoCommand(tile, rt << 4 | bits, 0, flags, CMD_REMOVE_ROAD); + } + cost.AddCost(ret); + } } if (tile == end_tile) break;