diff --git a/.gitignore b/.gitignore index 3e828db..045ae0a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ */obj/* .editorconfig + +UniquePlayer/Properties/launchSettings.json diff --git a/Tests/TextureSets_Tests.cs b/Tests/TextureSets_Tests.cs index d132083..a41d305 100644 --- a/Tests/TextureSets_Tests.cs +++ b/Tests/TextureSets_Tests.cs @@ -1,5 +1,8 @@ using Moq; using Mutagen.Bethesda; +using Mutagen.Bethesda.Plugins; +using Mutagen.Bethesda.Plugins.Cache; +using Mutagen.Bethesda.Plugins.Exceptions; using Mutagen.Bethesda.Skyrim; using System.Collections.Generic; using System.IO; @@ -42,7 +45,7 @@ public void TestUpdateTextureSet() EditorID = "oldTextureSet", }; - linkCache.Setup(x => x.TryResolve(textureSetFormKey, out oldTextureSet)).Returns(true); + linkCache.Setup(x => x.TryResolve(textureSetFormKey, out oldTextureSet, ResolveTarget.Winner)).Returns(true); TextureSets program = new(patchMod.Object, linkCache.Object); @@ -73,7 +76,7 @@ public void TestUpdateTextureSet2() Diffuse = "replaced_d.dds", }; - linkCache.Setup(x => x.TryResolve(textureSetFormKey, out oldTextureSet)).Returns(true); + linkCache.Setup(x => x.TryResolve(textureSetFormKey, out oldTextureSet, ResolveTarget.Winner)).Returns(true); var patchMod = new SkyrimMod(PatchModKey, SkyrimRelease.SkyrimSE); diff --git a/Tests/UpdateHeadParts_Tests.cs b/Tests/UpdateHeadParts_Tests.cs index d54e21e..e61c8d8 100644 --- a/Tests/UpdateHeadParts_Tests.cs +++ b/Tests/UpdateHeadParts_Tests.cs @@ -1,5 +1,8 @@ using Moq; using Mutagen.Bethesda; +using Mutagen.Bethesda.Plugins; +using Mutagen.Bethesda.Plugins.Cache; +using Mutagen.Bethesda.Plugins.Exceptions; using Mutagen.Bethesda.Skyrim; using System.Collections.Generic; using System.IO; diff --git a/UniquePlayer/FormKeys/FormList.cs b/UniquePlayer/FormKeys/FormList.cs index a7c431e..158c54e 100644 --- a/UniquePlayer/FormKeys/FormList.cs +++ b/UniquePlayer/FormKeys/FormList.cs @@ -1,5 +1,6 @@ // Autogenerated by https://github.com/Mutagen-Modding/Mutagen.Bethesda.FormKeys +using Mutagen.Bethesda.Plugins; using Mutagen.Bethesda.Skyrim; namespace Mutagen.Bethesda.FormKeys.SkyrimSE @@ -8,7 +9,7 @@ public static partial class RaceCompatibility { public static class FormList { - private static FormLink Construct(uint id) => new FormLink(ModKey.MakeFormKey(id)); + private static FormLink Construct(uint id) => new(ModKey.MakeFormKey(id)); public static FormLink PlayableRaceList => Construct(0xd62); public static FormLink PlayableVampireList => Construct(0xd63); } diff --git a/UniquePlayer/FormKeys/Keyword.cs b/UniquePlayer/FormKeys/Keyword.cs index fe41e81..0e7b6be 100644 --- a/UniquePlayer/FormKeys/Keyword.cs +++ b/UniquePlayer/FormKeys/Keyword.cs @@ -1,5 +1,6 @@ // Autogenerated by https://github.com/Mutagen-Modding/Mutagen.Bethesda.FormKeys +using Mutagen.Bethesda.Plugins; using Mutagen.Bethesda.Skyrim; namespace Mutagen.Bethesda.FormKeys.SkyrimSE @@ -8,7 +9,7 @@ public static partial class RaceCompatibility { public static class Keyword { - private static FormLink Construct(uint id) => new FormLink(ModKey.MakeFormKey(id)); + private static FormLink Construct(uint id) => new(ModKey.MakeFormKey(id)); public static FormLink ActorProxyBreton => Construct(0x1d8a); public static FormLink ActorProxyArgonian => Construct(0x1d8b); public static FormLink ActorProxyKhajiit => Construct(0x1d8c); diff --git a/UniquePlayer/FormKeys/ModKey.cs b/UniquePlayer/FormKeys/ModKey.cs index d74d9ab..9f59ed3 100644 --- a/UniquePlayer/FormKeys/ModKey.cs +++ b/UniquePlayer/FormKeys/ModKey.cs @@ -1,3 +1,4 @@ +using Mutagen.Bethesda.Plugins; using System.CodeDom.Compiler; namespace Mutagen.Bethesda.FormKeys.SkyrimSE diff --git a/UniquePlayer/FormKeys/Quest.cs b/UniquePlayer/FormKeys/Quest.cs index 7c7d964..894b855 100644 --- a/UniquePlayer/FormKeys/Quest.cs +++ b/UniquePlayer/FormKeys/Quest.cs @@ -1,5 +1,6 @@ // Autogenerated by https://github.com/Mutagen-Modding/Mutagen.Bethesda.FormKeys +using Mutagen.Bethesda.Plugins; using Mutagen.Bethesda.Skyrim; namespace Mutagen.Bethesda.FormKeys.SkyrimSE @@ -8,7 +9,7 @@ public static partial class RaceCompatibility { public static class Quest { - private static FormLink Construct(uint id) => new FormLink(ModKey.MakeFormKey(id)); + private static FormLink Construct(uint id) => new(ModKey.MakeFormKey(id)); public static FormLink RaceDispatcher => Construct(0x9f27); } } diff --git a/UniquePlayer/HeadParts.cs b/UniquePlayer/HeadParts.cs index 2ce188e..95f55bb 100644 --- a/UniquePlayer/HeadParts.cs +++ b/UniquePlayer/HeadParts.cs @@ -1,4 +1,8 @@ using Mutagen.Bethesda; +using Mutagen.Bethesda.Plugins; +using Mutagen.Bethesda.Plugins.Cache; +using Mutagen.Bethesda.Plugins.Exceptions; +using Mutagen.Bethesda.Plugins.Records; using Mutagen.Bethesda.Skyrim; using Noggog; using System; @@ -71,10 +75,13 @@ public void UpdateHeadPart(IFormLinkGetter headPartItem, string }; var newHeadPart = PatchMod.HeadParts.AddNew($"{headPart.EditorID}_UniquePlayer"); - newHeadPart.DeepCopyIn(headPart, new HeadPart.TranslationMask(defaultOn: true) + + newHeadPart.DeepCopyIn(headPart, out var foo, new HeadPart.TranslationMask(defaultOn: true) { EditorID = false }); + if (foo.IsInError() && foo.Overall is Exception e) throw e; + // TODO duplicate headPart FormList and restrict to player only? newHeadPart.Parts.ForEach(x => @@ -90,7 +97,7 @@ public void UpdateHeadPart(IFormLinkGetter headPartItem, string } catch (Exception e) { - throw RecordException.Factory(e, headPart); + throw RecordException.Enrich(e, headPart); } } } diff --git a/UniquePlayer/Program.cs b/UniquePlayer/Program.cs index 95cc163..09baeb5 100644 --- a/UniquePlayer/Program.cs +++ b/UniquePlayer/Program.cs @@ -1,5 +1,9 @@ using Mutagen.Bethesda; using Mutagen.Bethesda.FormKeys.SkyrimSE; +using Mutagen.Bethesda.Plugins; +using Mutagen.Bethesda.Plugins.Cache; +using Mutagen.Bethesda.Plugins.Exceptions; +using Mutagen.Bethesda.Plugins.Order; using Mutagen.Bethesda.Skyrim; using Mutagen.Bethesda.Synthesis; using Noggog; @@ -21,7 +25,7 @@ public class Program private readonly ILinkCache LinkCache; - private readonly LoadOrder> LoadOrder; + private readonly ILoadOrder> LoadOrder; private readonly IFileSystem _fileSystem; private readonly System.IO.Abstractions.IPath Path; @@ -112,12 +116,12 @@ public void RunPatch() var victimRaceFormKeys = playableRaceFormLinks.Select(x => x.FormKey.AsLinkGetter()).Concat(playableVampireRaceFormLinks.Select(x => x.FormKey.AsLinkGetter())).ToHashSet(); - var otherFormLists = + var otherFormLists = ( from x in LoadOrder.PriorityOrder.WinningOverrides() where !x.Equals(RaceCompatibility.FormList.PlayableRaceList) && !x.Equals(RaceCompatibility.FormList.PlayableVampireList) && x.ContainedFormLinks.Any(y => victimRaceFormKeys.Contains(y.FormKey.AsLink())) - select PatchMod.FormLists.GetOrAddAsOverride(x); + select PatchMod.FormLists.GetOrAddAsOverride(x)).ToList(); var modifiedPlayableRaceFormList = PatchMod.FormLists.GetOrAddAsOverride(playableRaceFormList); var modifiedPlayableVampireRaceFormList = PatchMod.FormLists.GetOrAddAsOverride(playableVampireRaceFormList); @@ -132,7 +136,7 @@ from x in LoadOrder.PriorityOrder.WinningOverrides() var vampireRace = vampireRaceLink.Resolve(LinkCache); if (!race.Flags.HasFlag(Race.Flag.Playable)) - throw RecordException.Factory(new Exception("Race in PlayableRaceList was not playable"), race); + throw RecordException.Create("Race in PlayableRaceList was not playable", race); var newRace = CopyRace(race, texturesPath, meshesPath); @@ -203,12 +207,13 @@ void applyModelEdit(Model? model) if (needsEdit) { var newArmorAddon = PatchMod.ArmorAddons.AddNew($"{armorAddon.EditorID}_UniquePlayer"); - newArmorAddon.DeepCopyIn(armorAddon, new ArmorAddon.TranslationMask(defaultOn: true) + newArmorAddon.DeepCopyIn(armorAddon, out var ex, new ArmorAddon.TranslationMask(defaultOn: true) { EditorID = false, Race = false, AdditionalRaces = false }); + if (ex.Overall is Exception e) throw e; newArmorAddon.Race.SetTo(replacementRaces.First()); replacementRaces.Skip(1).ForEach(x => newArmorAddon.AdditionalRaces.Add(x)); @@ -258,11 +263,12 @@ from armor in LoadOrder.PriorityOrder.WinningOverrides() public Race CopyRace(IRaceGetter oldRace, string texturesPath, string meshesPath) { var newRace = PatchMod.Races.AddNew($"{oldRace.EditorID}_UniquePlayer"); - newRace.DeepCopyIn(oldRace, new Race.TranslationMask(defaultOn: true) + newRace.DeepCopyIn(oldRace, out var ex, new Race.TranslationMask(defaultOn: true) { EditorID = false, ArmorRace = false }); + if (ex.Overall is Exception e) throw e; newRace.MorphRace.SetTo(oldRace); replacementPlayableRacesDict.Add(oldRace.FormKey, newRace.FormKey); diff --git a/UniquePlayer/TextureSets.cs b/UniquePlayer/TextureSets.cs index 2bdf52c..e1a9e82 100644 --- a/UniquePlayer/TextureSets.cs +++ b/UniquePlayer/TextureSets.cs @@ -1,4 +1,7 @@ using Mutagen.Bethesda; +using Mutagen.Bethesda.Plugins; +using Mutagen.Bethesda.Plugins.Cache; +using Mutagen.Bethesda.Plugins.Exceptions; using Mutagen.Bethesda.Skyrim; using System; using System.Collections.Generic; @@ -51,10 +54,11 @@ public bool UpdateTextureSet(IFormLinkGetter textureSetFormLi } var newTxst = PatchMod.TextureSets.AddNew($"{txst.EditorID}_UniquePlayer"); - newTxst.DeepCopyIn(txst, new TextureSet.TranslationMask(defaultOn: true) + newTxst.DeepCopyIn(txst, out var ex, new TextureSet.TranslationMask(defaultOn: true) { EditorID = false }); + if (ex.Overall is Exception e) throw e; replacementTextureSets.Add(textureSetFormKey, newTxst.FormKey); newTxst.Diffuse = TexturePaths.ChangeTexturePath(txst.Diffuse, ref changed, texturesPath); @@ -69,7 +73,7 @@ public bool UpdateTextureSet(IFormLinkGetter textureSetFormLi } catch (Exception e) { - throw RecordException.Factory("UpdatTextureSet", txst, e); + throw RecordException.Enrich(e, txst); } } diff --git a/UniquePlayer/UniquePlayer.csproj b/UniquePlayer/UniquePlayer.csproj index 13a0f34..ad51d65 100644 --- a/UniquePlayer/UniquePlayer.csproj +++ b/UniquePlayer/UniquePlayer.csproj @@ -12,8 +12,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + +