(svn r23067) -Fix [FS#4812]: updating the group statistics got more strict checks, so there was some trouble moving a vehicles and groups from one company to another

pull/155/head
rubidium 13 years ago
parent c7f5ffda54
commit f430d497b9

@ -389,11 +389,6 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
}
{
FreeUnitIDGenerator unitidgen[] = {
FreeUnitIDGenerator(VEH_TRAIN, new_owner), FreeUnitIDGenerator(VEH_ROAD, new_owner),
FreeUnitIDGenerator(VEH_SHIP, new_owner), FreeUnitIDGenerator(VEH_AIRCRAFT, new_owner)
};
Vehicle *v;
FOR_ALL_VEHICLES(v) {
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
@ -402,21 +397,48 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
} else {
if (v->IsEngineCountable()) GroupStatistics::CountEngine(v, -1);
if (v->IsPrimaryVehicle()) GroupStatistics::CountVehicle(v, -1);
}
}
}
}
/* In all cases clear replace engine rules.
* Even if it was copied, it could interfere with new owner's rules */
RemoveAllEngineReplacementForCompany(Company::Get(old_owner));
v->owner = new_owner;
v->colourmap = PAL_NONE;
if (new_owner == INVALID_OWNER) {
RemoveAllGroupsForCompany(old_owner);
} else {
Group *g;
FOR_ALL_GROUPS(g) {
if (g->owner == old_owner) g->owner = new_owner;
}
}
if (v->IsEngineCountable()) {
GroupStatistics::CountEngine(v, 1);
}
if (v->IsPrimaryVehicle()) {
GroupStatistics::CountVehicle(v, 1);
v->unitnumber = unitidgen[v->type].NextID();
}
{
FreeUnitIDGenerator unitidgen[] = {
FreeUnitIDGenerator(VEH_TRAIN, new_owner), FreeUnitIDGenerator(VEH_ROAD, new_owner),
FreeUnitIDGenerator(VEH_SHIP, new_owner), FreeUnitIDGenerator(VEH_AIRCRAFT, new_owner)
};
Vehicle *v;
FOR_ALL_VEHICLES(v) {
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
assert(new_owner != INVALID_OWNER);
v->owner = new_owner;
v->colourmap = PAL_NONE;
/* Invalidate the vehicle's cargo payment "owner cache". */
if (v->cargo_payment != NULL) v->cargo_payment->owner = NULL;
if (v->IsEngineCountable()) {
GroupStatistics::CountEngine(v, 1);
}
if (v->IsPrimaryVehicle()) {
GroupStatistics::CountVehicle(v, 1);
v->unitnumber = unitidgen[v->type].NextID();
}
/* Invalidate the vehicle's cargo payment "owner cache". */
if (v->cargo_payment != NULL) v->cargo_payment->owner = NULL;
}
}
@ -472,19 +494,6 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
}
}
/* In all cases clear replace engine rules.
* Even if it was copied, it could interfere with new owner's rules */
RemoveAllEngineReplacementForCompany(Company::Get(old_owner));
if (new_owner == INVALID_OWNER) {
RemoveAllGroupsForCompany(old_owner);
} else {
Group *g;
FOR_ALL_GROUPS(g) {
if (g->owner == old_owner) g->owner = new_owner;
}
}
Sign *si;
FOR_ALL_SIGNS(si) {
if (si->owner == old_owner) si->owner = new_owner == INVALID_OWNER ? OWNER_NONE : new_owner;

Loading…
Cancel
Save