瀏覽代碼

fix old vcmi format map loading crash

kdmcser 5 月之前
父節點
當前提交
7cb922dd8a
共有 2 個文件被更改,包括 4 次插入3 次删除
  1. 1 1
      lib/mapping/CMap.h
  2. 3 2
      lib/mapping/MapFormatJson.cpp

+ 1 - 1
lib/mapping/CMap.h

@@ -278,9 +278,9 @@ public:
 	const IGameSettings & getSettings() const;
 
 	void saveCompatibilityStoreAllocatedArtifactID();
+	void parseUidCounter();
 
 private:
-	void parseUidCounter();
 
 	/// a 3-dimensional array of terrain tiles, access is as follows: x, y, level. where level=1 is underground
 	boost::multi_array<TerrainTile, 3> terrain;

+ 3 - 2
lib/mapping/MapFormatJson.cpp

@@ -1086,14 +1086,14 @@ void CMapLoaderJson::MapObjectLoader::configure()
 				spellID = 0;
 			artID = ArtifactID::SPELL_SCROLL;
 		}
-		else if(art->ID  == Obj::ARTIFACT)
+		else if (art->ID == Obj::ARTIFACT || (art->ID >= Obj::RANDOM_ART && art->ID <= Obj::RANDOM_RELIC_ART))
 		{
 			//specific artifact
 			artID = art->getArtifactType();
 		}
 
 		art->setArtifactInstance(owner->map->createArtifact(artID, spellID.getNum()));
-	}
+ 	}
 
 	if(auto hero = std::dynamic_pointer_cast<CGHeroInstance>(instance))
 	{
@@ -1132,6 +1132,7 @@ void CMapLoaderJson::readObjects()
 
 		debugHeroesOnMap.insert(hero->getHeroTypeID());
 	}
+	map->parseUidCounter();
 }
 
 void CMapLoaderJson::readTranslations()