Mercurial > hg > openttd
changeset 18964:a5926c47032d draft
(svn r23819) -Fix [FS#4951]: Removal of towns with 0 population failed during map generation.
author | frosch <frosch@openttd.org> |
---|---|
date | Tue, 17 Jan 2012 18:46:09 +0000 |
parents | 1a1a556c75ee |
children | c01a90907183 |
files | src/town_cmd.cpp |
diffstat | 1 files changed, 6 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1820,6 +1820,8 @@ static Town *CreateRandomTown(uint attempts, uint32 townnameparts, TownSize size, bool city, TownLayout layout) { + assert(_game_mode == GM_EDITOR || _generating_world); // These are the preconditions for CMD_DELETE_TOWN + if (!Town::CanAllocateItem()) return NULL; do { @@ -1844,7 +1846,8 @@ /* if the population is still 0 at the point, then the * placement is so bad it couldn't grow at all */ if (t->population > 0) return t; - DoCommand(t->xy, t->index, 0, DC_EXEC, CMD_DELETE_TOWN); + CommandCost rc = DoCommand(t->xy, t->index, 0, DC_EXEC, CMD_DELETE_TOWN); + assert(rc.Succeeded()); /* We already know that we can allocate a single town when * entering this function. However, we create and delete @@ -2564,7 +2567,7 @@ } /** - * Delete a town (scenario editor only). + * Delete a town (scenario editor or worldgen only). * @param tile Unused. * @param flags Type of operation. * @param p1 Town ID to delete. @@ -2574,7 +2577,7 @@ */ CommandCost CmdDeleteTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { - if (_game_mode != GM_EDITOR) return CMD_ERROR; + if (_game_mode != GM_EDITOR && !_generating_world) return CMD_ERROR; Town *t = Town::GetIfValid(p1); if (t == NULL) return CMD_ERROR;