public static LoadOrder <OblivionMod> ImportUsualLoadOrder( DirectoryPath dataFolder, GroupMask?importMask = null, ModKey?modKeyExclusionHint = null, bool allowMissingMods = false) { var loadOrderListing = LoadOrder.GetUsualLoadOrder(GameMode.Oblivion, dataFolder, allowMissingMods: allowMissingMods); if (modKeyExclusionHint != null) { loadOrderListing.Remove(modKeyExclusionHint.Value); } var loadOrder = new LoadOrder <OblivionMod>(); loadOrder.Import( dataFolder, loadOrderListing, importer: (FilePath path, ModKey modKey, out OblivionMod mod) => { mod = OblivionMod.CreateFromBinary( path.Path, modKey, importMask: importMask); return(true); }); return(loadOrder); }
public Merger(string dataFolderPath, List <ModKey> plugins, ModKey outputKey) { _loadOrder = LoadOrder.Import( dataFolderPath, plugins, path => ModInstantiator <ISkyrimModGetter> .Importer(path, GameRelease.SkyrimSE)); _outputMod = new SkyrimMod(outputKey, SkyrimRelease.SkyrimSE); _outputPath = Path.Combine(dataFolderPath, outputKey.FileName); }
public static async Task Oblivion_FlattenMod(TestingSettings testingSettings) { List <ModListing> loadOrderListing = new List <ModListing>() { new ModKey("Oblivion", ModType.Master), new ModKey("Knights", ModType.Plugin) }; var loadOrder = LoadOrder.Import <OblivionMod>( dataFolder: testingSettings.DataFolderLocations.Oblivion, loadOrder: loadOrderListing, gameRelease: GameRelease.Oblivion); OblivionMod ret = new OblivionMod(new ModKey("Test", ModType.Plugin)); foreach (var listing in loadOrder.ListedOrder) { ret.Npcs.RecordCache.Set(listing.Mod.Npcs.Records); } }
public static SynthesisState <TMod, TModGetter> ToState <TMod, TModGetter>(RunSynthesisMutagenPatcher settings, UserPreferences userPrefs) where TMod : class, IMod, TModGetter where TModGetter : class, IModGetter { // Confirm target game release matches var regis = settings.GameRelease.ToCategory().ToModRegistration(); if (!typeof(TMod).IsAssignableFrom(regis.SetterType)) { throw new ArgumentException($"Target mod type {typeof(TMod)} was not of the expected type {regis.SetterType}"); } if (!typeof(TModGetter).IsAssignableFrom(regis.GetterType)) { throw new ArgumentException($"Target mod type {typeof(TModGetter)} was not of the expected type {regis.GetterType}"); } // Get load order var loadOrderListing = SynthesisPipeline.Instance.GetLoadOrder(settings, userPrefs) .ToExtendedList(); var rawLoadOrder = loadOrderListing.Select(x => new LoadOrderListing(x.ModKey, x.Enabled)).ToExtendedList(); // Trim past Synthesis.esp var synthIndex = loadOrderListing.IndexOf(BaseSynthesis.Constants.SynthesisModKey, (listing, key) => listing.ModKey == key); if (synthIndex != -1) { loadOrderListing.RemoveToCount(synthIndex); } if (userPrefs.AddImplicitMasters) { AddImplicitMasters(settings, loadOrderListing); } // Remove disabled mods if (!userPrefs.IncludeDisabledMods) { loadOrderListing = loadOrderListing.OnlyEnabled().ToExtendedList(); } var loadOrder = LoadOrder.Import <TModGetter>( settings.DataFolderPath, loadOrderListing, settings.GameRelease); // Get Modkey from output path var modKey = BaseSynthesis.Constants.SynthesisModKey; // Create or import patch mod TMod patchMod; ILinkCache cache; if (userPrefs.NoPatch) { // Pass null, even though it isn't normally patchMod = null !; TModGetter readOnlyPatchMod; if (settings.SourcePath == null) { readOnlyPatchMod = ModInstantiator <TModGetter> .Activator(modKey, settings.GameRelease); } else { readOnlyPatchMod = ModInstantiator <TModGetter> .Importer(new ModPath(modKey, settings.SourcePath), settings.GameRelease); } loadOrder.Add(new ModListing <TModGetter>(readOnlyPatchMod, enabled: true)); cache = loadOrder.ToImmutableLinkCache(); } else { if (settings.SourcePath == null) { patchMod = ModInstantiator <TMod> .Activator(modKey, settings.GameRelease); } else { patchMod = ModInstantiator <TMod> .Importer(new ModPath(modKey, settings.SourcePath), settings.GameRelease); } cache = loadOrder.ToMutableLinkCache(patchMod); loadOrder.Add(new ModListing <TModGetter>(patchMod, enabled: true)); } return(new SynthesisState <TMod, TModGetter>( settings: settings, loadOrder: loadOrder, rawLoadOrder: rawLoadOrder, linkCache: cache, patchMod: patchMod, extraDataPath: settings.ExtraDataFolder == null ? string.Empty : Path.GetFullPath(settings.ExtraDataFolder), cancellation: userPrefs.Cancel)); }