Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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));
        }