From 2e7dc02b91ed654483cace67bcc4324ab26ed001 Mon Sep 17 00:00:00 2001 From: bjarni Date: Sun, 8 Oct 2006 21:46:05 +0000 Subject: [PATCH] (svn r6697) -Fix: [order refit] if an order refit fails, the vehicle is now stopped and the player gets a message (like vehicle stopped in depot) This should prevent a vehicle from failing to be refitted and then show up and block a station with full load. In such a case, it's better to stop in a depot (that will not stop any other vehicles) and notify the owner --- lang/english.txt | 2 ++ vehicle.c | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lang/english.txt b/lang/english.txt index 5c2244c421..db4b83ae1f 100644 --- a/lang/english.txt +++ b/lang/english.txt @@ -3001,6 +3001,8 @@ STR_MASS_START_LIST_TIP :{BLACK}Click to STR_SHORT_DATE :{WHITE}{DATE_TINY} STR_SIGN_LIST_CAPTION :{WHITE}Sign List - {COMMA} Sign{P "" s} +STR_ORDER_REFIT_FAILED :{WHITE}Order refit failure stopped {STRING} {COMMA} + ############ Lists rail types STR_RAIL_VEHICLES :Rail Vehicles diff --git a/vehicle.c b/vehicle.c index c5fa769c47..59f5476228 100644 --- a/vehicle.c +++ b/vehicle.c @@ -2535,7 +2535,24 @@ void VehicleEnterDepot(Vehicle *v) _current_player = v->owner; cost = DoCommand(v->tile, v->index, t.refit_cargo | t.refit_subtype << 8, DC_EXEC, CMD_REFIT_VEH(v->type)); - if (!CmdFailed(cost) && v->owner == _local_player && cost != 0) ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost); + + if (CmdFailed(cost)) { + v->leave_depot_instantly = false; // We ensure that the vehicle stays in the depot + if (v->owner == _local_player) { + /* Notify the user that we stopped the vehicle */ + switch (v->type) { + case VEH_Train: SetDParam(0, STR_019F_TRAIN); break; + case VEH_Road: SetDParam(0, STR_019C_ROAD_VEHICLE); break; + case VEH_Ship: SetDParam(0, STR_019E_SHIP); break; + case VEH_Aircraft: SetDParam(0, STR_019D_AIRCRAFT); break; + default: NOT_REACHED(); + } + SetDParam(1, v->unitnumber); + AddNewsItem(STR_ORDER_REFIT_FAILED, NEWS_FLAGS(NM_SMALL, NF_VIEWPORT|NF_VEHICLE, NT_ADVICE, 0), v->index, 0); + } + } else if (v->owner == _local_player && cost != 0) { + ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost); + } } if (HASBIT(t.flags, OFB_PART_OF_ORDERS)) {