(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; Vehicle *v;
FOR_ALL_VEHICLES(v) { FOR_ALL_VEHICLES(v) {
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) { if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
@ -402,21 +397,48 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
} else { } else {
if (v->IsEngineCountable()) GroupStatistics::CountEngine(v, -1); if (v->IsEngineCountable()) GroupStatistics::CountEngine(v, -1);
if (v->IsPrimaryVehicle()) GroupStatistics::CountVehicle(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; if (new_owner == INVALID_OWNER) {
v->colourmap = PAL_NONE; 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); FreeUnitIDGenerator unitidgen[] = {
} FreeUnitIDGenerator(VEH_TRAIN, new_owner), FreeUnitIDGenerator(VEH_ROAD, new_owner),
if (v->IsPrimaryVehicle()) { FreeUnitIDGenerator(VEH_SHIP, new_owner), FreeUnitIDGenerator(VEH_AIRCRAFT, new_owner)
GroupStatistics::CountVehicle(v, 1); };
v->unitnumber = unitidgen[v->type].NextID();
} 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->IsEngineCountable()) {
if (v->cargo_payment != NULL) v->cargo_payment->owner = NULL; 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; Sign *si;
FOR_ALL_SIGNS(si) { FOR_ALL_SIGNS(si) {
if (si->owner == old_owner) si->owner = new_owner == INVALID_OWNER ? OWNER_NONE : new_owner; if (si->owner == old_owner) si->owner = new_owner == INVALID_OWNER ? OWNER_NONE : new_owner;

Loading…
Cancel
Save