diff options
author | yexo <yexo@openttd.org> | 2010-09-03 21:50:51 +0000 |
---|---|---|
committer | yexo <yexo@openttd.org> | 2010-09-03 21:50:51 +0000 |
commit | a45b598bfcbbe46acbf9ea95d280fbf8d60a7b47 (patch) | |
tree | 4d7e1ca33587bc8097b6b596b789c0cc4f1ca639 /src/command.cpp | |
parent | bd379e283f4730f11bc40e9c3b583b44f9bc0a0b (diff) | |
download | openttd-a45b598bfcbbe46acbf9ea95d280fbf8d60a7b47.tar.xz |
(svn r20729) -Fix [FS#4107]: assert when overbuilding object
Diffstat (limited to 'src/command.cpp')
-rw-r--r-- | src/command.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/command.cpp b/src/command.cpp index 08ece97e5..5d5cd595b 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -27,6 +27,7 @@ #include "company_base.h" #include "signal_func.h" #include "core/backup_type.hpp" +#include "object_base.h" #include "table/strings.h" @@ -402,6 +403,7 @@ CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, /* only execute the test call if it's toplevel, or we're not execing. */ if (_docommand_recursive == 1 || !(flags & DC_EXEC) ) { + if (_docommand_recursive == 1) _cleared_object_areas.Clear(); SetTownRatingTestMode(true); res = proc(tile, flags & ~DC_EXEC, p1, p2, text); SetTownRatingTestMode(false); @@ -424,6 +426,7 @@ CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, /* Execute the command here. All cost-relevant functions set the expenses type * themselves to the cost object at some point */ + if (_docommand_recursive == 1) _cleared_object_areas.Clear(); res = proc(tile, flags, p1, p2, text); if (res.Failed()) { error: @@ -610,6 +613,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCost res; if (estimate_only || !skip_test) { /* Test the command. */ + _cleared_object_areas.Clear(); SetTownRatingTestMode(true); res = proc(tile, flags, p1, p2, text); SetTownRatingTestMode(false); @@ -649,6 +653,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, /* Actually try and execute the command. If no cost-type is given * use the construction one */ + _cleared_object_areas.Clear(); CommandCost res2 = proc(tile, flags | DC_EXEC, p1, p2, text); if (cmd_id == CMD_COMPANY_CTRL) { |