Ejemplo n.º 1
0
        public void TestDoesNothing()
        {
            var linkCache = loadOrder.ToImmutableLinkCache();

            Program program = new(loadOrder, linkCache, patchMod, new(new Settings()));

            program.RunPatch();

            Assert.Empty(patchMod.EnumerateMajorRecords());
        }
Ejemplo n.º 2
0
        public void AddAHearthFiresThing(SkyrimRelease release)
        {
            var xHFSxConstructionFLSTFormLink = release switch
            {
                SkyrimRelease.SkyrimLE => HearthFireStores_GS.FormList.xHFSxConstructionFLST,
                SkyrimRelease.SkyrimSE or SkyrimRelease.SkyrimVR => GeneralStores.FormList.xHFSxConstructionFLST,
                _ => throw new ArgumentException(null, nameof(release)),
            };

            var gameRelease = release switch
            {
                SkyrimRelease.SkyrimLE => GameRelease.SkyrimLE,
                SkyrimRelease.SkyrimSE => GameRelease.SkyrimSE,
                SkyrimRelease.SkyrimVR => GameRelease.SkyrimVR,
                _ => throw new ArgumentException(null, nameof(release)),
            };

            var generalStores = new SkyrimMod(xHFSxConstructionFLSTFormLink.FormKey.ModKey, release);

            var xHFSxConstructionFLST = new FormList(xHFSxConstructionFLSTFormLink.FormKey, release);

            generalStores.FormLists.Add(xHFSxConstructionFLST);

            SkyrimMod masterMod = new(masterModKey, release);

            var newThing = masterMod.MiscItems.AddNew("newItem");

            SkyrimMod patchMod = new(patchModKey, release);

            var loadOrder = new LoadOrder <IModListing <ISkyrimModGetter> >
            {
                new ModListing <ISkyrimModGetter>(generalStores, true),
                new ModListing <ISkyrimModGetter>(masterMod, true),
                new ModListing <ISkyrimModGetter>(patchMod, true)
            };

            var linkCache = loadOrder.ToImmutableLinkCache();

            Program program = new(loadOrder, linkCache, patchMod, gameRelease);

            program.hearthFiresConstructionSet.Add(newThing.AsLink());

            program.RecordClassifiedItems();

            Assert.Single(patchMod.FormLists);

            var updatedFlst = patchMod.FormLists.Single();

            Assert.Equal(xHFSxConstructionFLSTFormLink, updatedFlst.AsLink());

            Assert.Single(updatedFlst.Items);

            var newThingLink = updatedFlst.Items.Single();

            Assert.False(newThingLink.IsNull);

            Assert.Equal(newThing.AsLink(), newThingLink);
        }
Ejemplo n.º 3
0
        public void AddAThing()
        {
            var generalStores = new SkyrimMod(GeneralStores.ModKey, SkyrimRelease.SkyrimSE);

            var xGSxFoodAllFLST = new FormList(GeneralStores.FormList.xGSxFoodAllFLST.FormKey, SkyrimRelease.SkyrimSE);

            generalStores.FormLists.Add(xGSxFoodAllFLST);

            SkyrimMod masterMod = new(masterModKey, SkyrimRelease.SkyrimSE);

            var newThing = masterMod.MiscItems.AddNew("newItem");

            SkyrimMod patchMod = new(patchModKey, SkyrimRelease.SkyrimSE);

            var loadOrder = new LoadOrder <IModListing <ISkyrimModGetter> >
            {
                new ModListing <ISkyrimModGetter>(generalStores, true),
                new ModListing <ISkyrimModGetter>(masterMod, true),
                new ModListing <ISkyrimModGetter>(patchMod, true)
            };

            var linkCache = loadOrder.ToImmutableLinkCache();

            Program program = new(loadOrder, linkCache, patchMod, GameRelease.SkyrimSE);

            program.allFoodSet.Add(newThing.AsLink());

            program.RecordClassifiedItems();

            Assert.Single(patchMod.FormLists);

            var updatedFlst = patchMod.FormLists.Single();

            Assert.Single(updatedFlst.Items);

            var newThingLink = updatedFlst.Items.Single();

            Assert.False(newThingLink.IsNull);

            Assert.Equal(newThing.AsLink(), newThingLink);
        }
