Changeset - r15715:f75fbcec842f
[Not reviewed]
master
0 3 0
alberth - 14 years ago 2010-08-06 20:26:01
alberth@openttd.org
(svn r20392) -Fix [FS#3993]: Prevent buying bankrupt companies when you'd get too many vehicles.
3 files changed with 25 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/company_cmd.cpp
Show inline comments
 
@@ -585,6 +585,25 @@ void InitializeCompanies()
 
}
 

	
 
/**
 
 * 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 @@ static void HandleBankruptcyTakeover(Com
 
	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;
 
		}
src/company_func.h
Show inline comments
 
@@ -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);
src/economy.cpp
Show inline comments
 
@@ -1600,6 +1600,9 @@ CommandCost CmdBuyCompany(TileIndex tile
 
	/* 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);
 

	
0 comments (0 inline, 0 general)