From 9daffc9382105f65d1e571b53b9667c6b6946f78 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Fri, 5 Mar 2021 16:53:09 +0100 Subject: [PATCH] Fix for reloading penumbra and default IMCs (forgot a clone) --- Penumbra/MetaData/ImcExtensions.cs | 18 ++++++++++++++++++ Penumbra/MetaData/MetaDefaults.cs | 2 +- Penumbra/Mods/MetaManager.cs | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Penumbra/MetaData/ImcExtensions.cs b/Penumbra/MetaData/ImcExtensions.cs index dc8b3825..dc31aa22 100644 --- a/Penumbra/MetaData/ImcExtensions.cs +++ b/Penumbra/MetaData/ImcExtensions.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using System.IO; +using System.Linq; using Lumina.Data.Files; using Penumbra.Game; using Penumbra.Mods; @@ -77,5 +78,22 @@ namespace Penumbra.MetaData return ref parts[ idx ].Variants[ imc.Variant - 1 ]; } + + public static ImcFile Clone( this ImcFile file ) + { + var ret = new ImcFile + { + Count = file.Count, + PartMask = file.PartMask + }; + var parts = file.GetParts().Select( P => new ImcFile.ImageChangeParts() + { + DefaultVariant = P.DefaultVariant, + Variants = ( ImcFile.ImageChangeData[] )P.Variants.Clone() + } ).ToArray(); + var prop = ret.GetType().GetField( "Parts", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance ); + prop!.SetValue( ret, parts ); + return ret; + } } } \ No newline at end of file diff --git a/Penumbra/MetaData/MetaDefaults.cs b/Penumbra/MetaData/MetaDefaults.cs index e258c455..b2cf881b 100644 --- a/Penumbra/MetaData/MetaDefaults.cs +++ b/Penumbra/MetaData/MetaDefaults.cs @@ -96,7 +96,7 @@ namespace Penumbra.MetaData => GetDefaultEstFile( type, equip, body )?.Clone(); public ImcFile? GetNewImcFile( ObjectType type, ushort primarySetId, ushort secondarySetId = 0 ) - => GetDefaultImcFile( type, primarySetId, secondarySetId ); // todo ?.Clone(); + => GetDefaultImcFile( type, primarySetId, secondarySetId )?.Clone(); public MetaDefaults( DalamudPluginInterface pi ) diff --git a/Penumbra/Mods/MetaManager.cs b/Penumbra/Mods/MetaManager.cs index 35f43513..be800237 100644 --- a/Penumbra/Mods/MetaManager.cs +++ b/Penumbra/Mods/MetaManager.cs @@ -4,7 +4,6 @@ using System.IO; using System.Linq; using Dalamud.Plugin; using Lumina.Data.Files; -using Penumbra.Game; using Penumbra.Hooks; using Penumbra.Util; using Penumbra.MetaData; @@ -77,6 +76,7 @@ namespace Penumbra.Mods _currentManipulations.Clear(); _currentFiles.Clear(); ClearDirectory(); + _resourceManagement.ReloadPlayerResources(); } private void ClearDirectory()