summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2010-01-11 20:21:56 +0000
committerrubidium <rubidium@openttd.org>2010-01-11 20:21:56 +0000
commit3e5a87a52cc8355a2a5c2831c60643bf30d41a3a (patch)
tree87420f35edef10eaeb6bffbb5604c865beb9076d
parent6a047d2316dc49a8e75f14a0e73c59d1d55c568c (diff)
downloadopenttd-3e5a87a52cc8355a2a5c2831c60643bf30d41a3a.tar.xz
(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.
-rw-r--r--src/command.cpp9
-rw-r--r--src/command_type.h11
-rw-r--r--src/company_cmd.cpp4
-rw-r--r--src/functions.h2
-rw-r--r--src/vehicle_cmd.cpp2
5 files changed, 20 insertions, 8 deletions
diff --git a/src/command.cpp b/src/command.cpp
index 430be00c6..2dbd53d65 100644
--- a/src/command.cpp
+++ b/src/command.cpp
@@ -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
diff --git a/src/command_type.h b/src/command_type.h
index 0bff05003..42e622025 100644
--- a/src/command_type.h
+++ b/src/command_type.h
@@ -108,6 +108,17 @@ public:
}
/**
+ * 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
*/
diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp
index be4912ff2..2150b43ab 100644
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -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;
}
}
diff --git a/src/functions.h b/src/functions.h
index 64684886d..559f94846 100644
--- a/src/functions.h
+++ b/src/functions.h
@@ -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);
diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp
index a28436654..9345b8a32 100644
--- a/src/vehicle_cmd.cpp
+++ b/src/vehicle_cmd.cpp
@@ -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;