mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-02 09:40:35 +00:00
(svn r17592) -Fix [FS#3212](r17436): force all cargo being accepted when industry tiles accept it but industry itself doesn't
This commit is contained in:
parent
12ef0046dd
commit
9cf2e92159
@ -932,7 +932,7 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti
|
||||
/* Give the goods to the industry. */
|
||||
uint accepted = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY);
|
||||
|
||||
/* If there are non-industries around accepting the cargo, accept it all */
|
||||
/* If this cargo type is always accepted, accept all */
|
||||
if (HasBit(st->always_accepted, cargo_type)) accepted = num_pieces;
|
||||
|
||||
/* Determine profit */
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@ public:
|
||||
byte last_vehicle_type;
|
||||
std::list<Vehicle *> loading_vehicles;
|
||||
GoodsEntry goods[NUM_CARGO]; ///< Goods at this station
|
||||
uint32 always_accepted; ///< Bitmask of cargos accepted by town houses and headquarters
|
||||
uint32 always_accepted; ///< Bitmask of always accepted cargo types (by houses, HQs, industry tiles when industry doesn't accept cargo)
|
||||
|
||||
IndustryVector industries_near; ///< Cached list of industries near the station that can accept cargo, @see DeliverGoodsToIndustry()
|
||||
|
||||
|
@ -80,7 +80,7 @@ typedef CommandCost ClearTileProc(TileIndex tile, DoCommandFlag flags);
|
||||
* Tile callback function signature for obtaining cargo acceptance of a tile
|
||||
* @param tile Tile queried for its accepted cargo
|
||||
* @param acceptance Storage destination of the cargo acceptance in 1/8
|
||||
* @param always_accepted Bitmask of town and headquarters-accepted cargo
|
||||
* @param always_accepted Bitmask of always accepted cargo types
|
||||
*/
|
||||
typedef void AddAcceptedCargoProc(TileIndex tile, CargoArray &acceptance, uint32 *always_accepted);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user