(svn r3261) - Autoreplace: If a replaced vehicle had a custom name, transfer it to the new vehicle. Fixes "[ 1370039 ] Autoreplaced vehicles lose their names"
authorpeter1138
Mon, 05 Dec 2005 16:48:07 +0000
changeset 2716 bc7847ae0e43
parent 2715 0ad451d9264b
child 2717 0f385152f0d3
(svn r3261) - Autoreplace: If a replaced vehicle had a custom name, transfer it to the new vehicle. Fixes "[ 1370039 ] Autoreplaced vehicles lose their names"
vehicle.c
--- a/vehicle.c	Mon Dec 05 12:27:58 2005 +0000
+++ b/vehicle.c	Mon Dec 05 16:48:07 2005 +0000
@@ -1617,6 +1617,7 @@
 	const UnitID cached_unitnumber = old_v->unitnumber;
 	bool new_front = false;
 	Vehicle *new_v = NULL;
+	char vehicle_name[32];
 
 	new_engine_type = EngineReplacement(p, old_v->engine_type);
 	if (new_engine_type == INVALID_ENGINE) new_engine_type = old_v->engine_type;
@@ -1665,6 +1666,13 @@
 		}
 		/* We are done setting up the new vehicle. Now we move the cargo from the old one to the new one */
 		MoveVehicleCargo(new_v->type == VEH_Train ? GetFirstVehicleInChain(new_v) : new_v, old_v);
+
+		// Get the name of the old vehicle if it has a custom name.
+		if ((old_v->string_id & 0xF800) != 0x7800) {
+			vehicle_name[0] = '\0';
+		} else {
+			GetName(old_v->string_id & 0x7FF, vehicle_name);
+		}
 	}
 
 	// sell the engine/ find out how much you get for the old engine
@@ -1675,6 +1683,12 @@
 		new_v->unitnumber = cached_unitnumber;
 	}
 
+	// Transfer the name of the old vehicle.
+	if ((flags & DC_EXEC) && vehicle_name[0] != '\0') {
+		_cmd_text = vehicle_name;
+		DoCommand(0, 0, new_v->index, 0, DC_EXEC, CMD_NAME_VEHICLE);
+	}
+
 	return cost;
 }