diff --git a/Penumbra/Import/Structs/MetaFileInfo.cs b/Penumbra/Import/Structs/MetaFileInfo.cs index 53349f5a..81b869d9 100644 --- a/Penumbra/Import/Structs/MetaFileInfo.cs +++ b/Penumbra/Import/Structs/MetaFileInfo.cs @@ -16,7 +16,7 @@ public partial struct MetaFileInfo private static partial Regex HousingMeta(); [GeneratedRegex( - @"chara/(?'Type1'[a-z]*)/(?'Pre1'[a-z])(?'Id1'\d{4})(/obj/(?'Type2'[a-z]*)/(?'Pre2'[a-z])(?'Id2'\d{4}))?/\k'Pre1'\k'Id1'(\k'Pre2'\k'Id2')?(_(?'Slot'[a-z]{3}))?\\.meta", + @"chara/(?'Type1'[a-z]*)/(?'Pre1'[a-z])(?'Id1'\d{4})(/obj/(?'Type2'[a-z]*)/(?'Pre2'[a-z])(?'Id2'\d{4}))?/\k'Pre1'\k'Id1'(\k'Pre2'\k'Id2')?(_(?'Slot'[a-z]{3}))?\.meta", RegexOptions.Compiled | RegexOptions.ExplicitCapture)] private static partial Regex CharaMeta(); diff --git a/Penumbra/Mods/Editor/ModFileCollection.cs b/Penumbra/Mods/Editor/ModFileCollection.cs index 72eb742b..9905fbcb 100644 --- a/Penumbra/Mods/Editor/ModFileCollection.cs +++ b/Penumbra/Mods/Editor/ModFileCollection.cs @@ -98,6 +98,7 @@ public class ModFileCollection : IDisposable _usedPaths.Remove(oldPath.Item2); if (!gamePath.IsEmpty) { + file.SubModUsage[pathIdx] = (oldPath.Item1, gamePath); _usedPaths.Add(gamePath); } else diff --git a/Penumbra/Mods/Editor/ModFileEditor.cs b/Penumbra/Mods/Editor/ModFileEditor.cs index d5e5fea6..c9813b33 100644 --- a/Penumbra/Mods/Editor/ModFileEditor.cs +++ b/Penumbra/Mods/Editor/ModFileEditor.cs @@ -36,7 +36,7 @@ public class ModFileEditor _modManager.OptionEditor.OptionSetFiles(mod, option.GroupIdx, option.OptionIdx, dict); _files.UpdatePaths(mod, option); - + Changes = false; return num; } @@ -125,10 +125,15 @@ public class ModFileEditor { foreach (var file in files) { - foreach (var (_, path) in file.SubModUsage.Where(p => p.Item1 == option)) + for (var i = 0; i < file.SubModUsage.Count; ++i) { + var (opt, path) = file.SubModUsage[i]; + if (option != opt) + continue; + _files.RemoveUsedPath(option, file, path); Changes = true; + --i; } } } diff --git a/Penumbra/Mods/Manager/Mod.Manager.cs b/Penumbra/Mods/Manager/ModManager.cs similarity index 100% rename from Penumbra/Mods/Manager/Mod.Manager.cs rename to Penumbra/Mods/Manager/ModManager.cs diff --git a/Penumbra/Mods/ModCacheManager.cs b/Penumbra/Mods/ModCacheManager.cs index 365ac52e..3350119f 100644 --- a/Penumbra/Mods/ModCacheManager.cs +++ b/Penumbra/Mods/ModCacheManager.cs @@ -191,6 +191,7 @@ public class ModCacheManager : IDisposable, IReadOnlyList _cache.AddRange(Enumerable.Range(0, _modManager.Count - _cache.Count).Select(_ => new ModCache())); Parallel.ForEach(Enumerable.Range(0, _modManager.Count), idx => { Refresh(_cache[idx], _modManager[idx]); }); + Count = _modManager.Count; } private void OnIdentifierCreation() @@ -261,11 +262,10 @@ public class ModCacheManager : IDisposable, IReadOnlyList if (mod.Index >= _cache.Count) - _cache.AddRange(Enumerable.Range(0, mod.Index - _cache.Count).Select(_ => new ModCache())); - else if (mod.Index >= Count) - for (var i = Count; i <= mod.Index; ++i) - _cache[i].Reset(); - + _cache.AddRange(Enumerable.Range(0, mod.Index + 1 - _cache.Count).Select(_ => new ModCache())); + for (var i = Count; i < mod.Index; ++i) + Refresh(_cache[i], _modManager[i]); + Count = mod.Index + 1; return _cache[mod.Index]; } }