summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-10-27 11:20:47 +0000
committerrubidium <rubidium@openttd.org>2007-10-27 11:20:47 +0000
commit4e822be109273cf5bb3b1aeb022d5300345f6c0d (patch)
tree6c17e530a7d48ad0d0ccae9ef1975ef83bd3a7d8
parent5c3b19ec893cae5465850e3a4bed07d064ed7bd8 (diff)
downloadopenttd-4e822be109273cf5bb3b1aeb022d5300345f6c0d.tar.xz
(svn r11349) -Fix [FS#1372]: crash when moving "invalid" cargo to a station.
-rw-r--r--src/industry_cmd.cpp45
1 files changed, 19 insertions, 26 deletions
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);
+ }
}
}