diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index eb38b7edad..4db80729a8 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -133,6 +133,7 @@ CargoPacket::CargoPacket(StationID first_station, TileIndex source_xy, uint16 co * @param count Number of cargo entities to put in this packet. * @param periods_in_transit Number of cargo aging periods the cargo has been in transit. * @param first_station Station the cargo was initially loaded. + * @param next_station Next station the cargo wants to go. * @param source_xy Station location the cargo was initially loaded. * @param feeder_share Feeder share the packet has already accumulated. * @param source_type 'Type' of source the packet comes from (for subsidies). @@ -140,14 +141,15 @@ CargoPacket::CargoPacket(StationID first_station, TileIndex source_xy, uint16 co * @note We have to zero memory ourselves here because we are using a 'new' * that, in contrary to all other pools, does not memset to 0. */ -CargoPacket::CargoPacket(uint16 count, uint16 periods_in_transit, StationID first_station, TileIndex source_xy, Money feeder_share, SourceType source_type, SourceID source_id) : +CargoPacket::CargoPacket(uint16_t count, uint16_t periods_in_transit, StationID first_station, StationID next_station, TileIndex source_xy, Money feeder_share, SourceType source_type, SourceID source_id) : count(count), periods_in_transit(periods_in_transit), feeder_share(feeder_share), source_xy(source_xy), source_id(source_id), source_type(source_type), - first_station(first_station) + first_station(first_station), + next_station(next_station) { dbg_assert(count != 0); } @@ -172,7 +174,7 @@ CargoPacket *CargoPacket::Split(uint new_size) if (!CargoPacket::CanAllocateItem()) return nullptr; Money fs = this->GetFeederShare(new_size); - CargoPacket *cp_new = new CargoPacket(new_size, this->periods_in_transit, this->first_station, this->source_xy, fs, this->source_type, this->source_id); + CargoPacket *cp_new = new CargoPacket(new_size, this->periods_in_transit, this->first_station, this->next_station, this->source_xy, fs, this->source_type, this->source_id); this->feeder_share -= fs; if (this->flags & CPF_HAS_DEFERRED_PAYMENT) { diff --git a/src/cargopacket.h b/src/cargopacket.h index d3e7f0a506..4c667415e0 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -79,8 +79,8 @@ public: static const uint16 MAX_COUNT = UINT16_MAX; CargoPacket(); - CargoPacket(StationID first_station, TileIndex source_xy, uint16 count, SourceType source_type, SourceID source_id); - CargoPacket(uint16 count, uint16 periods_in_transit, StationID source, TileIndex source_xy, Money feeder_share = 0, SourceType source_type = SourceType::Industry, SourceID source_id = INVALID_SOURCE); + CargoPacket(StationID first_station, TileIndex source_xy, uint16_t count, SourceType source_type, SourceID source_id); + CargoPacket(uint16_t count, uint16_t periods_in_transit, StationID first_station, StationID next_station, TileIndex source_xy, Money feeder_share = 0, SourceType source_type = SourceType::Industry, SourceID source_id = INVALID_SOURCE); ~CargoPacket(); CargoPacket *Split(uint new_size); @@ -470,6 +470,7 @@ public: { return cp1->source_xy == cp2->source_xy && cp1->periods_in_transit == cp2->periods_in_transit && + cp1->next_station == cp2->next_station && cp1->source_type == cp2->source_type && cp1->source_id == cp2->source_id; } @@ -604,6 +605,7 @@ public: { return cp1->source_xy == cp2->source_xy && cp1->periods_in_transit == cp2->periods_in_transit && + cp1->next_station == cp2->next_station && cp1->source_type == cp2->source_type && cp1->source_id == cp2->source_id; } diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 1a0c975a12..eba74449d0 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -305,7 +305,7 @@ public: assert(CargoPacket::CanAllocateItem()); /* Don't construct the packet with station here, because that'll fail with old savegames */ - CargoPacket *cp = new CargoPacket(GB(_waiting_acceptance, 0, 12), _cargo_periods, source, _cargo_source_xy, _cargo_feeder_share); + CargoPacket *cp = new CargoPacket(GB(_waiting_acceptance, 0, 12), _cargo_periods, source, INVALID_STATION, _cargo_source_xy, _cargo_feeder_share); ge->data->cargo.Append(cp, INVALID_STATION); SB(ge->status, GoodsEntry::GES_RATING, 1, 1); } diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index a462032512..bd47d992b3 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -533,7 +533,7 @@ struct VEHSChunkHandler : ChunkHandler { if (_cargo_count != 0 && IsCompanyBuildableVehicleType(v) && CargoPacket::CanAllocateItem()) { /* Don't construct the packet with station here, because that'll fail with old savegames */ - CargoPacket *cp = new CargoPacket(_cargo_count, _cargo_periods, _cargo_source, _cargo_source_xy, _cargo_feeder_share); + CargoPacket *cp = new CargoPacket(_cargo_count, _cargo_periods, _cargo_source, INVALID_STATION, _cargo_source_xy, _cargo_feeder_share); v->cargo.Append(cp); } diff --git a/src/sl/oldloader_sl.cpp b/src/sl/oldloader_sl.cpp index e7b1d2cdc7..b03fa2154b 100644 --- a/src/sl/oldloader_sl.cpp +++ b/src/sl/oldloader_sl.cpp @@ -1353,7 +1353,7 @@ bool LoadOldVehicle(LoadgameState *ls, int num) if (_cargo_count != 0 && CargoPacket::CanAllocateItem()) { StationID source = (_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source; TileIndex source_xy = (source != INVALID_STATION) ? Station::Get(source)->xy : 0; - v->cargo.Append(new CargoPacket(_cargo_count, _cargo_periods, source, source_xy)); + v->cargo.Append(new CargoPacket(_cargo_count, _cargo_periods, source, INVALID_STATION, source_xy)); } }