Ejemplo n.º 4
0
        public void ComplexOverrides()
        {
            WarmupSkyrim.Init();

            // Construct base mod
            const string Mod1Name   = "Mod1";
            var          mod        = new SkyrimMod(TestConstants.PluginModKey, SkyrimRelease.SkyrimSE);
            var          worldspace = mod.Worldspaces.AddNew();

            worldspace.EditorID = Mod1Name;
            var block = new WorldspaceBlock()
            {
                BlockNumberX = 2,
                BlockNumberY = 3,
                GroupType    = GroupTypeEnum.ExteriorCellBlock,
            };
            var subBlock = new WorldspaceSubBlock()
            {
                BlockNumberX = 4,
                BlockNumberY = 5,
                GroupType    = GroupTypeEnum.ExteriorCellSubBlock,
            };

            block.Items.Add(subBlock);
            worldspace.SubCells.Add(block);
            var cell = new Cell(mod.GetNextFormKey(), SkyrimRelease.SkyrimSE);

            cell.EditorID = Mod1Name;
            subBlock.Items.Add(cell);

            var placedObj = new PlacedObject(mod.GetNextFormKey(), SkyrimRelease.SkyrimSE);

            placedObj.EditorID = Mod1Name;
            cell.Persistent.Add(placedObj);

            // Override cell in 2nd mod
            const string Mod2Name    = "Mod2";
            var          mod2        = new SkyrimMod(TestConstants.PluginModKey2, SkyrimRelease.SkyrimSE);
            var          worldspace2 = new Worldspace(worldspace.FormKey, SkyrimRelease.SkyrimSE);

            worldspace2.EditorID = Mod2Name;
            mod2.Worldspaces.Add(worldspace2);
            var block2 = new WorldspaceBlock()
            {
                BlockNumberX = 2,
                BlockNumberY = 3,
                GroupType    = GroupTypeEnum.ExteriorCellBlock,
            };
            var subBlock2 = new WorldspaceSubBlock()
            {
                BlockNumberX = 4,
                BlockNumberY = 5,
                GroupType    = GroupTypeEnum.ExteriorCellSubBlock,
            };

            block2.Items.Add(subBlock2);
            worldspace2.SubCells.Add(block2);
            var cell2 = new Cell(cell.FormKey, SkyrimRelease.SkyrimSE);

            cell2.EditorID = Mod2Name;
            subBlock2.Items.Add(cell2);

            // Override worldspace in 3rd mod
            const string Mod3Name    = "Mod3";
            var          mod3        = new SkyrimMod(TestConstants.PluginModKey3, SkyrimRelease.SkyrimSE);
            var          worldspace3 = new Worldspace(worldspace.FormKey, SkyrimRelease.SkyrimSE);

            worldspace3.EditorID = Mod3Name;
            mod3.Worldspaces.Add(worldspace3);

            // Override in 4th, and check sources
            var loadOrder = new LoadOrder <ISkyrimModGetter>(mod.AsEnumerable().And(mod2).And(mod3));
            var cache     = loadOrder.ToImmutableLinkCache();

            var contexts = mod.EnumerateMajorRecordContexts <IPlaced, IPlacedGetter>(linkCache: cache).ToArray();

            contexts.Should().HaveCount(1);

            var mod4 = new SkyrimMod(TestConstants.PluginModKey4, SkyrimRelease.SkyrimSE);
            var placedObjOverride = contexts[0].GetOrAddAsOverride(mod4);

            placedObjOverride.EditorID.Should().Be(Mod1Name);
            var cellOverride = mod4.Worldspaces.First().SubCells.First().Items.First().Items.First();

            cellOverride.EditorID.Should().Be(Mod2Name);
            var worldspaceOverride = mod4.Worldspaces.First();

            worldspaceOverride.EditorID.Should().Be(Mod3Name);
        }
Ejemplo n.º 5
0
 protected override (LinkCacheStyle Style, ILinkCache <ISkyrimMod, ISkyrimModGetter> Cache) GetLinkCache(
     LoadOrder <ISkyrimModGetter> loadOrder, LinkCachePreferences prefs)
 {
     return(LinkCacheStyle.HasCaching, loadOrder.ToImmutableLinkCache <ISkyrimMod, ISkyrimModGetter>(prefs));
 }
Ejemplo n.º 6
0
 protected override (LinkCacheStyle Style, ILinkCache <ISkyrimMod, ISkyrimModGetter> Cache) GetLinkCache(LoadOrder <ISkyrimModGetter> loadOrder, LinkCachePreferences prefs)
 {
     return(LinkCacheStyle.OnlyDirect, new MutableLoadOrderLinkCache <ISkyrimMod, ISkyrimModGetter>(loadOrder.ToImmutableLinkCache <ISkyrimMod, ISkyrimModGetter>()));
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Creates a new linking package relative to a load order.<br/>
 /// Will resolve links to the highest overriding mod containing the record being sought. <br/>
 /// Modification of the target LoadOrder, or Mods on the LoadOrder is not safe.  Internal caches can become
 /// incorrect if modifications occur on content already cached.
 /// </summary>
 /// <param name="loadOrder">LoadOrder to construct the package relative to</param>
 /// <returns>LinkPackage attached to given LoadOrder</returns>
 public static ImmutableLoadOrderLinkCache <IOblivionMod, IOblivionModGetter> ToImmutableLinkCache(this LoadOrder <IModListing <IOblivionModGetter> > loadOrder)
 {
     return(loadOrder.ToImmutableLinkCache <IOblivionMod, IOblivionModGetter>());
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Creates a new linking package relative to a load order.<br/>
 /// Will resolve links to the highest overriding mod containing the record being sought. <br/>
 /// Modification of the target LoadOrder, or Mods on the LoadOrder is not safe.  Internal caches can become
 /// incorrect if modifications occur on content already cached.
 /// </summary>
 /// <param name="loadOrder">LoadOrder to construct the package relative to</param>
 /// <returns>LinkPackage attached to given LoadOrder</returns>
 public static ImmutableLoadOrderLinkCache <IFallout4Mod, IFallout4ModGetter> ToImmutableLinkCache(this LoadOrder <IFallout4ModGetter> loadOrder)
 {
     return(loadOrder.ToImmutableLinkCache <IFallout4Mod, IFallout4ModGetter>());
 }