mirror of https://github.com/OpenTTD/OpenTTD
(svn r17806) -Codechange: split CargoPacket's 'afterload' to a separate function
parent
8a34641f48
commit
4ad30fecde
|
@ -117,6 +117,7 @@ public:
|
||||||
|
|
||||||
static void InvalidateAllFrom(SourceType src_type, SourceID src);
|
static void InvalidateAllFrom(SourceType src_type, SourceID src);
|
||||||
static void InvalidateAllFrom(StationID sid);
|
static void InvalidateAllFrom(StationID sid);
|
||||||
|
static void AfterLoad();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1226,43 +1226,7 @@ bool AfterLoadGame()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CheckSavegameVersion(44)) {
|
CargoPacket::AfterLoad();
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CheckSavegameVersion(45)) {
|
if (CheckSavegameVersion(45)) {
|
||||||
Vehicle *v;
|
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
|
/* Buoys do now store the owner of the previous water tile, which can never
|
||||||
* be OWNER_NONE. So replace OWNER_NONE with OWNER_WATER. */
|
* be OWNER_NONE. So replace OWNER_NONE with OWNER_WATER. */
|
||||||
if (CheckSavegameVersion(46)) {
|
if (CheckSavegameVersion(46)) {
|
||||||
|
|
|
@ -11,9 +11,60 @@
|
||||||
|
|
||||||
#include "../stdafx.h"
|
#include "../stdafx.h"
|
||||||
#include "../cargopacket.h"
|
#include "../cargopacket.h"
|
||||||
|
#include "../vehicle_base.h"
|
||||||
|
#include "../station_base.h"
|
||||||
|
|
||||||
#include "saveload.h"
|
#include "saveload.h"
|
||||||
|
|
||||||
|
/* static */ void CargoPacket::AfterLoad()
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper function to get the CargoPacket's internal structure while
|
* Wrapper function to get the CargoPacket's internal structure while
|
||||||
* some of the variables itself are private.
|
* some of the variables itself are private.
|
||||||
|
|
Loading…
Reference in New Issue