From d55d9232d4813884b213e19de3a7590c2d0affbc Mon Sep 17 00:00:00 2001 From: "Stern." <90482851+SternI@users.noreply.github.com> Date: Fri, 20 Mar 2026 21:40:24 +0200 Subject: [PATCH] Add support for new IoStore on-demand TOC format. (#662) Co-authored-by: Krowe Moh <27891447+Krowe-moh@users.noreply.github.com> Co-authored-by: Asval --- CUE4Parse | 2 +- FModel/Creator/Bases/FN/BaseIcon.cs | 7 +++++++ FModel/ViewModels/CUE4ParseViewModel.cs | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index afe94b8c..dc0f8183 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit afe94b8c496eefd8020662ea11fddc63a979fb16 +Subproject commit dc0f8183f6551f9b5bccc8aecee65807362ef297 diff --git a/FModel/Creator/Bases/FN/BaseIcon.cs b/FModel/Creator/Bases/FN/BaseIcon.cs index 985b100a..edf73fce 100644 --- a/FModel/Creator/Bases/FN/BaseIcon.cs +++ b/FModel/Creator/Bases/FN/BaseIcon.cs @@ -36,6 +36,7 @@ public class BaseIcon : UCreator if (Object.TryGetValue(out FInstancedStruct[] dataList, "DataList")) { + GetRarity(dataList); GetSeries(dataList); Preview = Utils.GetBitmap(dataList); } @@ -139,6 +140,12 @@ public class BaseIcon : UCreator GetSeries(export); } + private void GetRarity(FInstancedStruct[] s) + { + if (s.FirstOrDefault(d => d.NonConstStruct?.TryGetValue(out EFortRarity _, "Rarity") == true) is { } dl) + GetRarity(dl.NonConstStruct.Get("Rarity")); + } + private void GetSeries(FInstancedStruct[] s) { if (s.FirstOrDefault(d => d.NonConstStruct?.TryGetValue(out FPackageIndex _, "Series") == true) is { } dl) diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index 6b13ecc4..d9a96a21 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -491,7 +491,7 @@ public class CUE4ParseViewModel : ViewModel var ioStoreOnDemandPath = Path.Combine(UserSettings.Default.GameDirectory, "..\\..\\..\\Cloud", inst[0].Value.SubstringAfterLast("/").SubstringBefore("\"")); if (!File.Exists(ioStoreOnDemandPath)) return; - await Provider.RegisterVfsAsync(new IoChunkToc(ioStoreOnDemandPath)); + await Provider.RegisterVfsAsync(new IoChunkToc(ioStoreOnDemandPath, Provider.Versions)); var onDemandCount = await Provider.MountAsync(); FLogger.Append(ELog.Information, () => FLogger.Text($"{onDemandCount} on-demand archive{(onDemandCount > 1 ? "s" : "")} streamed via epicgames.com", Constants.WHITE, true));