From fa6279b697f5e26fa7cecce916be5534a4657c49 Mon Sep 17 00:00:00 2001 From: EzioTheDeadPoet <52624146+EzioTheDeadPoet@users.noreply.github.com> Date: Thu, 7 Nov 2024 21:27:55 +0100 Subject: [PATCH] Improve Logging --- HighPolyHead-RaceMenu Patcher/Program.cs | 94 +++++++++++++----------- 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/HighPolyHead-RaceMenu Patcher/Program.cs b/HighPolyHead-RaceMenu Patcher/Program.cs index ed57901..961ab8d 100644 --- a/HighPolyHead-RaceMenu Patcher/Program.cs +++ b/HighPolyHead-RaceMenu Patcher/Program.cs @@ -135,59 +135,71 @@ private static void RunPatch(IPatcherState state) // by now you can tell ive given up on efficiency and just wanted to get the damn thing working foreach(var npcPreset in state.LoadOrder.PriorityOrder.OnlyEnabled().Npc().WinningOverrides()) { - if (npcPreset.EditorID == null) continue; - var eid = npcPreset.EditorID; - - var withoutLastTwo = (eid.Length > 2) ? eid[..^2] : eid; - - if (!withoutLastTwo.EndsWith("Preset") && !npcPreset.Race.Equals(Skyrim.Race.FoxRace)) + try { + if (npcPreset.EditorID == null) continue; + var eid = npcPreset.EditorID; - var changed = false; - var npcPartTypes = new HashSet(); + var withoutLastTwo = (eid.Length > 2) ? eid[..^2] : eid; - var npcDeepCopy = npcPreset.DeepCopy(); - - foreach (var part in npcDeepCopy.HeadParts) + if (!withoutLastTwo.EndsWith("Preset") && !npcPreset.Race.Equals(Skyrim.Race.FoxRace)) { - if (!part.TryResolve(state.LinkCache, out var headPartGetter)) continue; - if (headPartGetter.Type != null) npcPartTypes.Add((HeadPart.TypeEnum) headPartGetter.Type); - } - var raceHeadParts = npcDeepCopy.Configuration.Flags.HasFlag(NpcConfiguration.Flag.Female) - ? raceHeadPartsFemale - : raceHeadPartsMale; - - if (!raceHeadParts.TryGetValue(npcDeepCopy.Race, out var currentRaceHeadParts)) - { - continue; - } - - foreach (var part in currentRaceHeadParts) - { - part.TryResolve(state.LinkCache, out var headPartGetter); - if (headPartGetter?.Type == null) continue; - if (npcPartTypes.Contains((HeadPart.TypeEnum) headPartGetter.Type)) continue; - npcDeepCopy.HeadParts.Add(part); - changed = true; + var changed = false; + var npcPartTypes = new HashSet(); + + var npcDeepCopy = npcPreset.DeepCopy(); + + foreach (var part in npcDeepCopy.HeadParts) + { + if (!part.TryResolve(state.LinkCache, out var headPartGetter)) continue; + if (headPartGetter.Type != null) npcPartTypes.Add((HeadPart.TypeEnum) headPartGetter.Type); + } + + var raceHeadParts = npcDeepCopy.Configuration.Flags.HasFlag(NpcConfiguration.Flag.Female) + ? raceHeadPartsFemale + : raceHeadPartsMale; + + if (!raceHeadParts.TryGetValue(npcDeepCopy.Race, out var currentRaceHeadParts)) + { + continue; + } + + foreach (var part in currentRaceHeadParts) + { + part.TryResolve(state.LinkCache, out var headPartGetter); + if (headPartGetter?.Type == null) continue; + if (npcPartTypes.Contains((HeadPart.TypeEnum) headPartGetter.Type)) continue; + npcDeepCopy.HeadParts.Add(part); + changed = true; + } + + if (changed) + { + state.PatchMod.Npcs.Set(npcDeepCopy); + } } - if (changed) + if (!withoutLastTwo.EndsWith("Preset")) continue; + var npcOverride = state.PatchMod.Npcs.GetOrAddAsOverride(npcPreset); + for (var index = 0; index < npcOverride.HeadParts.Count; index++) { - state.PatchMod.Npcs.Set(npcDeepCopy); + if (!vanillaToHphParts.TryGetValue(npcOverride.HeadParts[index], out var replacementHead)) + { + continue; + } + + npcOverride.HeadParts[index] = replacementHead; } } - - if (!withoutLastTwo.EndsWith("Preset")) continue; - var npcOverride = state.PatchMod.Npcs.GetOrAddAsOverride(npcPreset); - for (var index = 0; index < npcOverride.HeadParts.Count; index++) + catch (Exception e) { - if (!vanillaToHphParts.TryGetValue(npcOverride.HeadParts[index], out var replacementHead)) - { - continue; - } - npcOverride.HeadParts[index] = replacementHead; + Console.WriteLine($"Error: {e.Message}"); + Console.WriteLine($"Error NPC: {npcPreset}"); + Console.WriteLine($"Error NPC EditorID: {npcPreset.EditorID}"); + Console.WriteLine($"Stack trace: {e.StackTrace}"); } + } } }