(svn r10117) -Fix [FS#863]: When deleting the vehicles of bankrupt players, delete trains as
authormaedhros
Tue, 12 Jun 2007 17:10:52 +0000
changeset 6876 22305fa54101
parent 6875 e517a59b78e5
child 6877 04af8d4e4203
(svn r10117) -Fix [FS#863]: When deleting the vehicles of bankrupt players, delete trains as
a whole rather than each part individually, as that leads to invalid tests on
parts that have already been deleted.
src/economy.cpp
--- a/src/economy.cpp	Tue Jun 12 15:46:34 2007 +0000
+++ b/src/economy.cpp	Tue Jun 12 17:10:52 2007 +0000
@@ -355,7 +355,30 @@
 					DeleteWindowById(WC_VEHICLE_VIEW, v->index);
 					DeleteWindowById(WC_VEHICLE_DETAILS, v->index);
 					DeleteWindowById(WC_VEHICLE_ORDERS, v->index);
-					DeleteVehicle(v);
+
+					if (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && IsFreeWagon(v))) {
+						switch (v->type) {
+							default: NOT_REACHED();
+
+							case VEH_TRAIN: {
+								Vehicle *u = v;
+								do {
+									Vehicle *next = GetNextVehicle(u);
+									DeleteVehicle(u);
+									u = next;
+								} while (u != NULL);
+							} break;
+
+							case VEH_ROAD:
+							case VEH_SHIP:
+								DeleteVehicle(v);
+								break;
+
+							case VEH_AIRCRAFT:
+								DeleteVehicleChain(v);
+								break;
+						}
+					}
 				} else {
 					v->owner = new_player;
 					v->group_id = DEFAULT_GROUP;