(svn r18908) -Fix [FS#3561]: on bankruptcy the company value did include the loan and as such the value at which you bought the company was too low

This commit is contained in:
rubidium 2010-01-24 11:05:26 +00:00
parent b2f9b0ac43
commit 3d0b3818dd
2 changed files with 13 additions and 4 deletions

View File

@ -107,7 +107,7 @@ struct Company : CompanyPool::PoolItem<&_company_pool> {
#define FOR_ALL_COMPANIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Company, company_index, var, start)
#define FOR_ALL_COMPANIES(var) FOR_ALL_COMPANIES_FROM(var, 0)
Money CalculateCompanyValue(const Company *c);
Money CalculateCompanyValue(const Company *c, bool including_loan = true);
extern uint _next_competitor_start;
extern uint _cur_company_tick_index;

View File

@ -110,7 +110,16 @@ Prices _price;
Money _additional_cash_required;
static PriceMultipliers _price_base_multiplier;
Money CalculateCompanyValue(const Company *c)
/**
* Calculate the value of the company. That is the value of all
* assets (vehicles, stations, etc) and money minus the loan,
* except when including_loan is \c false which is useful when
* we want to calculate the value for bankruptcy.
* @param c the company to get the value of.
* @param including_loan include the loan in the company value.
* @return the value of the company.
*/
Money CalculateCompanyValue(const Company *c, bool including_loan)
{
Owner owner = c->index;
Money value = 0;
@ -137,7 +146,7 @@ Money CalculateCompanyValue(const Company *c)
}
/* Add real money value */
value -= c->current_loan;
if (including_loan) value -= c->current_loan;
value += c->money;
return max(value, (Money)1);
@ -507,7 +516,7 @@ static void CompanyCheckBankrupt(Company *c)
case 3: {
/* Check if the company has any value.. if not, declare it bankrupt
* right now */
Money val = CalculateCompanyValue(c);
Money val = CalculateCompanyValue(c, false);
if (val > 0) {
c->bankrupt_value = val;
c->bankrupt_asked = 1 << c->index; // Don't ask the owner