From b169fceabc420305384679755620f4d464e2a9ac Mon Sep 17 00:00:00 2001 From: rubidium Date: Tue, 14 Aug 2007 17:05:33 +0000 Subject: (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. --- src/road_cmd.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index c79d263d9..d0a65fea4 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -673,7 +673,7 @@ CommandCost CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 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 @@ CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint3 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 @@ CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint3 /* 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; -- cgit v1.2.3-70-g09d2