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;