(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)
authorbjarni
Sun, 08 Oct 2006 21:46:05 +0000
changeset 4783 77a455254ab0
parent 4782 3ee91034a50e
child 4784 97863deac573
(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
vehicle.c
--- a/lang/english.txt	Sun Oct 08 21:10:00 2006 +0000
+++ b/lang/english.txt	Sun Oct 08 21:46:05 2006 +0000
@@ -3001,6 +3001,8 @@
 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
--- a/vehicle.c	Sun Oct 08 21:10:00 2006 +0000
+++ b/vehicle.c	Sun Oct 08 21:46:05 2006 +0000
@@ -2535,7 +2535,24 @@
 
 			_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)) {