changeset 13958:158476c4d72c draft

(svn r18494) -Fix (r18474): crash when moving non-engine to new free wagon chain and group count was off when moving a front engine within the same train and the new front isn't an engine.
author rubidium <rubidium@openttd.org>
date Sun, 13 Dec 2009 22:17:12 +0000
parents 74d0f46626a8
children 1956f0f15f37
files src/group_cmd.cpp src/train_cmd.cpp
diffstat 2 files changed, 8 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/group_cmd.cpp
+++ b/src/group_cmd.cpp
@@ -373,7 +373,7 @@
 {
 	if (!Group::IsValidID(new_g) && !IsDefaultGroupID(new_g)) return;
 
-	assert(v->IsFrontEngine());
+	assert(v->IsFrontEngine() || IsDefaultGroupID(new_g));
 
 	for (Vehicle *u = v; u != NULL; u = u->Next()) {
 		if (u->IsEngineCountable()) UpdateNumEngineGroup(u->engine_type, u->group_id, new_g);
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -1441,8 +1441,13 @@
 			/* We are going to be move to another train. So we
 			 * are no part of this group anymore. In case we
 			 * are not moving group... well, then we do not need
-			 * to move. */
-			if (dst_head != NULL && dst_head != src) DecreaseGroupNumVehicle(src->group_id);
+			 * to move.
+			 * Or we are moving to later in the train and our
+			 * new head isn't a front engine anymore.
+			 */
+			if (dst_head != NULL ? dst_head != src : !src_head->IsFrontEngine()) {
+				DecreaseGroupNumVehicle(src->group_id);
+			}
 
 			/* Delete orders, group stuff and the unit number as we're not the
 			 * front of any vehicle anymore. */