changeset 13528:cd890b82ec73 draft

(svn r18049) -Fix [FS#3310] (r16448): Crash when an articulated RV is turning on a drive through road station that gets forcefully (bankrupt) removed
author rubidium <rubidium@openttd.org>
date Thu, 12 Nov 2009 17:28:20 +0000
parents 97ee12309872
children 2da61fc67a77
files src/station_cmd.cpp
diffstat 1 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -1649,7 +1649,16 @@
 
 static Vehicle *ClearRoadStopStatusEnum(Vehicle *v, void *)
 {
-	if (v->type == VEH_ROAD) RoadVehicle::From(v)->state &= RVSB_ROAD_STOP_TRACKDIR_MASK;
+	if (v->type == VEH_ROAD) {
+		/* Okay... we are a road vehicle on a drive through road stop.
+		 * But that road stop has just been removed, so we need to make
+		 * sure we are in a valid state... however, vehicles can also
+		 * turn on road stop tiles, so only clear the 'road stop' state
+		 * bits and only when the state was 'in road stop', otherwise
+		 * we'll end up clearing the turn around bits. */
+		RoadVehicle *rv = RoadVehicle::From(v);
+		if (HasBit(rv->state, RVS_IN_DT_ROAD_STOP)) rv->state &= RVSB_ROAD_STOP_TRACKDIR_MASK;
+	}
 
 	return NULL;
 }