summaryrefslogtreecommitdiff
path: root/src/economy.cpp
diff options
context:
space:
mode:
authorSamu <dj_samu@hotmail.com>2019-02-04 00:44:50 +0000
committerMichael Lutz <michi@icosahedron.de>2019-03-02 18:14:45 +0100
commit780593ae6010adb3e80620cfcac99934330a14ae (patch)
tree659bc7ae3cd5df578654b79eb936ade98ba03e8f /src/economy.cpp
parentcbaf52fbe1aaf7fc34cd585739b4f9fc10af1ad8 (diff)
downloadopenttd-780593ae6010adb3e80620cfcac99934330a14ae.tar.xz
Fix #6633: Cargo monitor industry delivery now accounts for which IndustryID the cargo was delivered to
Diffstat (limited to 'src/economy.cpp')
-rw-r--r--src/economy.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/economy.cpp b/src/economy.cpp
index 74c4cf079..898bc5447 100644
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -1030,9 +1030,10 @@ static SmallIndustryList _cargo_delivery_destinations;
* @param cargo_type Type of cargo delivered
* @param num_pieces Amount of cargo delivered
* @param source The source of the cargo
+ * @param company The company delivering the cargo
* @return actually accepted pieces of cargo
*/
-static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source)
+static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source, CompanyID company)
{
/* Find the nearest industrytile to the station sign inside the catchment area, whose industry accepts the cargo.
* This fails in three cases:
@@ -1065,6 +1066,9 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n
ind->last_cargo_accepted_at[cargo_index] = _date;
num_pieces -= amount;
accepted += amount;
+
+ /* Update the cargo monitor. */
+ AddCargoDelivery(cargo_type, company, amount, ST_INDUSTRY, source, st, ind->index);
}
return accepted;
@@ -1090,30 +1094,30 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti
Station *st = Station::Get(dest);
/* Give the goods to the industry. */
- uint accepted = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY);
+ uint accepted_ind = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY, company->index);
/* If this cargo type is always accepted, accept all */
- if (HasBit(st->always_accepted, cargo_type)) accepted = num_pieces;
+ uint accepted_total = HasBit(st->always_accepted, cargo_type) ? num_pieces : accepted_ind;
/* Update station statistics */
- if (accepted > 0) {
+ if (accepted_total > 0) {
SetBit(st->goods[cargo_type].status, GoodsEntry::GES_EVER_ACCEPTED);
SetBit(st->goods[cargo_type].status, GoodsEntry::GES_CURRENT_MONTH);
SetBit(st->goods[cargo_type].status, GoodsEntry::GES_ACCEPTED_BIGTICK);
}
/* Update company statistics */
- company->cur_economy.delivered_cargo[cargo_type] += accepted;
+ company->cur_economy.delivered_cargo[cargo_type] += accepted_total;
/* Increase town's counter for town effects */
const CargoSpec *cs = CargoSpec::Get(cargo_type);
- st->town->received[cs->town_effect].new_act += accepted;
+ st->town->received[cs->town_effect].new_act += accepted_total;
/* Determine profit */
- Money profit = GetTransportedGoodsIncome(accepted, DistanceManhattan(source_tile, st->xy), days_in_transit, cargo_type);
+ Money profit = GetTransportedGoodsIncome(accepted_total, DistanceManhattan(source_tile, st->xy), days_in_transit, cargo_type);
/* Update the cargo monitor. */
- AddCargoDelivery(cargo_type, company->index, accepted, src_type, src, st);
+ AddCargoDelivery(cargo_type, company->index, accepted_total - accepted_ind, src_type, src, st);
/* Modify profit if a subsidy is in effect */
if (CheckSubsidised(cargo_type, company->index, src_type, src, st)) {