From 9cf2e921599e222a58884179e6c435f731f3d149 Mon Sep 17 00:00:00 2001 From: smatz Date: Sun, 20 Sep 2009 18:52:12 +0000 Subject: (svn r17592) -Fix [FS#3212](r17436): force all cargo being accepted when industry tiles accept it but industry itself doesn't --- src/industry_cmd.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'src/industry_cmd.cpp') diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index ec83f8d6c..fe992083e 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -429,9 +429,30 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, ui } } + const Industry *ind = Industry::GetByTile(tile); for (byte i = 0; i < lengthof(itspec->accepts_cargo); i++) { CargoID a = accepts_cargo[i]; - if (a != CT_INVALID) acceptance[a] += cargo_acceptance[i]; + if (a == CT_INVALID) continue; // work only with valid cargos + + /* Add accepted cargo */ + acceptance[a] += cargo_acceptance[i]; + + /* Maybe set 'always accepted' bit (if it's not set already) */ + if (HasBit(*always_accepted, a)) continue; + + bool accepts = false; + for (uint cargo_index = 0; cargo_index < lengthof(ind->accepts_cargo); cargo_index++) { + /* Test whether the industry itself accepts the cargo type */ + if (ind->accepts_cargo[cargo_index] == a) { + accepts = true; + break; + } + } + + if (accepts) continue; + + /* If the industry itself doesn't accept this cargo, set 'always accepted' bit */ + SetBit(*always_accepted, a); } } -- cgit v1.2.3-70-g09d2