浏览代码

Automatically enable all applicable compatibility patches

Ivan Savenko 11 月之前
父节点
当前提交
1678b137d8
共有 1 个文件被更改,包括 18 次插入3 次删除
  1. 18 3
      lib/modding/ModManager.cpp

+ 18 - 3
lib/modding/ModManager.cpp

@@ -376,7 +376,8 @@ ModManager::ModManager(const JsonNode & repositoryList)
 	addNewModsToPreset();
 
 	std::vector<TModID> desiredModList = modsPreset->getActiveMods();
-	depedencyResolver = std::make_unique<ModDependenciesResolver>(desiredModList, *modsStorage);
+	ModDependenciesResolver newResolver(desiredModList, *modsStorage);
+	updatePreset(newResolver);
 }
 
 ModManager::~ModManager() = default;
@@ -572,10 +573,24 @@ void ModManager::updatePreset(const ModDependenciesResolver & testResolver)
 	}
 
 	std::vector<TModID> desiredModList = modsPreset->getActiveMods();
-	depedencyResolver = std::make_unique<ModDependenciesResolver>(desiredModList, *modsStorage);
 
-	// TODO: check activation status of submods of new mods
+	// Try to enable all existing compatibility patches. Ignore on failure
+	for (const auto & rootMod : modsPreset->getActiveRootMods())
+	{
+		for (const auto & modSetting : modsPreset->getModSettings(rootMod))
+		{
+			if (modSetting.second)
+				continue;
 
+			TModID fullModID = rootMod + '.' + modSetting.first;
+			const auto & modDescription = modsStorage->getMod(fullModID);
+
+			if (modDescription.isCompatibility())
+				desiredModList.push_back(fullModID);
+		}
+	}
+
+	depedencyResolver = std::make_unique<ModDependenciesResolver>(desiredModList, *modsStorage);
 	modsPreset->saveConfigurationState();
 }