From 21981fd8cb00380c79e34a85609598ea805c6e74 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sat, 27 Oct 2007 11:20:47 +0000 Subject: (svn r11349) -Fix [FS#1372]: crash when moving "invalid" cargo to a station. --- src/industry_cmd.cpp | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 9f7650b3f..edce756fc 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -405,41 +405,34 @@ static void TransportIndustryGoods(TileIndex tile) { Industry *i = GetIndustryByTile(tile); const IndustrySpec *indspec = GetIndustrySpec(i->type); - uint cw, am; + bool moved_cargo = false; - cw = min(i->produced_cargo_waiting[0], 255); - if (cw > indspec->minimal_cargo/* && i->produced_cargo[0] != 0xFF*/) { - i->produced_cargo_waiting[0] -= cw; + for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) { + uint cw = min(i->produced_cargo_waiting[j], 255); + if (cw > indspec->minimal_cargo && i->produced_cargo[j] != CT_INVALID) { + i->produced_cargo_waiting[j] -= cw; - /* fluctuating economy? */ - if (_economy.fluct <= 0) cw = (cw + 1) / 2; + /* fluctuating economy? */ + if (_economy.fluct <= 0) cw = (cw + 1) / 2; - i->this_month_production[0] += cw; + i->this_month_production[j] += cw; - am = MoveGoodsToStation(i->xy, i->width, i->height, i->produced_cargo[0], cw); - i->this_month_transported[0] += am; - if (am != 0 && !StartStopIndustryTileAnimation(i, IAT_INDUSTRY_DISTRIBUTES_CARGO)) { - uint newgfx = GetIndustryTileSpec(GetIndustryGfx(tile))->anim_production; + uint am = MoveGoodsToStation(i->xy, i->width, i->height, i->produced_cargo[j], cw); + i->this_month_transported[j] += am; - if (newgfx != INDUSTRYTILE_NOANIM) { - ResetIndustryConstructionStage(tile); - SetIndustryCompleted(tile, true); - SetIndustryGfx(tile, newgfx); - MarkTileDirtyByTile(tile); - } + moved_cargo |= (am != 0); } } - cw = min(i->produced_cargo_waiting[1], 255); - if (cw > indspec->minimal_cargo) { - i->produced_cargo_waiting[1] -= cw; - - if (_economy.fluct <= 0) cw = (cw + 1) / 2; - - i->this_month_production[1] += cw; + if (moved_cargo && !StartStopIndustryTileAnimation(i, IAT_INDUSTRY_DISTRIBUTES_CARGO)) { + uint newgfx = GetIndustryTileSpec(GetIndustryGfx(tile))->anim_production; - am = MoveGoodsToStation(i->xy, i->width, i->height, i->produced_cargo[1], cw); - i->this_month_transported[1] += am; + if (newgfx != INDUSTRYTILE_NOANIM) { + ResetIndustryConstructionStage(tile); + SetIndustryCompleted(tile, true); + SetIndustryGfx(tile, newgfx); + MarkTileDirtyByTile(tile); + } } } -- cgit v1.2.3-70-g09d2