From 2c317b7321534d185776f9da0f360b5f3da6c94d Mon Sep 17 00:00:00 2001 From: smatz Date: Tue, 10 Feb 2009 12:49:12 +0000 Subject: (svn r15439) -Fix [FS#2626]: call Vehicle::LeaveStation() before reversing overlength loading train (station triggers were missed, PBS reservation could cause crash) --- src/train_cmd.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 810cee1b0..96c8691a5 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1936,6 +1936,17 @@ CommandCost CmdReverseTrainDirection(TileIndex tile, DoCommandFlag flags, uint32 if (v->vehstatus & VS_CRASHED || v->breakdown_ctr != 0) return CMD_ERROR; if (flags & DC_EXEC) { + /* Properly leave the station if we are loading and won't be loading anymore */ + if (v->current_order.IsType(OT_LOADING)) { + const Vehicle *last = v; + while (last->Next() != NULL) last = last->Next(); + + /* not a station || different station --> leave the station */ + if (!IsTileType(last->tile, MP_STATION) || GetStationIndex(last->tile) != GetStationIndex(v->tile)) { + v->LeaveStation(); + } + } + if (_settings_game.vehicle.train_acceleration_model != TAM_ORIGINAL && v->cur_speed != 0) { ToggleBit(v->u.rail.flags, VRF_REVERSING); } else { -- cgit v1.2.3-70-g09d2