MCPcopy Create free account
hub / github.com/OpenTTD/OpenTTD / CmdDecreaseLoan

Function CmdDecreaseLoan

src/misc_cmd.cpp:85–117  ·  view source on GitHub ↗

* Decrease the loan of your company. * @param flags operation to perform * @param cmd when LoanCommand::Interval: pays back LOAN_INTERVAL, * when LoanCommand::Max: pays back the maximum loan permitting money (press CTRL), * when LoanCommand::Amount: pays back the amount specified in \c amount * @param amount amount to decrease the loan with, multitude of LOAN_INTERVAL. O

Source from the content-addressed store, hash-verified

83 * @return the cost of this operation or an error
84 */
85CommandCost CmdDecreaseLoan(DoCommandFlags flags, LoanCommand cmd, Money amount)
86{
87 Company *c = Company::Get(_current_company);
88
89 if (c->current_loan == 0) return CommandCost(STR_ERROR_LOAN_ALREADY_REPAID);
90
91 Money loan;
92 switch (cmd) {
93 default: return CMD_ERROR; // Invalid method
94 case LoanCommand::Interval: // Pay back one step
95 loan = std::min(c->current_loan, (Money)LOAN_INTERVAL);
96 break;
97 case LoanCommand::Max: // Pay back as much as possible
98 loan = std::max(std::min(c->current_loan, GetAvailableMoneyForCommand()), (Money)LOAN_INTERVAL);
99 loan -= loan % LOAN_INTERVAL;
100 break;
101 case LoanCommand::Amount: // Repay the given amount of loan
102 loan = amount;
103 if (loan % LOAN_INTERVAL != 0 || loan < LOAN_INTERVAL || loan > c->current_loan) return CMD_ERROR; // Invalid amount to loan
104 break;
105 }
106
107 if (GetAvailableMoneyForCommand() < loan) {
108 return CommandCostWithParam(STR_ERROR_CURRENCY_REQUIRED, loan);
109 }
110
111 if (flags.Test(DoCommandFlag::Execute)) {
112 c->money -= loan;
113 c->current_loan -= loan;
114 InvalidateCompanyWindows(c);
115 }
116 return CommandCost();
117}
118
119/**
120 * Sets the max loan amount of your company. Does not respect the global loan setting.

Callers

nothing calls this directly

Calls 5

CommandCostClass · 0.85
InvalidateCompanyWindowsFunction · 0.85
TestMethod · 0.80
CommandCostWithParamFunction · 0.70

Tested by

no test coverage detected