mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r18783) -Codechange: make CheckCompanyHasMoney set an error on the CommandCost it tests when you don't have enough money instead of setting a global variable.
This commit is contained in:
parent
6a047d2316
commit
3e5a87a52c
|
@ -424,14 +424,12 @@ CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags,
|
|||
res = proc(tile, flags & ~DC_EXEC, p1, p2, text);
|
||||
SetTownRatingTestMode(false);
|
||||
if (CmdFailed(res)) {
|
||||
res.SetGlobalErrorMessage();
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (_docommand_recursive == 1 &&
|
||||
!(flags & DC_QUERY_COST) &&
|
||||
!(flags & DC_BANKRUPT) &&
|
||||
res.GetCost() != 0 &&
|
||||
!CheckCompanyHasMoney(res)) {
|
||||
goto error;
|
||||
}
|
||||
|
@ -446,8 +444,8 @@ CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags,
|
|||
* themselves to the cost object at some point */
|
||||
res = proc(tile, flags, p1, p2, text);
|
||||
if (CmdFailed(res)) {
|
||||
res.SetGlobalErrorMessage();
|
||||
error:
|
||||
res.SetGlobalErrorMessage();
|
||||
_docommand_recursive--;
|
||||
return CMD_ERROR;
|
||||
}
|
||||
|
@ -579,7 +577,10 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac
|
|||
goto show_error;
|
||||
}
|
||||
/* no money? Only check if notest is off */
|
||||
if (!notest && res.GetCost() != 0 && !CheckCompanyHasMoney(res)) goto show_error;
|
||||
if (!notest && res.GetCost() != 0 && !CheckCompanyHasMoney(res)) {
|
||||
res.SetGlobalErrorMessage();
|
||||
goto show_error;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ENABLE_NETWORK
|
||||
|
|
|
@ -107,6 +107,17 @@ public:
|
|||
if (this->message != INVALID_STRING_ID) _error_message = this->message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes this CommandCost behave like an error command.
|
||||
* @param mesasge the error message.
|
||||
*/
|
||||
void MakeError(StringID message)
|
||||
{
|
||||
assert(message != INVALID_STRING_ID);
|
||||
this->success = false;
|
||||
this->message = message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the error message of a command
|
||||
* @return the error message, if succeeded INVALID_STRING_ID
|
||||
|
|
|
@ -156,13 +156,13 @@ void InvalidateCompanyWindows(const Company *company)
|
|||
SetWindowDirty(WC_FINANCES, cid);
|
||||
}
|
||||
|
||||
bool CheckCompanyHasMoney(CommandCost cost)
|
||||
bool CheckCompanyHasMoney(CommandCost &cost)
|
||||
{
|
||||
if (cost.GetCost() > 0) {
|
||||
const Company *c = Company::GetIfValid(_current_company);
|
||||
if (c != NULL && cost.GetCost() > c->money) {
|
||||
SetDParam(0, cost.GetCost());
|
||||
_error_message = STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY;
|
||||
cost.MakeError(STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ void DrawClearLandFence(const TileInfo *ti);
|
|||
void TileLoopClearHelper(TileIndex tile);
|
||||
|
||||
/* company_cmd.cpp */
|
||||
bool CheckCompanyHasMoney(CommandCost cost);
|
||||
bool CheckCompanyHasMoney(CommandCost &cost);
|
||||
void SubtractMoneyFromCompany(CommandCost cost);
|
||||
void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cost);
|
||||
bool CheckOwnership(Owner owner, TileIndex tile = 0);
|
||||
|
|
|
@ -588,7 +588,7 @@ CommandCost CmdCloneVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
|||
/* The vehicle has already been bought, so now it must be sold again. */
|
||||
DoCommand(w_front->tile, w_front->index, 1, flags, GetCmdSellVeh(w_front));
|
||||
}
|
||||
return CMD_ERROR;
|
||||
return total_cost;
|
||||
}
|
||||
|
||||
return total_cost;
|
||||
|
|
Loading…
Reference in New Issue