mirror of https://github.com/OpenTTD/OpenTTD
parent
363e251a10
commit
ccaa383e85
|
@ -836,17 +836,21 @@ static void CompaniesPayInterest()
|
||||||
/* Over a year the paid interest should be "loan * interest percentage",
|
/* Over a year the paid interest should be "loan * interest percentage",
|
||||||
* but... as that number is likely not dividable by 12 (pay each month),
|
* but... as that number is likely not dividable by 12 (pay each month),
|
||||||
* one needs to account for that in the monthly fee calculations.
|
* one needs to account for that in the monthly fee calculations.
|
||||||
|
*
|
||||||
* To easily calculate what one should pay "this" month, you calculate
|
* To easily calculate what one should pay "this" month, you calculate
|
||||||
* what (total) should have been paid up to this month and you subtract
|
* what (total) should have been paid up to this month and you subtract
|
||||||
* whatever has been paid in the previous months. This will mean one month
|
* whatever has been paid in the previous months. This will mean one month
|
||||||
* it'll be a bit more and the other it'll be a bit less than the average
|
* it'll be a bit more and the other it'll be a bit less than the average
|
||||||
* monthly fee, but on average it will be exact.
|
* monthly fee, but on average it will be exact.
|
||||||
|
*
|
||||||
* In order to prevent cheating or abuse (just not paying interest by not
|
* In order to prevent cheating or abuse (just not paying interest by not
|
||||||
* taking a loan we make companies pay interest on negative cash as well
|
* taking a loan) we make companies pay interest on negative cash as well,
|
||||||
|
* except if infinite money is enabled.
|
||||||
*/
|
*/
|
||||||
Money yearly_fee = c->current_loan * _economy.interest_rate / 100;
|
Money yearly_fee = c->current_loan * _economy.interest_rate / 100;
|
||||||
if (c->money < 0) {
|
Money available_money = GetAvailableMoney(c->index);
|
||||||
yearly_fee += -c->money *_economy.interest_rate / 100;
|
if (available_money < 0) {
|
||||||
|
yearly_fee += -available_money * _economy.interest_rate / 100;
|
||||||
}
|
}
|
||||||
Money up_to_previous_month = yearly_fee * TimerGameEconomy::month / 12;
|
Money up_to_previous_month = yearly_fee * TimerGameEconomy::month / 12;
|
||||||
Money up_to_this_month = yearly_fee * (TimerGameEconomy::month + 1) / 12;
|
Money up_to_this_month = yearly_fee * (TimerGameEconomy::month + 1) / 12;
|
||||||
|
|
|
@ -96,7 +96,7 @@ CommandCost CmdDecreaseLoan(DoCommandFlag flags, LoanCommand cmd, Money amount)
|
||||||
loan = std::min(c->current_loan, (Money)LOAN_INTERVAL);
|
loan = std::min(c->current_loan, (Money)LOAN_INTERVAL);
|
||||||
break;
|
break;
|
||||||
case LoanCommand::Max: // Pay back as much as possible
|
case LoanCommand::Max: // Pay back as much as possible
|
||||||
loan = std::max(std::min(c->current_loan, c->money), (Money)LOAN_INTERVAL);
|
loan = std::max(std::min(c->current_loan, GetAvailableMoneyForCommand()), (Money)LOAN_INTERVAL);
|
||||||
loan -= loan % LOAN_INTERVAL;
|
loan -= loan % LOAN_INTERVAL;
|
||||||
break;
|
break;
|
||||||
case LoanCommand::Amount: // Repay the given amount of loan
|
case LoanCommand::Amount: // Repay the given amount of loan
|
||||||
|
@ -105,7 +105,7 @@ CommandCost CmdDecreaseLoan(DoCommandFlag flags, LoanCommand cmd, Money amount)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c->money < loan) {
|
if (GetAvailableMoneyForCommand() < loan) {
|
||||||
SetDParam(0, loan);
|
SetDParam(0, loan);
|
||||||
return_cmd_error(STR_ERROR_CURRENCY_REQUIRED);
|
return_cmd_error(STR_ERROR_CURRENCY_REQUIRED);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3435,7 +3435,7 @@ TownActions GetMaskOfTownActions(CompanyID cid, const Town *t)
|
||||||
if (cid != COMPANY_SPECTATOR && !(_settings_game.economy.bribe && t->unwanted[cid])) {
|
if (cid != COMPANY_SPECTATOR && !(_settings_game.economy.bribe && t->unwanted[cid])) {
|
||||||
|
|
||||||
/* Actions worth more than this are not able to be performed */
|
/* Actions worth more than this are not able to be performed */
|
||||||
Money avail = Company::Get(cid)->money;
|
Money avail = GetAvailableMoney(cid);
|
||||||
|
|
||||||
/* Check the action bits for validity and
|
/* Check the action bits for validity and
|
||||||
* if they are valid add them */
|
* if they are valid add them */
|
||||||
|
|
|
@ -245,7 +245,7 @@ public:
|
||||||
case WID_TA_ACTION_INFO:
|
case WID_TA_ACTION_INFO:
|
||||||
if (this->sel_index != -1) {
|
if (this->sel_index != -1) {
|
||||||
Money action_cost = _price[PR_TOWN_ACTION] * _town_action_costs[this->sel_index] >> 8;
|
Money action_cost = _price[PR_TOWN_ACTION] * _town_action_costs[this->sel_index] >> 8;
|
||||||
bool affordable = Company::IsValidID(_local_company) && action_cost < Company::Get(_local_company)->money;
|
bool affordable = Company::IsValidID(_local_company) && action_cost < GetAvailableMoney(_local_company);
|
||||||
|
|
||||||
SetDParam(0, action_cost);
|
SetDParam(0, action_cost);
|
||||||
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect),
|
DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect),
|
||||||
|
|
Loading…
Reference in New Issue