@ -527,15 +527,15 @@ Vehicle *_first_veh_in_depot_list;
void VehicleEnteredDepotThisTick ( Vehicle * v )
{
// we need to set v->leave_depot_instantly as we have no control of it's contents at this time
if ( ! HASBIT ( v - > current_order . flags , OFB_HALT_IN_DEPOT ) ) {
if ( HASBIT ( v - > current_order . flags , OFB_HALT_IN_DEPOT ) & & ! HASBIT ( v - > current_order . flags , OFB_PART_OF_ORDERS ) ) {
// we keep the vehicle in the depot since the user ordered it to stay
v - > leave_depot_instantly = false ;
} else {
// the vehicle do not plan on stopping in the depot, so we stop it to ensure that it will not reserve the path
// out of the depot before we might autoreplace it to a different engine. The new engine would not own the reserved path
// we store that we stopped the vehicle, so autoreplace can start it again
v - > vehstatus | = VS_STOPPED ;
v - > leave_depot_instantly = true ;
} else {
// we keep the vehicle in the depot
v - > leave_depot_instantly = false ;
}
if ( _first_veh_in_depot_list = = NULL ) {
@ -1623,6 +1623,8 @@ static void MaybeReplaceVehicle(Vehicle *v)
assert ( v - > type = = VEH_Train | | v - > type = = VEH_Road | | v - > type = = VEH_Ship | | v - > type = = VEH_Aircraft ) ;
assert ( v - > vehstatus & VS_STOPPED ) ; // the vehicle should have been stopped in VehicleEnteredDepotThisTick() if needed
if ( v - > leave_depot_instantly ) {
// we stopped the vehicle to do this, so we have to remember to start it again when we are done
// we need to store this info as the engine might be replaced and lose this info