From 8ee4a6e7f29714590f9b2a6d232c4ffb23e54e53 Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 5 Feb 2010 21:51:26 +0000 Subject: (svn r19024) -Fix [FS#3577]: mass stopping/starting/autoreplacing gave empty errors when there were no vehicles --- src/vehicle_cmd.cpp | 45 +++++++-------------------------------------- 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index fde7f0b4a..299981663 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -130,7 +130,6 @@ CommandCost CmdStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, CommandCost CmdMassStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { VehicleList list; - CommandCost return_value = CMD_ERROR; VehicleType vehicle_type = (VehicleType)GB(p2, 0, 5); bool start_stop = HasBit(p2, 5); bool vehicle_list_window = HasBit(p2, 6); @@ -158,17 +157,11 @@ CommandCost CmdMassStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 } } - CommandCost ret = DoCommand(tile, v->index, 0, flags, CMD_START_STOP_VEHICLE); - - if (ret.Succeeded()) { - return_value = CommandCost(); - /* We know that the command is valid for at least one vehicle. - * If we haven't set DC_EXEC, then there is no point in continueing because it will be valid */ - if (!(flags & DC_EXEC)) break; - } + /* Just try and don't care if some vehicle's can't be stopped. */ + DoCommand(tile, v->index, 0, flags, CMD_START_STOP_VEHICLE); } - return return_value; + return CommandCost(); } /** Sells all vehicles in a depot @@ -199,14 +192,12 @@ CommandCost CmdDepotSellAllVehicles(TileIndex tile, DoCommandFlag flags, uint32 return cost; } -/** Autoreplace all vehicles in the depot - * Note: this command can make incorrect cost estimations - * Luckily the final price can only drop, not increase. This is due to the fact that - * estimation can't predict wagon removal so it presumes worst case which is no income from selling wagons. +/** + * Autoreplace all vehicles in the depot * @param tile Tile of the depot where the vehicles are * @param flags type of operation * @param p1 Type of vehicle - * @param p2 If bit 0 is set, then either replace all or nothing (instead of replacing until money runs out) + * @param p2 unused * @param text unused * @return the cost of this operation or an error */ @@ -215,15 +206,12 @@ CommandCost CmdDepotMassAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 VehicleList list; CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES); VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8); - bool all_or_nothing = HasBit(p2, 0); if (!IsDepotTile(tile) || !IsTileOwner(tile, _current_company)) return CMD_ERROR; /* Get the list of vehicles in the depot */ BuildDepotVehicleList(vehicle_type, tile, &list, &list, true); - bool did_something = false; - for (uint i = 0; i < list.Length(); i++) { const Vehicle *v = list[i]; @@ -232,27 +220,8 @@ CommandCost CmdDepotMassAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 CommandCost ret = DoCommand(0, v->index, 0, flags, CMD_AUTOREPLACE_VEHICLE); - if (ret.Succeeded()) { - did_something = true; - cost.AddCost(ret); - } else { - if (ret.GetErrorMessage() != STR_ERROR_AUTOREPLACE_NOTHING_TO_DO && all_or_nothing) { - /* We failed to replace a vehicle even though we set all or nothing. - * We should never reach this if DC_EXEC is set since then it should - * have failed the estimation guess. */ - assert(!(flags & DC_EXEC)); - /* Now we will have to return an error. */ - return CMD_ERROR; - } - } - } - - if (!did_something) { - /* Either we didn't replace anything or something went wrong. - * Either way we want to return an error and not execute this command. */ - cost = CMD_ERROR; + if (ret.Succeeded()) cost.AddCost(ret); } - return cost; } -- cgit v1.2.3-54-g00ecf