diff --git a/FModel/Creator/BaseIcon.cs b/FModel/Creator/BaseIcon.cs index 5c5a6bfb..ba958a98 100644 --- a/FModel/Creator/BaseIcon.cs +++ b/FModel/Creator/BaseIcon.cs @@ -69,7 +69,7 @@ namespace FModel.Creator /// 1. order doesn't matter /// 2. the importance here is to get the description before gameplay tags /// - public BaseIcon(IUExport export, string exportType, string assetName) : this() + public BaseIcon(IUExport export, string exportType, ref string assetName) : this() { // rarity if (export.GetExport("Series") is ObjectProperty series) @@ -81,7 +81,7 @@ namespace FModel.Creator // image if (Properties.Settings.Default.UseItemShopIcon && - DisplayAssetImage.GetDisplayAssetImage(this, export.GetExport("DisplayAssetPath"), assetName)) + DisplayAssetImage.GetDisplayAssetImage(this, export.GetExport("DisplayAssetPath"), ref assetName)) { } // ^^^^ will return false if image not found, if so, we try to get the normal icon else if (export.GetExport("HeroDefinition", "WeaponDefinition") is ObjectProperty itemDef) LargeSmallImage.GetPreviewImage(this, itemDef, assetName); diff --git a/FModel/Creator/Creator.cs b/FModel/Creator/Creator.cs index adf3f13a..d62b4696 100644 --- a/FModel/Creator/Creator.cs +++ b/FModel/Creator/Creator.cs @@ -90,7 +90,7 @@ namespace FModel.Creator case "FortWeaponMeleeDualWieldItemDefinition": case "FortDailyRewardScheduleTokenDefinition": { - BaseIcon icon = new BaseIcon(export, exportType, assetName); + BaseIcon icon = new BaseIcon(export, exportType, ref assetName); int height = icon.Size + icon.AdditionalSize; using (var ret = new SKBitmap(icon.Size, height, SKColorType.Rgba8888, SKAlphaType.Opaque)) using (var c = new SKCanvas(ret)) diff --git a/FModel/Creator/Icons/DisplayAssetImage.cs b/FModel/Creator/Icons/DisplayAssetImage.cs index df232b55..72fa72ac 100644 --- a/FModel/Creator/Icons/DisplayAssetImage.cs +++ b/FModel/Creator/Icons/DisplayAssetImage.cs @@ -6,7 +6,7 @@ namespace FModel.Creator.Icons { static class DisplayAssetImage { - public static bool GetDisplayAssetImage(BaseIcon icon, SoftObjectProperty o, string assetName) + public static bool GetDisplayAssetImage(BaseIcon icon, SoftObjectProperty o, ref string assetName) { string imageType = "DetailsImage"; switch ("DA_Featured_" + assetName) @@ -44,6 +44,7 @@ namespace FModel.Creator.Icons if (!resourceObject.Value.Resource.OuterIndex.Resource.ObjectName.String.Contains("/Game/Athena/Prototype/Textures/")) { icon.IconImage = Utils.GetObjectTexture(resourceObject); + assetName = "DA_Featured_" + assetName; return true; } } diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index 5eae5fa0..b151cddd 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -122,12 +122,13 @@ + - + diff --git a/FModel/Grabber/Paks/PaksGrabber.cs b/FModel/Grabber/Paks/PaksGrabber.cs index 41cb3ff3..03736f76 100644 --- a/FModel/Grabber/Paks/PaksGrabber.cs +++ b/FModel/Grabber/Paks/PaksGrabber.cs @@ -37,9 +37,6 @@ namespace FModel.Grabber.Paks { foreach (string pak in Directory.GetFiles(Properties.Settings.Default.PakPath, "*.pak")) { - if (pak.Contains("pakChunkEarly-WindowsClient.pak")) - continue; - if (!Utils.Paks.IsFileReadLocked(new FileInfo(pak))) { PakFileReader pakFile = new PakFileReader(pak); diff --git a/FModel/MainWindow.xaml b/FModel/MainWindow.xaml index 2c52257b..b9ca948e 100644 --- a/FModel/MainWindow.xaml +++ b/FModel/MainWindow.xaml @@ -212,7 +212,7 @@ - + @@ -247,6 +247,11 @@ + + + + + diff --git a/FModel/MainWindow.xaml.cs b/FModel/MainWindow.xaml.cs index 71197783..b52bd47f 100644 --- a/FModel/MainWindow.xaml.cs +++ b/FModel/MainWindow.xaml.cs @@ -182,6 +182,7 @@ namespace FModel else Globals.gNotifier.ShowCustomMessage(Properties.Resources.Error, Properties.Resources.NoDataToExport); } private void FModel_MI_Assets_Save_Click(object sender, RoutedEventArgs e) => AvalonEditVm.avalonEditViewModel.Save(false); + private void FModel_MI_Assets_CopyImage_Click(object sender, RoutedEventArgs e) => ImageBoxVm.imageBoxViewModel.Copy(); private void FModel_MI_Assets_SaveImage_Click(object sender, RoutedEventArgs e) => ImageBoxVm.imageBoxViewModel.Save(false); private void FModel_MI_Assets_OpenOutputFolder_Click(object sender, RoutedEventArgs e) => Process.Start(new ProcessStartInfo { FileName = Properties.Settings.Default.OutputPath, UseShellExecute = true }); private void FModel_MI_Assets_ImageMerger_Click(object sender, RoutedEventArgs e) diff --git a/FModel/PakReader/Parsers/Objects/FPakEntry.cs b/FModel/PakReader/Parsers/Objects/FPakEntry.cs index 30885d27..832f5224 100644 --- a/FModel/PakReader/Parsers/Objects/FPakEntry.cs +++ b/FModel/PakReader/Parsers/Objects/FPakEntry.cs @@ -1,4 +1,5 @@ -using System; +using Ionic.Zlib; +using System; using System.IO; namespace PakReader.Parsers.Objects @@ -133,8 +134,6 @@ namespace PakReader.Parsers.Objects public ArraySegment GetData(Stream stream, byte[] key) { - if (CompressionMethodIndex != 0) - throw new NotImplementedException("Decompression not yet implemented"); lock (stream) { stream.Position = Offset + StructSize; @@ -142,13 +141,21 @@ namespace PakReader.Parsers.Objects { var data = new byte[(Size & 15) == 0 ? Size : ((Size / 16) + 1) * 16]; stream.Read(data); - return new ArraySegment(AESDecryptor.DecryptAES(data, key), 0, (int)UncompressedSize); + + if (CompressionMethodIndex == 1) + return new ArraySegment(AESDecryptor.DecryptAES(ZlibStream.UncompressBuffer(data), key), 0, (int)UncompressedSize); + else + return new ArraySegment(AESDecryptor.DecryptAES(data, key), 0, (int)UncompressedSize); } else { var data = new byte[UncompressedSize]; stream.Read(data); - return new ArraySegment(data); + + if (CompressionMethodIndex == 1) + return new ArraySegment(ZlibStream.UncompressBuffer(data)); + else + return new ArraySegment(data); } } } diff --git a/FModel/Properties/Resources.Designer.cs b/FModel/Properties/Resources.Designer.cs index 3b8f4043..1cde70da 100644 --- a/FModel/Properties/Resources.Designer.cs +++ b/FModel/Properties/Resources.Designer.cs @@ -576,6 +576,15 @@ namespace FModel.Properties { } } + /// + /// Recherche une chaîne localisée semblable à Copy Image. + /// + public static string CopyImage { + get { + return ResourceManager.GetString("CopyImage", resourceCulture); + } + } + /// /// Recherche une chaîne localisée semblable à Copied!. /// @@ -1774,6 +1783,15 @@ namespace FModel.Properties { } } + /// + /// Recherche une chaîne localisée semblable à There is currently no image to copy. + /// + public static string NoImageToCopy { + get { + return ResourceManager.GetString("NoImageToCopy", resourceCulture); + } + } + /// /// Recherche une chaîne localisée semblable à There is currently no image to save. /// diff --git a/FModel/Properties/Resources.fr-FR.resx b/FModel/Properties/Resources.fr-FR.resx index 498e1a37..a21335f6 100644 --- a/FModel/Properties/Resources.fr-FR.resx +++ b/FModel/Properties/Resources.fr-FR.resx @@ -853,4 +853,7 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite. Sauvegarder le Répertoire + + Copier l'Image + \ No newline at end of file diff --git a/FModel/Properties/Resources.resx b/FModel/Properties/Resources.resx index c9e283d8..79e9b8c5 100644 --- a/FModel/Properties/Resources.resx +++ b/FModel/Properties/Resources.resx @@ -1088,4 +1088,10 @@ It's now the most used free software to leak on Fortnite. Save Directory + + Copy Image + + + There is currently no image to copy + \ No newline at end of file diff --git a/FModel/Utils/Localizations.cs b/FModel/Utils/Localizations.cs index db3f4daa..69dec3e3 100644 --- a/FModel/Utils/Localizations.cs +++ b/FModel/Utils/Localizations.cs @@ -58,10 +58,10 @@ namespace FModel.Utils foreach (var namespac in new LocResReader(asset).Entries) { if (!_fortniteLocalizationDict.ContainsKey(namespac.Key)) - _fortniteLocalizationDict.Add(namespac.Key, new Dictionary()); + _fortniteLocalizationDict[namespac.Key] = new Dictionary(); foreach (var key in namespac.Value) - _fortniteLocalizationDict[namespac.Key].Add(key.Key, key.Value); + _fortniteLocalizationDict[namespac.Key][key.Key] = key.Value; } } } diff --git a/FModel/ViewModels/ImageBox/ImageBoxViewModel.cs b/FModel/ViewModels/ImageBox/ImageBoxViewModel.cs index f41e93c1..f246ca92 100644 --- a/FModel/ViewModels/ImageBox/ImageBoxViewModel.cs +++ b/FModel/ViewModels/ImageBox/ImageBoxViewModel.cs @@ -94,6 +94,18 @@ namespace FModel.ViewModels.ImageBox } } + public static void Copy(this ImageBoxViewModel vm) + { + Application.Current.Dispatcher.Invoke(delegate + { + if (vm.Image != null) + { + Clipboard.SetImage(vm.Image); + } + else Globals.gNotifier.ShowCustomMessage(Properties.Resources.Error, Properties.Resources.NoImageToCopy); + }); + } + public static void Save(this ImageBoxViewModel vm, bool autoSave) { Application.Current.Dispatcher.Invoke(delegate