diff --git a/FModel/Creator/Bases/BasePlaylist.cs b/FModel/Creator/Bases/BasePlaylist.cs index 3022c21a..f875c733 100644 --- a/FModel/Creator/Bases/BasePlaylist.cs +++ b/FModel/Creator/Bases/BasePlaylist.cs @@ -38,7 +38,8 @@ public BasePlaylist(IUExport export) if (export.GetExport("UIDescription", "Description") is { } description) Description = Text.GetTextPropertyBase(description); - Width = Height = 512; + Width = 1024; + Height = 512; if (export.GetExport("PlaylistName") is { } playlistName && !playlistName.Value.IsNone) { diff --git a/FModel/Creator/Creator.cs b/FModel/Creator/Creator.cs index 54d71a29..315e4b5f 100644 --- a/FModel/Creator/Creator.cs +++ b/FModel/Creator/Creator.cs @@ -152,7 +152,7 @@ public static bool TryDrawIcon(string assetPath, FName[] exportTypes, IUExport[] Rarity.DrawRarity(c, icon); } - LargeSmallImage.DrawPreviewImage(c, icon); + LargeSmallImage.DrawNotStretchedPreviewImage(c, icon); if ((EIconDesign)Properties.Settings.Default.AssetsIconDesign != EIconDesign.NoBackground) { @@ -164,7 +164,7 @@ public static bool TryDrawIcon(string assetPath, FName[] exportTypes, IUExport[] } } - Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512 + // Watermark.DrawWatermark(c); // boi why would you watermark something you don't own ¯\_(ツ)_/¯ ImageBoxVm.imageBoxViewModel.Set(ret, assetName); } return true; diff --git a/FModel/Creator/Icons/LargeSmallImage.cs b/FModel/Creator/Icons/LargeSmallImage.cs index 79feee8d..9fd049e3 100644 --- a/FModel/Creator/Icons/LargeSmallImage.cs +++ b/FModel/Creator/Icons/LargeSmallImage.cs @@ -57,5 +57,13 @@ private static bool GetPreviewImage(BaseIcon icon, UObject obj, bool hightRes) public static void DrawPreviewImage(SKCanvas c, IBase icon) => c.DrawBitmap(icon.IconImage ?? icon.FallbackImage, new SKRect(icon.Margin, icon.Margin, icon.Width - icon.Margin, icon.Height - icon.Margin), new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true }); + + public static void DrawNotStretchedPreviewImage(SKCanvas c, IBase icon) + { + SKBitmap i = icon.IconImage ?? icon.FallbackImage; + int x = i.Width < icon.Width ? ((icon.Width / 2) - (i.Width / 2)) : icon.Margin; + c.DrawBitmap(i, new SKRect(x, icon.Margin, (x + i.Width) - (icon.Margin * 2), i.Height - icon.Margin), + new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true }); + } } } diff --git a/FModel/Creator/Texts/Text.cs b/FModel/Creator/Texts/Text.cs index 1e9502b1..2fd5f69f 100644 --- a/FModel/Creator/Texts/Text.cs +++ b/FModel/Creator/Texts/Text.cs @@ -157,96 +157,92 @@ public static void DrawDisplayName(SKCanvas c, IBase icon) { _NAME_TEXT_SIZE = 45; string text = icon.DisplayName; - if (!string.IsNullOrEmpty(text)) + SKTextAlign side = SKTextAlign.Center; + int x = icon.Width / 2; + int y = _STARTER_TEXT_POSITION + _NAME_TEXT_SIZE; + switch ((EIconDesign)Properties.Settings.Default.AssetsIconDesign) { - SKTextAlign side = SKTextAlign.Center; - int x = icon.Width / 2; - int y = _STARTER_TEXT_POSITION + _NAME_TEXT_SIZE; - switch ((EIconDesign)Properties.Settings.Default.AssetsIconDesign) - { - case EIconDesign.Mini: - { - _NAME_TEXT_SIZE = 47; - text = text.ToUpperInvariant(); - break; - } - case EIconDesign.Flat: - { - _NAME_TEXT_SIZE = 47; - side = SKTextAlign.Right; - x = icon.Width - icon.Margin * 2; - break; - } - } + case EIconDesign.Mini: + { + _NAME_TEXT_SIZE = 47; + text = text.ToUpperInvariant(); + break; + } + case EIconDesign.Flat: + { + _NAME_TEXT_SIZE = 47; + side = SKTextAlign.Right; + x = icon.Width - icon.Margin * 2; + break; + } + } - SKPaint namePaint = new SKPaint - { - IsAntialias = true, - FilterQuality = SKFilterQuality.High, - Typeface = TypeFaces.DisplayNameTypeface, - TextSize = _NAME_TEXT_SIZE, - Color = SKColors.White, - TextAlign = side - }; + SKPaint namePaint = new SKPaint + { + IsAntialias = true, + FilterQuality = SKFilterQuality.High, + Typeface = TypeFaces.DisplayNameTypeface, + TextSize = _NAME_TEXT_SIZE, + Color = SKColors.White, + TextAlign = side + }; - if ((ELanguage)Properties.Settings.Default.AssetsLanguage == ELanguage.Arabic) + if ((ELanguage)Properties.Settings.Default.AssetsLanguage == ELanguage.Arabic) + { + SKShaper shaper = new SKShaper(namePaint.Typeface); + float shapedTextWidth; + + while (true) { - SKShaper shaper = new SKShaper(namePaint.Typeface); - float shapedTextWidth; + SKShaper.Result shapedText = shaper.Shape(text, namePaint); + shapedTextWidth = shapedText.Points[^1].X + namePaint.TextSize / 2f; - while (true) + if (shapedTextWidth > icon.Width - icon.Margin * 2) { - SKShaper.Result shapedText = shaper.Shape(text, namePaint); - shapedTextWidth = shapedText.Points[^1].X + namePaint.TextSize / 2f; - - if (shapedTextWidth > icon.Width - icon.Margin * 2) - { - namePaint.TextSize = _NAME_TEXT_SIZE -= 1; - } - else - { - break; - } + namePaint.TextSize = _NAME_TEXT_SIZE -= 1; } - - c.DrawShapedText(shaper, text, (icon.Width - shapedTextWidth) / 2f, y, namePaint); - } - else - { - // resize if too long - while (namePaint.MeasureText(text) > icon.Width - icon.Margin * 2) + else { - namePaint.TextSize = _NAME_TEXT_SIZE -= 1; + break; } + } - c.DrawText(text, x, y, namePaint); + c.DrawShapedText(shaper, text, side == SKTextAlign.Right ? (x - shapedTextWidth) : ((icon.Width - shapedTextWidth) / 2f), y, namePaint); + } + else + { + // resize if too long + while (namePaint.MeasureText(text) > icon.Width - icon.Margin * 2) + { + namePaint.TextSize = _NAME_TEXT_SIZE -= 1; } + + c.DrawText(text, x, y, namePaint); } } public static void DrawDescription(SKCanvas c, IBase icon) { + if (!string.IsNullOrEmpty(icon.Description)) return; + int maxLine = 4; _BOTTOM_TEXT_SIZE = 15; string text = icon.Description; ETextSide side = ETextSide.Center; - if (text != null) + switch ((EIconDesign)Properties.Settings.Default.AssetsIconDesign) { - switch ((EIconDesign)Properties.Settings.Default.AssetsIconDesign) - { - case EIconDesign.Mini: - { - maxLine = 5; - _BOTTOM_TEXT_SIZE = icon.Margin; - text = text.ToUpper(); - break; - } - case EIconDesign.Flat: - { - side = ETextSide.Right; - break; - } - } + case EIconDesign.Mini: + { + maxLine = 5; + _BOTTOM_TEXT_SIZE = icon.Margin; + text = text.ToUpper(); + break; + } + case EIconDesign.Flat: + { + side = ETextSide.Right; + break; + } } SKPaint descriptionPaint = new SKPaint @@ -257,7 +253,7 @@ public static void DrawDescription(SKCanvas c, IBase icon) TextSize = 13, Color = SKColors.White, }; - + // wrap if too long Helper.DrawCenteredMultilineText(c, text, maxLine, icon, side, new SKRect(icon.Margin, _STARTER_TEXT_POSITION + _NAME_TEXT_SIZE, icon.Width - icon.Margin, icon.Height - _BOTTOM_TEXT_SIZE), diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index 70bfbb2b..50d7786d 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -8,8 +8,8 @@ FModel.App Asval - 3.1.1.2 - 3.1.1.2 + 3.1.1.3 + 3.1.1.3 FModel.ico https://github.com/iAmAsval/FModel diff --git a/FModel/Grabber/Paks/PaksGrabber.cs b/FModel/Grabber/Paks/PaksGrabber.cs index 01616e3e..42f44b99 100644 --- a/FModel/Grabber/Paks/PaksGrabber.cs +++ b/FModel/Grabber/Paks/PaksGrabber.cs @@ -18,7 +18,7 @@ namespace FModel.Grabber.Paks { static class PaksGrabber { - private static readonly Regex _pakFileRegex = new Regex(@"^FortniteGame/Content/Paks/.+\.pak$", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant); + private static readonly Regex _pakFileRegex = new Regex(@"^FortniteGame/Content/Paks/pakchunk(?:0|10.*|\w+)-WindowsClient\.pak$", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant); public static async Task PopulateMenu() { diff --git a/FModel/Properties/Resources.Designer.cs b/FModel/Properties/Resources.Designer.cs index 96458d26..ee929f1a 100644 --- a/FModel/Properties/Resources.Designer.cs +++ b/FModel/Properties/Resources.Designer.cs @@ -960,6 +960,15 @@ public static string Extraction { } } + /// + /// Recherche une chaîne localisée semblable à Fat. + /// + public static string Fat { + get { + return ResourceManager.GetString("Fat", resourceCulture); + } + } + /// /// Recherche une chaîne localisée semblable à FBKP Files (*.fbkp)|*.fbkp|All Files (*.*)|*.*. /// diff --git a/FModel/Properties/Resources.de-DE.resx b/FModel/Properties/Resources.de-DE.resx index 7d8bd18d..35f64d46 100644 --- a/FModel/Properties/Resources.de-DE.resx +++ b/FModel/Properties/Resources.de-DE.resx @@ -821,4 +821,10 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake Diese Version überspringen + + Zeige Statistiken + + + Fett + \ No newline at end of file diff --git a/FModel/Properties/Resources.es.resx b/FModel/Properties/Resources.es.resx index cf5de831..26d38476 100644 --- a/FModel/Properties/Resources.es.resx +++ b/FModel/Properties/Resources.es.resx @@ -1031,4 +1031,10 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite. Posición / Valor + + Gordo + + + Mostrar estadísticas + \ No newline at end of file diff --git a/FModel/Properties/Resources.fr-FR.resx b/FModel/Properties/Resources.fr-FR.resx index 285f316f..fc3d5956 100644 --- a/FModel/Properties/Resources.fr-FR.resx +++ b/FModel/Properties/Resources.fr-FR.resx @@ -831,4 +831,7 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite. Afficher les statistiques + + Gros + \ No newline at end of file diff --git a/FModel/Properties/Resources.it-IT.resx b/FModel/Properties/Resources.it-IT.resx index 47c2f4a2..92c91b37 100644 --- a/FModel/Properties/Resources.it-IT.resx +++ b/FModel/Properties/Resources.it-IT.resx @@ -787,4 +787,10 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia Magari più avanti + + Mostra statistiche + + + Grosso + \ No newline at end of file diff --git a/FModel/Properties/Resources.resx b/FModel/Properties/Resources.resx index d4325fd1..14102f0a 100644 --- a/FModel/Properties/Resources.resx +++ b/FModel/Properties/Resources.resx @@ -1085,4 +1085,7 @@ It's now the most used free software to leak on Fortnite. Show statistics + + Fat + \ No newline at end of file diff --git a/FModel/Properties/Resources.ru-RU.resx b/FModel/Properties/Resources.ru-RU.resx index 05a6bb51..6c84bde5 100644 --- a/FModel/Properties/Resources.ru-RU.resx +++ b/FModel/Properties/Resources.ru-RU.resx @@ -780,4 +780,10 @@ Пропустить эту версию + + Посмотреть Статистику + + + Жирный + \ No newline at end of file diff --git a/FModel/Properties/Resources.zh-CN.resx b/FModel/Properties/Resources.zh-CN.resx index c1288d48..94d4ed70 100644 --- a/FModel/Properties/Resources.zh-CN.resx +++ b/FModel/Properties/Resources.zh-CN.resx @@ -790,4 +790,10 @@ 跳过此版本 + + 显示统计数据 + + + + \ No newline at end of file