Просмотр исходного кода

Fix loading of artifacts from .vmap's

Ivan Savenko 1 неделя назад
Родитель
Сommit
dcd6b44ea3
2 измененных файлов с 7 добавлено и 4 удалено
  1. 4 2
      lib/mapObjects/MiscObjects.cpp
  2. 3 2
      lib/mapping/MapFormatJson.cpp

+ 4 - 2
lib/mapObjects/MiscObjects.cpp

@@ -627,8 +627,9 @@ ArtifactID CGArtifact::getArtifactType() const
 {
 	if(ID == Obj::SPELL_SCROLL)
 		return ArtifactID::SPELL_SCROLL;
-	else
-		return getObjTypeIndex().getNum();
+
+	assert(ID == Obj::ARTIFACT);
+	return getObjTypeIndex().getNum();
 }
 
 void CGArtifact::pickRandomObject(IGameRandomizer & gameRandomizer)
@@ -668,6 +669,7 @@ void CGArtifact::setArtifactInstance(const CArtifactInstance * instance)
 
 void CGArtifact::initObj(IGameRandomizer & gameRandomizer)
 {
+	assert(ID == Obj::ARTIFACT || ID == Obj::SPELL_SCROLL);
 	blockVisit = true;
 	if(ID == Obj::ARTIFACT)
 	{

+ 3 - 2
lib/mapping/MapFormatJson.cpp

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