From 7fbd5beb0f92c6f53b4b8d9206773003328b2e7d Mon Sep 17 00:00:00 2001 From: smatz Date: Fri, 26 Dec 2008 19:37:50 +0000 Subject: (svn r14746) -Fix: don't let any disaster vehicle (Helicopter or Airplane) target invalid industry --- src/disaster_cmd.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/disaster_cmd.cpp') diff --git a/src/disaster_cmd.cpp b/src/disaster_cmd.cpp index 36c365d11..910918f8c 100644 --- a/src/disaster_cmd.cpp +++ b/src/disaster_cmd.cpp @@ -1063,6 +1063,22 @@ void StartupDisasters() ResetDisasterDelay(); } +/** Marks all disasters targeting this industry in such a way + * they won't call GetIndustry(v->dest_tile) on invalid industry anymore. + * @param i deleted industry + */ +void ReleaseDisastersTargetingIndustry(IndustryID i) +{ + Vehicle *v; + FOR_ALL_VEHICLES(v) { + /* primary disaster vehicles that have chosen target */ + if (v->type == VEH_DISASTER && (v->subtype == ST_Airplane || v->subtype == ST_Helicopter)) { + /* if it has chosen target, and it is this industry (yes, dest_tile is IndustryID here), set order to "leaving map peacefully" */ + if (v->current_order.GetDestination() > 0 && v->dest_tile == i) v->current_order.SetDestination(3); + } + } +} + void DisasterVehicle::UpdateDeltaXY(Direction direction) { this->x_offs = -1; -- cgit v1.2.3-54-g00ecf