mirror of https://github.com/OpenTTD/OpenTTD
(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.
parent
8b9a2218de
commit
c2ec2e2db3
|
@ -373,7 +373,7 @@ void SetTrainGroupID(Train *v, GroupID new_g)
|
||||||
{
|
{
|
||||||
if (!Group::IsValidID(new_g) && !IsDefaultGroupID(new_g)) return;
|
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()) {
|
for (Vehicle *u = v; u != NULL; u = u->Next()) {
|
||||||
if (u->IsEngineCountable()) UpdateNumEngineGroup(u->engine_type, u->group_id, new_g);
|
if (u->IsEngineCountable()) UpdateNumEngineGroup(u->engine_type, u->group_id, new_g);
|
||||||
|
|
|
@ -1441,8 +1441,13 @@ CommandCost CmdMoveRailVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||||
/* We are going to be move to another train. So we
|
/* We are going to be move to another train. So we
|
||||||
* are no part of this group anymore. In case we
|
* are no part of this group anymore. In case we
|
||||||
* are not moving group... well, then we do not need
|
* are not moving group... well, then we do not need
|
||||||
* to move. */
|
* to move.
|
||||||
if (dst_head != NULL && dst_head != src) DecreaseGroupNumVehicle(src->group_id);
|
* 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
|
/* Delete orders, group stuff and the unit number as we're not the
|
||||||
* front of any vehicle anymore. */
|
* front of any vehicle anymore. */
|
||||||
|
|
Loading…
Reference in New Issue