(svn r14746) -Fix: don't let any disaster vehicle (Helicopter or Airplane) target invalid industry

pull/155/head
smatz 16 years ago
parent 047e40d33f
commit 7fbd5beb0f

@ -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;

@ -238,6 +238,8 @@ const IndustryTileSpec *GetIndustryTileSpec(IndustryGfx gfx); ///< Array of ind
void ResetIndustries();
void PlantRandomFarmField(const Industry *i);
void ReleaseDisastersTargetingIndustry(IndustryID);
/* writable arrays of specs */
extern IndustrySpec _industry_specs[NUM_INDUSTRYTYPES];
extern IndustryTileSpec _industry_tile_specs[NUM_INDUSTRYTILES];

@ -166,6 +166,9 @@ Industry::~Industry()
} END_TILE_LOOP(tile_cur, 42, 42, this->xy - TileDiff(21, 21))
}
/* don't let any disaster vehicle target invalid industry */
ReleaseDisastersTargetingIndustry(this->index);
DecIndustryTypeCount(this->type);
DeleteSubsidyWithIndustry(this->index);

Loading…
Cancel
Save