1
1
using Mutagen . Bethesda ;
2
2
using Mutagen . Bethesda . FormKeys . SkyrimSE ;
3
+ using Mutagen . Bethesda . Plugins ;
4
+ using Mutagen . Bethesda . Plugins . Cache ;
5
+ using Mutagen . Bethesda . Plugins . Exceptions ;
6
+ using Mutagen . Bethesda . Plugins . Order ;
3
7
using Mutagen . Bethesda . Skyrim ;
4
8
using Mutagen . Bethesda . Synthesis ;
5
9
using Noggog ;
@@ -21,7 +25,7 @@ public class Program
21
25
22
26
private readonly ILinkCache < ISkyrimMod , ISkyrimModGetter > LinkCache ;
23
27
24
- private readonly LoadOrder < IModListing < ISkyrimModGetter > > LoadOrder ;
28
+ private readonly ILoadOrder < IModListing < ISkyrimModGetter > > LoadOrder ;
25
29
26
30
private readonly IFileSystem _fileSystem ;
27
31
private readonly System . IO . Abstractions . IPath Path ;
@@ -112,12 +116,12 @@ public void RunPatch()
112
116
113
117
var victimRaceFormKeys = playableRaceFormLinks . Select ( x => x . FormKey . AsLinkGetter < IRaceGetter > ( ) ) . Concat ( playableVampireRaceFormLinks . Select ( x => x . FormKey . AsLinkGetter < IRaceGetter > ( ) ) ) . ToHashSet ( ) ;
114
118
115
- var otherFormLists =
119
+ var otherFormLists = (
116
120
from x in LoadOrder . PriorityOrder . WinningOverrides < IFormListGetter > ( )
117
121
where ! x . Equals ( RaceCompatibility . FormList . PlayableRaceList )
118
122
&& ! x . Equals ( RaceCompatibility . FormList . PlayableVampireList )
119
123
&& x . ContainedFormLinks . Any ( y => victimRaceFormKeys . Contains ( y . FormKey . AsLink < IRaceGetter > ( ) ) )
120
- select PatchMod . FormLists . GetOrAddAsOverride ( x ) ;
124
+ select PatchMod . FormLists . GetOrAddAsOverride ( x ) ) . ToList ( ) ;
121
125
122
126
var modifiedPlayableRaceFormList = PatchMod . FormLists . GetOrAddAsOverride ( playableRaceFormList ) ;
123
127
var modifiedPlayableVampireRaceFormList = PatchMod . FormLists . GetOrAddAsOverride ( playableVampireRaceFormList ) ;
@@ -132,7 +136,7 @@ from x in LoadOrder.PriorityOrder.WinningOverrides<IFormListGetter>()
132
136
var vampireRace = vampireRaceLink . Resolve ( LinkCache ) ;
133
137
134
138
if ( ! race . Flags . HasFlag ( Race . Flag . Playable ) )
135
- throw RecordException . Factory ( new Exception ( "Race in PlayableRaceList was not playable" ) , race ) ;
139
+ throw RecordException . Create ( "Race in PlayableRaceList was not playable" , race ) ;
136
140
137
141
var newRace = CopyRace ( race , texturesPath , meshesPath ) ;
138
142
@@ -203,12 +207,13 @@ void applyModelEdit(Model? model)
203
207
if ( needsEdit )
204
208
{
205
209
var newArmorAddon = PatchMod . ArmorAddons . AddNew ( $ "{ armorAddon . EditorID } _UniquePlayer") ;
206
- newArmorAddon . DeepCopyIn ( armorAddon , new ArmorAddon . TranslationMask ( defaultOn : true )
210
+ newArmorAddon . DeepCopyIn ( armorAddon , out var ex , new ArmorAddon . TranslationMask ( defaultOn : true )
207
211
{
208
212
EditorID = false ,
209
213
Race = false ,
210
214
AdditionalRaces = false
211
215
} ) ;
216
+ if ( ex . Overall is Exception e ) throw e ;
212
217
newArmorAddon . Race . SetTo ( replacementRaces . First ( ) ) ;
213
218
replacementRaces . Skip ( 1 ) . ForEach ( x => newArmorAddon . AdditionalRaces . Add ( x ) ) ;
214
219
@@ -258,11 +263,12 @@ from armor in LoadOrder.PriorityOrder.WinningOverrides<IArmorGetter>()
258
263
public Race CopyRace ( IRaceGetter oldRace , string texturesPath , string meshesPath )
259
264
{
260
265
var newRace = PatchMod . Races . AddNew ( $ "{ oldRace . EditorID } _UniquePlayer") ;
261
- newRace . DeepCopyIn ( oldRace , new Race . TranslationMask ( defaultOn : true )
266
+ newRace . DeepCopyIn ( oldRace , out var ex , new Race . TranslationMask ( defaultOn : true )
262
267
{
263
268
EditorID = false ,
264
269
ArmorRace = false
265
270
} ) ;
271
+ if ( ex . Overall is Exception e ) throw e ;
266
272
newRace . MorphRace . SetTo ( oldRace ) ;
267
273
replacementPlayableRacesDict . Add ( oldRace . FormKey , newRace . FormKey ) ;
268
274
0 commit comments