diff options
author | rubidium <rubidium@openttd.org> | 2007-09-05 21:05:12 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-09-05 21:05:12 +0000 |
commit | 15ea3be98646a49c2b4806c7b306be610b0c7624 (patch) | |
tree | 6bc71a794515101968861c6954488b7eccabf57c | |
parent | 104300c9fae8923edcf85f3b4f5b69e780f45887 (diff) | |
download | openttd-15ea3be98646a49c2b4806c7b306be610b0c7624.tar.xz |
(svn r11048) -Fix [FS#1206]: several cases where (re)moving eninges on a train would corrupt the vehicle counts for the groups.
-rw-r--r-- | src/train_cmd.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index a709470fc..a475c61ec 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1025,10 +1025,11 @@ CommandCost CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p /* If we move the front Engine and if the second vehicle is not an engine add the whole vehicle to the DEFAULT_GROUP */ if (IsFrontEngine(src) && !IsDefaultGroupID(src->group_id)) { - const Vehicle *v = GetNextVehicle(src); + Vehicle *v = GetNextVehicle(src); - if (v != NULL && !IsTrainEngine(v)) { - DoCommand(tile, DEFAULT_GROUP, v->index, flags, CMD_ADD_VEHICLE_GROUP); + if (v != NULL && IsTrainEngine(v)) { + v->group_id = src->group_id; + src->group_id = DEFAULT_GROUP; } } @@ -1079,6 +1080,7 @@ CommandCost CmdMoveRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p /* the vehicle was previously a loco. need to free the order list and delete vehicle windows etc. */ DeleteWindowById(WC_VEHICLE_VIEW, src->index); DeleteVehicleOrders(src); + RemoveVehicleFromGroup(src); } if (IsFrontEngine(src) || IsFreeWagon(src)) { @@ -1268,6 +1270,7 @@ CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) new_f->cur_order_index = first->cur_order_index; new_f->orders = first->orders; new_f->num_orders = first->num_orders; + new_f->group_id = first->group_id; if (first->prev_shared != NULL) { first->prev_shared->next_shared = new_f; @@ -1277,8 +1280,6 @@ CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) if (first->next_shared != NULL) { first->next_shared->prev_shared = new_f; new_f->next_shared = first->next_shared; - } else { - RemoveVehicleFromGroup(v); } /* @@ -1289,6 +1290,7 @@ CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) first->orders = NULL; first->prev_shared = NULL; first->next_shared = NULL; + first->group_id = DEFAULT_GROUP; /* If we deleted a window then open a new one for the 'new' train */ if (IsLocalPlayer() && w != NULL) ShowVehicleViewWindow(new_f); @@ -1372,8 +1374,8 @@ CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) if (flags & DC_EXEC) { first = UnlinkWagon(v, first); DeleteDepotHighlightOfVehicle(v); - delete v; RemoveVehicleFromGroup(v); + delete v; } } |