From 7ef681eaed3dae29c3145829aab37a78b30b83bd Mon Sep 17 00:00:00 2001 From: Darkvater Date: Fri, 8 Apr 2005 22:44:06 +0000 Subject: (svn r2168) - Fix: Various stages of invisible trains, and wrong v->u.rail.track combinations. When a vehicle was sold its (possibly) assigned road slot for multislot was not cleared, thus resulting in a bug confusion. This should fix [ 1178520 ] Assertion failure in ai.c (invalid v->u.rail.track). With big thanks to TrueLight for the demo-recording patch, BJH for the wonderful savegame, Hackykid for his brilliant suggestions of the problem and Celestar for... ehm, making it all possible ;p --- roadveh_cmd.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'roadveh_cmd.c') diff --git a/roadveh_cmd.c b/roadveh_cmd.c index d868624c7..591bd8879 100644 --- a/roadveh_cmd.c +++ b/roadveh_cmd.c @@ -229,6 +229,15 @@ int32 CmdStartStopRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2) return 0; } +static inline void ClearSlot(Vehicle *v, RoadStop *rs) +{ + DEBUG(ms, 3) ("Multistop: Clearing slot %d at 0x%x", v->u.road.slotindex, rs->xy); + v->u.road.slot = NULL; + v->u.road.slot_age = 0; + if (rs != NULL) + rs->slot[v->u.road.slotindex] = INVALID_SLOT; +} + // p1 = vehicle index in GetVehicle() // p2 not used int32 CmdSellRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2) @@ -253,6 +262,7 @@ int32 CmdSellRoadVeh(int x, int y, uint32 flags, uint32 p1, uint32 p2) RebuildVehicleLists(); InvalidateWindow(WC_COMPANY, v->owner); DeleteWindowById(WC_VEHICLE_VIEW, v->index); + ClearSlot(v, v->u.road.slot); DeleteVehicle(v); } InvalidateWindow(WC_REPLACE_VEHICLE, VEH_Road); // updates the replace Road window @@ -1177,14 +1187,6 @@ static const byte _road_veh_data_1[] = { static const byte _roadveh_data_2[4] = { 0,1,8,9 }; -static inline void ClearSlot(Vehicle *v, RoadStop *rs) -{ - DEBUG(ms, 3) ("Multistop: Clearing slot %d at 0x%x", v->u.road.slotindex, rs->xy); - v->u.road.slot = NULL; - v->u.road.slot_age = 0; - rs->slot[v->u.road.slotindex] = INVALID_SLOT; -} - static void RoadVehController(Vehicle *v) { GetNewVehiclePosResult gp; -- cgit v1.2.3-54-g00ecf