Mercurial > hg > openttd
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. */