Example #1
0
        public static void TypicalPatch <TMod>(
            DirectoryPath dataFolder,
            ModKey outModKey,
            IReadOnlyList <ModKey> loadOrderList,
            LoadOrder <TMod> .Importer importer,
            Func <ModKey, LoadOrder <TMod>, TMod> processor)
            where TMod : class, IMod
        {
            var loadOrderInternal = loadOrderList.ToList();

            loadOrderInternal.Remove(outModKey);
            var loadOrder = new LoadOrder <TMod>();

            loadOrder.Import(
                dataFolder,
                loadOrderInternal,
                importer);
            var outMod = processor(outModKey, loadOrder);

            foreach (var npc in outMod.EnumerateMajorRecords())
            {
                npc.IsCompressed = false;
            }
            var linkCache = loadOrder.CreateLinkCache();

            outMod.MasterReferences.SetTo(
                outMod.LinkFormKeys
                .Where(fk => !fk.IsNull)
                .Select(s => s.ModKey)
                .Where(modKey => modKey != outModKey)
                .Distinct()
                .OrderBy(modKey => loadOrder.IndexOf(modKey))
                .Select(modKey => new MasterReference()
            {
                Master = modKey
            }));
            outMod.SyncRecordCount();
            outMod.WriteToBinary(
                path: Path.Combine(dataFolder.Path, outModKey.FileName));
        }