1
0
Fork 0

Change: Don't check for sufficient money if infinite money setting is on

pull/11902/head
merni-ns 2024-01-27 23:34:35 +05:30
parent 44c83ccb4c
commit f41bba8f02
3 changed files with 16 additions and 13 deletions

View File

@ -202,14 +202,15 @@ void InvalidateCompanyWindows(const Company *company)
*/ */
Money GetAvailableMoney(CompanyID company) Money GetAvailableMoney(CompanyID company)
{ {
if (_settings_game.difficulty.infinite_money) return INT64_MAX;
if (!Company::IsValidID(company)) return INT64_MAX; if (!Company::IsValidID(company)) return INT64_MAX;
return Company::Get(company)->money; return Company::Get(company)->money;
} }
/** /**
* This functions returns the money which can be used to execute a command. * This functions returns the money which can be used to execute a command.
* This is either the money of the current company or INT64_MAX if there * This is either the money of the current company, or INT64_MAX if infinite money
* is no such a company "at the moment" like the server itself. * is enabled or there is no such a company "at the moment" like the server itself.
* *
* @return The available money of the current company or INT64_MAX * @return The available money of the current company or INT64_MAX
*/ */
@ -221,17 +222,19 @@ Money GetAvailableMoneyForCommand()
/** /**
* Verify whether the company can pay the bill. * Verify whether the company can pay the bill.
* @param[in,out] cost Money to pay, is changed to an error if the company does not have enough money. * @param[in,out] cost Money to pay, is changed to an error if the company does not have enough money.
* @return Function returns \c true if the company has enough money, else it returns \c false. * @return Function returns \c true if the company has enough money or infinite money is enabled,
* else it returns \c false.
*/ */
bool CheckCompanyHasMoney(CommandCost &cost) bool CheckCompanyHasMoney(CommandCost &cost)
{ {
if (cost.GetCost() > 0) { if (cost.GetCost() <= 0) return true;
const Company *c = Company::GetIfValid(_current_company); if (_settings_game.difficulty.infinite_money) return true;
if (c != nullptr && cost.GetCost() > c->money) {
SetDParam(0, cost.GetCost()); const Company *c = Company::GetIfValid(_current_company);
cost.MakeError(STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY); if (c != nullptr && cost.GetCost() > c->money) {
return false; SetDParam(0, cost.GetCost());
} cost.MakeError(STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY);
return false;
} }
return true; return true;
} }

View File

@ -179,7 +179,7 @@
company = ResolveCompanyID(company); company = ResolveCompanyID(company);
if (company == COMPANY_INVALID) return -1; if (company == COMPANY_INVALID) return -1;
return ::Company::Get(company)->money; return GetAvailableMoney((::CompanyID)company);
} }
/* static */ Money ScriptCompany::GetLoanAmount() /* static */ Money ScriptCompany::GetLoanAmount()

View File

@ -220,7 +220,7 @@ bool Vehicle::NeedsServicing() const
* There are a lot more reasons for autoreplace to fail than we can test here reasonably. */ * There are a lot more reasons for autoreplace to fail than we can test here reasonably. */
bool pending_replace = false; bool pending_replace = false;
Money needed_money = c->settings.engine_renew_money; Money needed_money = c->settings.engine_renew_money;
if (needed_money > c->money) return false; if (needed_money > GetAvailableMoney(c->index)) return false;
for (const Vehicle *v = this; v != nullptr; v = (v->type == VEH_TRAIN) ? Train::From(v)->GetNextUnit() : nullptr) { for (const Vehicle *v = this; v != nullptr; v = (v->type == VEH_TRAIN) ? Train::From(v)->GetNextUnit() : nullptr) {
bool replace_when_old = false; bool replace_when_old = false;
@ -258,7 +258,7 @@ bool Vehicle::NeedsServicing() const
* We want 2*(the price of the new vehicle) without looking at the value of the vehicle we are going to sell. */ * We want 2*(the price of the new vehicle) without looking at the value of the vehicle we are going to sell. */
pending_replace = true; pending_replace = true;
needed_money += 2 * Engine::Get(new_engine)->GetCost(); needed_money += 2 * Engine::Get(new_engine)->GetCost();
if (needed_money > c->money) return false; if (needed_money > GetAvailableMoney(c->index)) return false;
} }
return pending_replace; return pending_replace;