Explorar el Código

Correctly remove unsupported (e.g. era) mods from active preset

Ivan Savenko hace 9 meses
padre
commit
46442fbcca
Se han modificado 2 ficheros con 18 adiciones y 4 borrados
  1. 17 4
      lib/modding/ModManager.cpp
  2. 1 0
      lib/modding/ModManager.h

+ 17 - 4
lib/modding/ModManager.cpp

@@ -549,7 +549,7 @@ double ModManager::getInstalledModSizeMegabytes(const TModID & modName) const
 
 void ModManager::eraseMissingModsFromPreset()
 {
-	const TModList & installedMods = modsState->getInstalledMods();
+	const TModList & installedMods = getInstalledValidMods();
 	const TModList & rootMods = modsPreset->getActiveRootMods();
 
 	modsPreset->removeOldMods(installedMods);
@@ -572,7 +572,7 @@ void ModManager::eraseMissingModsFromPreset()
 
 void ModManager::addNewModsToPreset()
 {
-	const TModList & installedMods = modsState->getInstalledMods();
+	const TModList & installedMods = getInstalledValidMods();
 
 	for(const auto & modID : installedMods)
 	{
@@ -591,6 +591,19 @@ void ModManager::addNewModsToPreset()
 	}
 }
 
+TModList ModManager::getInstalledValidMods() const
+{
+	TModList installedMods = modsState->getInstalledMods();
+	TModList validMods = modsStorage->getAllMods();
+
+	TModList result;
+	for (const auto & modID : installedMods)
+		if (vstd::contains(validMods, modID))
+			result.push_back(modID);
+
+	return result;
+}
+
 TModList ModManager::collectDependenciesRecursive(const TModID & modID) const
 {
 	TModList result;
@@ -688,7 +701,7 @@ void ModManager::updatePreset(const ModDependenciesResolver & testResolver)
 
 	for (const auto & modID : newActiveMods)
 	{
-		assert(vstd::contains(modsState->getInstalledMods(), modID));
+		assert(vstd::contains(getInstalledValidMods(), modID));
 		modsPreset->setModActive(modID, true);
 	}
 
@@ -847,7 +860,7 @@ std::tuple<std::string, TModList> ModManager::importPreset(const JsonNode & data
 	std::string presetName = modsPreset->importPreset(data);
 
 	TModList requiredMods = modsPreset->getRootMods(presetName);
-	TModList installedMods = modsState->getInstalledMods();
+	TModList installedMods = getInstalledValidMods();
 
 	TModList missingMods;
 	for (const auto & modID : requiredMods)

+ 1 - 0
lib/modding/ModManager.h

@@ -132,6 +132,7 @@ class DLL_LINKAGE ModManager : boost::noncopyable
 	void addNewModsToPreset();
 	void updatePreset(const ModDependenciesResolver & newData);
 
+	TModList getInstalledValidMods() const;
 	TModList collectDependenciesRecursive(const TModID & modID) const;
 
 	void tryEnableMod(const TModID & modList);