Преглед изворни кода

Better error reporting for usages of invalid terrain in mods

TODO: switch to proper mechanism via identifier requests
Ivan Savenko пре 2 година
родитељ
комит
b13723305d
1 измењених фајлова са 10 додато и 2 уклоњено
  1. 10 2
      lib/mapObjects/ObjectTemplate.cpp

+ 10 - 2
lib/mapObjects/ObjectTemplate.cpp

@@ -287,7 +287,15 @@ void ObjectTemplate::readJson(const JsonNode &node, const bool withTerrain)
 	if(withTerrain && !node["allowedTerrains"].isNull())
 	{
 		for(auto& entry : node["allowedTerrains"].Vector())
-			allowedTerrains.insert(VLC->terrainTypeHandler->getInfoByName(entry.String())->id);
+		{
+			try {
+				allowedTerrains.insert(VLC->terrainTypeHandler->getInfoByName(entry.String())->id);
+			}
+			catch (const std::out_of_range & )
+			{
+				logGlobal->warn("Failed to find terrain %s for object %s", entry.String(), animationFile);
+			}
+		}
 	}
 	else
 	{
@@ -300,7 +308,7 @@ void ObjectTemplate::readJson(const JsonNode &node, const bool withTerrain)
 	}
 
 	if(withTerrain && allowedTerrains.empty())
-		logGlobal->warn("Loaded template without allowed terrains!");
+		logGlobal->warn("Loaded template %s without allowed terrains!", animationFile);
 
 	auto charToTile = [&](const char & ch) -> ui8
 	{