improved old map support
authorPerttu Ahola <celeron55@gmail.com>
Sun, 10 Apr 2011 21:19:40 +0000 (00:19 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Sun, 10 Apr 2011 21:19:40 +0000 (00:19 +0300)
src/map.cpp

index 5ab7e5b028fbe22cf89d155d244297874deb803b..ff823af94aaf05bf24da6d4650f17f515407134f 100644 (file)
@@ -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;