From 3ff24995c0f0d7ba54e9b518c4ba6b8bec37b4b9 Mon Sep 17 00:00:00 2001 From: iAmAsval Date: Wed, 17 Jun 2020 22:29:53 +0200 Subject: [PATCH] fixed some audios + fixed cid 776 + fixed pickaxes without images --- FModel/Creator/Icons/LargeSmallImage.cs | 30 ++++++++++++++----- FModel/FModel.csproj | 4 +-- FModel/Grabber/Aes/AesData.cs | 3 +- FModel/MainWindow.xaml.cs | 2 +- FModel/PakReader/Pak/PakPackage.cs | 10 +++++++ FModel/PakReader/Parsers/Class/USoundWave.cs | 6 +--- .../Parsers/Objects/FPackageIndex.cs | 20 +++++++++---- .../SoundPlayer/InputFileViewModel.cs | 2 +- .../SoundPlayer/Visualization/OutputSource.cs | 2 +- 9 files changed, 53 insertions(+), 26 deletions(-) diff --git a/FModel/Creator/Icons/LargeSmallImage.cs b/FModel/Creator/Icons/LargeSmallImage.cs index 3bd18e77..4ed5a399 100644 --- a/FModel/Creator/Icons/LargeSmallImage.cs +++ b/FModel/Creator/Icons/LargeSmallImage.cs @@ -22,18 +22,32 @@ namespace FModel.Creator.Icons PakPackage p = Utils.GetPropertyPakPackage(path); if (p.HasExport() && !p.Equals(default)) { - var obj = p.GetExport(); - if (obj != null) - { - if (hightRes && obj.TryGetValue("LargePreviewImage", out var sLarge) && sLarge is SoftObjectProperty largePreviewImage) - GetPreviewImage(icon, largePreviewImage); - else if (obj.TryGetValue("SmallPreviewImage", out var sSmall) && sSmall is SoftObjectProperty smallPreviewImage) - GetPreviewImage(icon, smallPreviewImage); - } + if (GetPreviewImage(icon, p.GetIndexedExport(0), hightRes)) + return; + else if (GetPreviewImage(icon, p.GetIndexedExport(1), hightRes)) // FortniteGame/Content/Athena/Items/Cosmetics/Pickaxes/Pickaxe_ID_402_BlackKnightFemale1H.uasset + return; } } public static void GetPreviewImage(BaseIcon icon, SoftObjectProperty s) => icon.IconImage = Utils.GetSoftObjectTexture(s); + private static bool GetPreviewImage(BaseIcon icon, UObject obj, bool hightRes) + { + if (obj != null) + { + if (hightRes && obj.TryGetValue("LargePreviewImage", out var sLarge) && sLarge is SoftObjectProperty largePreviewImage) + { + GetPreviewImage(icon, largePreviewImage); + return true; + } + else if (obj.TryGetValue("SmallPreviewImage", out var sSmall) && sSmall is SoftObjectProperty smallPreviewImage) + { + GetPreviewImage(icon, smallPreviewImage); + return true; + } + } + return false; + } + public static void DrawPreviewImage(SKCanvas c, BaseIcon icon) => c.DrawBitmap(icon.IconImage ?? icon.FallbackImage, new SKRect(icon.Margin, icon.Margin, icon.Size - icon.Margin, icon.Size - icon.Margin), new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true }); diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index ff896600..e9b0e41f 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -8,8 +8,8 @@ FModel.App Asval - 3.1.0.4 - 3.1.0.4 + 3.1.0.5 + 3.1.0.5 FModel.ico https://github.com/iAmAsval/FModel diff --git a/FModel/Grabber/Aes/AesData.cs b/FModel/Grabber/Aes/AesData.cs index eb549445..5646cff6 100644 --- a/FModel/Grabber/Aes/AesData.cs +++ b/FModel/Grabber/Aes/AesData.cs @@ -14,8 +14,7 @@ namespace FModel.Grabber.Aes { if (NetworkInterface.GetIsNetworkAvailable()) { - (_, string fortniteVersion, string _) = Utils.Paks.GetUEGameFilesPath("Fortnite"); - BenResponse data = await Endpoints.GetJsonEndpoint(Endpoints.BENBOT_AES, fortniteVersion).ConfigureAwait(false); + BenResponse data = await Endpoints.GetJsonEndpoint(Endpoints.BENBOT_AES, string.Empty).ConfigureAwait(false); return data; } else diff --git a/FModel/MainWindow.xaml.cs b/FModel/MainWindow.xaml.cs index dd5a3830..fa648c23 100644 --- a/FModel/MainWindow.xaml.cs +++ b/FModel/MainWindow.xaml.cs @@ -55,7 +55,7 @@ namespace FModel } private async void OnLoaded(object sender, RoutedEventArgs e) { - FModelVersion_TxtBlck.Text += Assembly.GetExecutingAssembly().GetName().Version.ToString().Substring(0, 5); + FModelVersion_TxtBlck.Text += Assembly.GetExecutingAssembly().GetName().Version.ToString(); FModel_StsBar.DataContext = StatusBarVm.statusBarViewModel; FModel_AvalonEdit.DataContext = AvalonEditVm.avalonEditViewModel; FModel_ImgBox.DataContext = ImageBoxVm.imageBoxViewModel; diff --git a/FModel/PakReader/Pak/PakPackage.cs b/FModel/PakReader/Pak/PakPackage.cs index ca7f82a0..f76cb848 100644 --- a/FModel/PakReader/Pak/PakPackage.cs +++ b/FModel/PakReader/Pak/PakPackage.cs @@ -78,6 +78,16 @@ namespace PakReader.Pak } return default; } + public T GetIndexedExport(int index) where T : IUExport + { + var exports = Exports; + for (int i = 0; i < exports.Length; i++) + { + if (i == index && exports[i] is T) + return (T)exports[i]; + } + return default; + } public bool HasExport() => exports != null; diff --git a/FModel/PakReader/Parsers/Class/USoundWave.cs b/FModel/PakReader/Parsers/Class/USoundWave.cs index 8e78f562..e9f5a123 100644 --- a/FModel/PakReader/Parsers/Class/USoundWave.cs +++ b/FModel/PakReader/Parsers/Class/USoundWave.cs @@ -10,7 +10,7 @@ namespace PakReader.Parsers.Class { public bool bCooked; /** Whether this sound can be streamed to avoid increased memory usage. If using Stream Caching, use Loading Behavior instead to control memory usage. */ - public bool bStreaming = false; + public bool bStreaming = true; /** Uncompressed wav data 16 bit in mono or stereo - stereo not allowed for multichannel data */ public FByteBulkData RawData; /** GUID used to uniquely identify this node so it can be found in the DDC */ @@ -21,10 +21,6 @@ namespace PakReader.Parsers.Class public FName AudioFormat; /** audio data. */ public FStreamedAudioChunk[] Chunks; - /** Cached sample rate for displaying in the tools */ - //public int SampleRate; - /** Number of channels of multichannel data; 1 or 2 for regular mono and stereo files */ - //public int NumChannels; byte[] sound; public byte[] Sound diff --git a/FModel/PakReader/Parsers/Objects/FPackageIndex.cs b/FModel/PakReader/Parsers/Objects/FPackageIndex.cs index d547d743..a094dc21 100644 --- a/FModel/PakReader/Parsers/Objects/FPackageIndex.cs +++ b/FModel/PakReader/Parsers/Objects/FPackageIndex.cs @@ -14,12 +14,20 @@ namespace PakReader.Parsers.Objects { [JsonIgnore] public readonly int Index; - public FObjectResource Resource => - !IsNull ? - IsImport ? - Reader.ImportMap[AsImport] : - (FObjectResource)Reader.ExportMap[AsExport] - : null; + public FObjectResource Resource + { + get + { + if (!IsNull) + { + if (IsImport && AsImport < Reader.ImportMap.Length) + return Reader.ImportMap[AsImport]; + else if (IsImport && AsExport < Reader.ExportMap.Length) + return Reader.ExportMap[AsExport]; + } + return null; + } + } readonly PackageReader Reader; diff --git a/FModel/ViewModels/SoundPlayer/InputFileViewModel.cs b/FModel/ViewModels/SoundPlayer/InputFileViewModel.cs index 3379221c..eab51094 100644 --- a/FModel/ViewModels/SoundPlayer/InputFileViewModel.cs +++ b/FModel/ViewModels/SoundPlayer/InputFileViewModel.cs @@ -39,7 +39,7 @@ namespace FModel.ViewModels.SoundPlayer private string _content; private string _bytes; private string _duration; - private float _volume = float.Parse(Properties.Settings.Default.AudioPlayerVolume); + private float _volume = float.TryParse(Properties.Settings.Default.AudioPlayerVolume, out var v) ? v : 0.5f; public ObservableCollection Devices { diff --git a/FModel/Windows/SoundPlayer/Visualization/OutputSource.cs b/FModel/Windows/SoundPlayer/Visualization/OutputSource.cs index 4c024072..1ddbd068 100644 --- a/FModel/Windows/SoundPlayer/Visualization/OutputSource.cs +++ b/FModel/Windows/SoundPlayer/Visualization/OutputSource.cs @@ -53,7 +53,7 @@ namespace FModel.Windows.SoundPlayer.Visualization } } - private float volume = float.Parse(Properties.Settings.Default.AudioPlayerVolume); + private float volume = float.TryParse(Properties.Settings.Default.AudioPlayerVolume, out var v) ? v : 0.5f; public float Volume { get { return _soundOut == null ? 0.0f : _soundOut.Volume; }