|
|
|
@ -1226,43 +1226,7 @@ bool AfterLoadGame()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CheckSavegameVersion(44)) {
|
|
|
|
|
Vehicle *v;
|
|
|
|
|
/* If we remove a station while cargo from it is still enroute, payment calculation will assume
|
|
|
|
|
* 0, 0 to be the source of the cargo, resulting in very high payments usually. v->source_xy
|
|
|
|
|
* stores the coordinates, preserving them even if the station is removed. However, if a game is loaded
|
|
|
|
|
* where this situation exists, the cargo-source information is lost. in this case, we set the source
|
|
|
|
|
* to the current tile of the vehicle to prevent excessive profits
|
|
|
|
|
*/
|
|
|
|
|
FOR_ALL_VEHICLES(v) {
|
|
|
|
|
const VehicleCargoList::List *packets = v->cargo.Packets();
|
|
|
|
|
for (VehicleCargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) {
|
|
|
|
|
CargoPacket *cp = *it;
|
|
|
|
|
cp->source_xy = Station::IsValidID(cp->source) ? Station::Get(cp->source)->xy : v->tile;
|
|
|
|
|
cp->loaded_at_xy = cp->source_xy;
|
|
|
|
|
}
|
|
|
|
|
v->cargo.InvalidateCache();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Store position of the station where the goods come from, so there
|
|
|
|
|
* are no very high payments when stations get removed. However, if the
|
|
|
|
|
* station where the goods came from is already removed, the source
|
|
|
|
|
* information is lost. In that case we set it to the position of this
|
|
|
|
|
* station */
|
|
|
|
|
Station *st;
|
|
|
|
|
FOR_ALL_STATIONS(st) {
|
|
|
|
|
for (CargoID c = 0; c < NUM_CARGO; c++) {
|
|
|
|
|
GoodsEntry *ge = &st->goods[c];
|
|
|
|
|
|
|
|
|
|
const StationCargoList::List *packets = ge->cargo.Packets();
|
|
|
|
|
for (StationCargoList::List::const_iterator it = packets->begin(); it != packets->end(); it++) {
|
|
|
|
|
CargoPacket *cp = *it;
|
|
|
|
|
cp->source_xy = Station::IsValidID(cp->source) ? Station::Get(cp->source)->xy : st->xy;
|
|
|
|
|
cp->loaded_at_xy = cp->source_xy;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CargoPacket::AfterLoad();
|
|
|
|
|
|
|
|
|
|
if (CheckSavegameVersion(45)) {
|
|
|
|
|
Vehicle *v;
|
|
|
|
@ -1277,14 +1241,6 @@ bool AfterLoadGame()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CheckSavegameVersion(120)) {
|
|
|
|
|
/* CargoPacket's source should be either INVALID_STATION or a valid station */
|
|
|
|
|
CargoPacket *cp;
|
|
|
|
|
FOR_ALL_CARGOPACKETS(cp) {
|
|
|
|
|
if (!Station::IsValidID(cp->source)) cp->source = INVALID_STATION;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Buoys do now store the owner of the previous water tile, which can never
|
|
|
|
|
* be OWNER_NONE. So replace OWNER_NONE with OWNER_WATER. */
|
|
|
|
|
if (CheckSavegameVersion(46)) {
|
|
|
|
|