changeset 14353:098ac3e84f3b draft

(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
author rubidium <rubidium@openttd.org>
date Sun, 24 Jan 2010 11:05:26 +0000
parents 053e6a35d232
children 1dd3aef4e77f
files src/company_base.h src/economy.cpp
diffstat 2 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/company_base.h
+++ b/src/company_base.h
@@ -107,7 +107,7 @@
 #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;
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -110,7 +110,16 @@
 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 @@
 	}
 
 	/* 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 @@
 		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