From 32360321018b83cb7b2c2018f6f477c70b9f633b Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Mon, 11 Apr 2011 00:19:40 +0300
Subject: [PATCH] improved old map support

---
 src/map.cpp | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/map.cpp b/src/map.cpp
index 5ab7e5b02..ff823af94 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -5121,14 +5121,31 @@ MapSector* ServerMap::loadSectorMeta(std::string dirname)
 	// Get destination
 	v2s16 p2d = getSectorPos(dirname);
 	std::string dir = m_savedir + "/sectors/" + dirname;
+
+	ServerMapSector *sector = NULL;
 	
 	std::string fullpath = dir + "/meta";
 	std::ifstream is(fullpath.c_str(), std::ios_base::binary);
 	if(is.good() == false)
-		throw FileNotGoodException("Cannot open sector metafile");
-
-	ServerMapSector *sector = ServerMapSector::deSerialize
-			(is, this, p2d, m_sectors);
+	{
+		// If the directory exists anyway, it probably is in some old
+		// format. Just go ahead and create the sector.
+		if(fs::PathExists(dir))
+		{
+			dstream<<"ServerMap::loadSectorMeta(): Sector metafile "
+					<<fullpath<<" doesn't exist but directory does."
+					<<" Continuing with a sector with no metadata."
+					<<std::endl;
+			sector = createSector(p2d);
+		}
+		else
+			throw FileNotGoodException("Cannot open sector metafile");
+	}
+	else
+	{
+		sector = ServerMapSector::deSerialize
+				(is, this, p2d, m_sectors);
+	}
 	
 	sector->differs_from_disk = false;
 
-- 
GitLab