Fix up some of the todos
This commit is contained in:
@@ -702,13 +702,76 @@ class ModList {
|
||||
LoadOrder loadRequired([LoadOrder? loadOrder]) {
|
||||
loadOrder ??= LoadOrder();
|
||||
final toEnable = <String>[];
|
||||
final logger = Logger.instance;
|
||||
|
||||
// First, identify all base game and expansion mods
|
||||
final baseGameIds = <String>{};
|
||||
final expansionIds = <String>{};
|
||||
|
||||
for (final entry in mods.entries) {
|
||||
if (entry.value.isBaseGame) {
|
||||
baseGameIds.add(entry.key);
|
||||
} else if (entry.value.isExpansion) {
|
||||
expansionIds.add(entry.key);
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("Base game mods: ${baseGameIds.join(', ')}");
|
||||
logger.info("Expansion mods: ${expansionIds.join(', ')}");
|
||||
|
||||
// Load dependencies for all active mods
|
||||
for (final modid in activeMods.keys) {
|
||||
loadDependencies(modid, loadOrder, toEnable);
|
||||
}
|
||||
|
||||
// Enable all required dependencies
|
||||
for (final modid in toEnable) {
|
||||
setEnabled(modid, true);
|
||||
}
|
||||
return generateLoadOrder(loadOrder);
|
||||
|
||||
// Generate the load order
|
||||
final newLoadOrder = generateLoadOrder(loadOrder);
|
||||
|
||||
// Filter out any error messages related to incompatibilities between base game and expansions
|
||||
if (newLoadOrder.hasErrors) {
|
||||
final filteredErrors = <String>[];
|
||||
|
||||
for (final error in newLoadOrder.errors) {
|
||||
// Check if the error is about incompatibility
|
||||
if (error.contains('Incompatibility detected:')) {
|
||||
// Extract the mod IDs from the error message
|
||||
final parts = error.split(' is incompatible with ');
|
||||
if (parts.length == 2) {
|
||||
final firstModId = parts[0].replaceAll('Incompatibility detected: ', '');
|
||||
final secondModId = parts[1];
|
||||
|
||||
// Check if either mod is a base game or expansion
|
||||
final isBaseGameOrExpansion =
|
||||
baseGameIds.contains(firstModId) || baseGameIds.contains(secondModId) ||
|
||||
expansionIds.contains(firstModId) || expansionIds.contains(secondModId);
|
||||
|
||||
// Only keep the error if it's not between base game/expansions
|
||||
if (!isBaseGameOrExpansion) {
|
||||
filteredErrors.add(error);
|
||||
} else {
|
||||
logger.info("Ignoring incompatibility between base game or expansion mods: $error");
|
||||
}
|
||||
} else {
|
||||
// If we can't parse the error, keep it
|
||||
filteredErrors.add(error);
|
||||
}
|
||||
} else {
|
||||
// Keep non-incompatibility errors
|
||||
filteredErrors.add(error);
|
||||
}
|
||||
}
|
||||
|
||||
// Replace the errors with the filtered list
|
||||
newLoadOrder.errors.clear();
|
||||
newLoadOrder.errors.addAll(filteredErrors);
|
||||
}
|
||||
|
||||
return newLoadOrder;
|
||||
}
|
||||
|
||||
LoadOrder loadRequiredBaseGame([LoadOrder? loadOrder]) {
|
||||
|
Reference in New Issue
Block a user