浏览代码

prevent crash when a mod from save file doesn't exist

Andrey Filipenkov 3 年之前
父节点
当前提交
cedc9a92ed
共有 1 个文件被更改,包括 14 次插入2 次删除
  1. 14 2
      lib/CHeroHandler.cpp

+ 14 - 2
lib/CHeroHandler.cpp

@@ -842,10 +842,22 @@ void CHeroHandler::loadObstacles()
 	allConfigs.insert(allConfigs.begin(), "core");
 	for(auto & mod : allConfigs)
 	{
-		if(!CResourceHandler::get(mod)->existsResource(ResourceID("config/obstacles.json")))
+		ISimpleResourceLoader * modResourceLoader;
+		try
+		{
+			modResourceLoader = CResourceHandler::get(mod);
+		}
+		catch(const std::out_of_range &)
+		{
+			logMod->warn("Mod '%1%' doesn't exist! Its obstacles won't be loaded!", mod);
+			continue;
+		}
+
+		const ResourceID obstaclesResource{"config/obstacles.json"};
+		if(!modResourceLoader->existsResource(obstaclesResource))
 			continue;
 		
-		const JsonNode config(mod, ResourceID("config/obstacles.json"));
+		const JsonNode config(mod, obstaclesResource);
 		loadObstacles(config["obstacles"], false, obstacles);
 		loadObstacles(config["absoluteObstacles"], true, absoluteObstacles);
 	}