Mercurial > hg > openttd
changeset 15725:597cad644741 draft
(svn r20392) -Fix [FS#3993]: Prevent buying bankrupt companies when you'd get too many vehicles.
author | alberth <alberth@openttd.org> |
---|---|
date | Fri, 06 Aug 2010 20:26:01 +0000 |
parents | db6f7934da37 |
children | 88dadfb384f8 |
files | src/company_cmd.cpp src/company_func.h src/economy.cpp |
diffstat | 3 files changed, 25 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -585,6 +585,25 @@ } /** + * May company \a cbig buy company \a csmall? + * @param cbig Company buying \a csmall. + * @param csmall Company getting bought. + * @return Return \c true if it is allowed. + */ +bool MayCompanyTakeOver(CompanyID cbig, CompanyID csmall) +{ + uint big_counts[4], small_counts[4]; + CountCompanyVehicles(cbig, big_counts); + CountCompanyVehicles(csmall, small_counts); + + /* Do the combined vehicle counts stay within the limits? */ + return big_counts[VEH_TRAIN] + small_counts[VEH_TRAIN] <= _settings_game.vehicle.max_trains && + big_counts[VEH_ROAD] + small_counts[VEH_ROAD] <= _settings_game.vehicle.max_roadveh && + big_counts[VEH_SHIP] + small_counts[VEH_SHIP] <= _settings_game.vehicle.max_ships && + big_counts[VEH_AIRCRAFT] + small_counts[VEH_AIRCRAFT] <= _settings_game.vehicle.max_aircraft; +} + +/** * Handle the bankruptcy take over of a company. * Companies going bankrupt will ask the other companies in order of their * performance rating, so better performing companies get the 'do you want to @@ -623,7 +642,8 @@ FOR_ALL_COMPANIES(c2) { if (c2->bankrupt_asked == 0 && // Don't ask companies going bankrupt themselves !HasBit(c->bankrupt_asked, c2->index) && - best_performance < c2->old_economy[1].performance_history) { + best_performance < c2->old_economy[1].performance_history && + MayCompanyTakeOver(c2->index, c->index)) { best_performance = c2->old_economy[1].performance_history; best = c2; }
--- a/src/company_func.h +++ b/src/company_func.h @@ -16,6 +16,7 @@ #include "tile_type.h" #include "gfx_type.h" +bool MayCompanyTakeOver(CompanyID cbig, CompanyID small); void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner); void GetNameOfOwner(Owner owner, TileIndex tile); void SetLocalCompany(CompanyID new_company);
--- a/src/economy.cpp +++ b/src/economy.cpp @@ -1600,6 +1600,9 @@ /* Do not allow companies to take over themselves */ if (target_company == _current_company) return CMD_ERROR; + /* Disable taking over when not allowed. */ + if (!MayCompanyTakeOver(_current_company, target_company)) return CMD_ERROR; + /* Get the cost here as the company is deleted in DoAcquireCompany. */ CommandCost cost(EXPENSES_OTHER, c->bankrupt_value);