mirror of
https://github.com/4sval/FModel.git
synced 2026-03-29 05:05:33 -05:00
added valorant map icon support + no more FName crash + fixed dup keys
This commit is contained in:
parent
5439fb8b13
commit
71b459fb67
|
|
@ -1,6 +1,6 @@
|
|||
using FModel.Discord;
|
||||
using FModel.Logger;
|
||||
using FModel.Logger;
|
||||
using FModel.Utils;
|
||||
using FModel.ViewModels.ComboBox;
|
||||
using FModel.ViewModels.StatusBar;
|
||||
using FModel.Windows.DarkMessageBox;
|
||||
using System;
|
||||
|
|
@ -28,8 +28,7 @@ namespace FModel
|
|||
|
||||
DebugHelper.Init(LogsFilePath); // get old settings too
|
||||
|
||||
if (FModel.Properties.Settings.Default.UseEnglish) // use old settings here
|
||||
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
|
||||
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(ProgramLang.GetProgramLang());
|
||||
|
||||
DebugHelper.WriteLine("{0} {1}", "[FModel]", "––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––");
|
||||
DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Version]", Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using FModel.Creator.Texts;
|
||||
using FModel.Creator.Fortnite;
|
||||
using FModel.Creator.Texts;
|
||||
using SkiaSharp;
|
||||
using System;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using FModel.Creator.Texts;
|
||||
using FModel.Creator.Fortnite;
|
||||
using FModel.Creator.Texts;
|
||||
using SkiaSharp;
|
||||
|
||||
namespace FModel.Creator.Bundles
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using PakReader.Pak;
|
||||
using FModel.Creator.Fortnite;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
using SkiaSharp;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ using PakReader.Parsers.Class;
|
|||
using PakReader.Parsers.PropertyTagData;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace FModel.Creator
|
||||
namespace FModel.Creator.Fortnite
|
||||
{
|
||||
public class BaseBundle
|
||||
{
|
||||
|
|
@ -10,7 +10,7 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.Windows;
|
||||
|
||||
namespace FModel.Creator
|
||||
namespace FModel.Creator.Fortnite
|
||||
{
|
||||
public class BaseIcon
|
||||
{
|
||||
|
|
@ -5,7 +5,7 @@ using SkiaSharp;
|
|||
using System;
|
||||
using System.Windows;
|
||||
|
||||
namespace FModel.Creator
|
||||
namespace FModel.Creator.Fortnite
|
||||
{
|
||||
public class BaseOffer
|
||||
{
|
||||
|
|
@ -5,7 +5,7 @@ using PakReader.Parsers.PropertyTagData;
|
|||
using SkiaSharp;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace FModel.Creator
|
||||
namespace FModel.Creator.Fortnite
|
||||
{
|
||||
public class Options
|
||||
{
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
using FModel.Creator.Bundles;
|
||||
using FModel.Creator.Fortnite;
|
||||
using FModel.Creator.Icons;
|
||||
using FModel.Creator.Rarities;
|
||||
using FModel.Creator.Stats;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using PakReader.Pak;
|
||||
using FModel.Creator.Fortnite;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using FModel.Creator.Fortnite;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using PakReader.Pak;
|
||||
using FModel.Creator.Fortnite;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.Objects;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
|
|
|
|||
36
FModel/Creator/Labels/ExplicitAsset.cs
Normal file
36
FModel/Creator/Labels/ExplicitAsset.cs
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
using FModel.Creator.Valorant;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
|
||||
namespace FModel.Creator.Labels
|
||||
{
|
||||
static class ExplicitAsset
|
||||
{
|
||||
public static void GetAsset(BaseLabel icon, SoftObjectProperty s)
|
||||
{
|
||||
PakPackage p = Utils.GetPropertyPakPackage(s.Value.AssetPathName.String);
|
||||
if (p.HasExport() && !p.Equals(default))
|
||||
{
|
||||
var obj = p.GetIndexedExport<UObject>(0);
|
||||
if (obj != null)
|
||||
{
|
||||
if (obj.TryGetValue("UIData", out var t) && t is SoftObjectProperty sop)
|
||||
{
|
||||
p = Utils.GetPropertyPakPackage(sop.Value.AssetPathName.String);
|
||||
if (p.HasExport() && !p.Equals(default))
|
||||
{
|
||||
obj = p.GetIndexedExport<UObject>(0);
|
||||
if (obj != null)
|
||||
{
|
||||
var uiData = new BaseUIData(obj);
|
||||
icon.IconImages.Add(uiData);
|
||||
icon.Height += uiData.IconImage.Height;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
using PakReader.Pak;
|
||||
using FModel.Creator.Fortnite;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.Objects;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using FModel.Creator.Texts;
|
||||
using FModel.Creator.Fortnite;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.Objects;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using FModel.Creator.Texts;
|
||||
using FModel.Creator.Fortnite;
|
||||
using FModel.Creator.Texts;
|
||||
using FModel.Utils;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using FModel.Creator.Icons;
|
||||
using FModel.Creator.Fortnite;
|
||||
using FModel.Creator.Icons;
|
||||
using FModel.Utils;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using SkiaSharp;
|
||||
using FModel.Creator.Fortnite;
|
||||
using SkiaSharp;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using PakReader.Pak;
|
||||
using FModel.Creator.Fortnite;
|
||||
using PakReader.Pak;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.Objects;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
|
|
|
|||
|
|
@ -37,9 +37,10 @@ namespace FModel.Creator.Texts
|
|||
private const string _BURBANK_SMALL_BLACK = "burbanksmall-black";
|
||||
private const string _BURBANK_SMALL_BOLD = "burbanksmall-bold";
|
||||
|
||||
private const string _VALORANT_BASE_PATH = "/Game/UI/Fonts/FinalFonts/";
|
||||
private const string _DINNEXT_W1G_BOLD = "DINNextW1G-Bold";
|
||||
private const string _DINNEXT_W1G_REGULAR = "DINNextW1G-Regular";
|
||||
private const string _VALORANT_BASE_PATH = "/Game/";
|
||||
private const string _TUNGSTEN_BOLD = "Tungsten-Bold";
|
||||
private const string _DINNEXT_W1G_LIGHT = "UI/Fonts/FinalFonts/DINNextW1G-Light";
|
||||
private const string _DINNEXT_W1G_BOLD = "UI/Fonts/FinalFonts/DINNextW1G-Bold";
|
||||
#pragma warning restore IDE0051
|
||||
|
||||
public SKTypeface DefaultTypeface; // used as default font for all untranslated strings (item source, ...)
|
||||
|
|
@ -105,11 +106,15 @@ namespace FModel.Creator.Texts
|
|||
}
|
||||
else if (Globals.Game.ActualGame == EGame.Valorant)
|
||||
{
|
||||
ArraySegment<byte>[] t = Utils.GetPropertyArraySegmentByte(_VALORANT_BASE_PATH + _DINNEXT_W1G_BOLD);
|
||||
ArraySegment<byte>[] t = Utils.GetPropertyArraySegmentByte(_VALORANT_BASE_PATH + _TUNGSTEN_BOLD);
|
||||
if (t != null && t.Length == 3)
|
||||
DisplayNameTypeface = SKTypeface.FromStream(t[2].AsStream());
|
||||
|
||||
t = Utils.GetPropertyArraySegmentByte(_VALORANT_BASE_PATH + _DINNEXT_W1G_REGULAR);
|
||||
t = Utils.GetPropertyArraySegmentByte(_VALORANT_BASE_PATH + _DINNEXT_W1G_BOLD);
|
||||
if (t != null && t.Length == 3)
|
||||
BundleDefaultTypeface = SKTypeface.FromStream(t[2].AsStream());
|
||||
|
||||
t = Utils.GetPropertyArraySegmentByte(_VALORANT_BASE_PATH + _DINNEXT_W1G_LIGHT);
|
||||
if (t != null && t.Length == 3)
|
||||
DescriptionTypeface = SKTypeface.FromStream(t[2].AsStream());
|
||||
}
|
||||
|
|
|
|||
48
FModel/Creator/Valorant/BaseLabel.cs
Normal file
48
FModel/Creator/Valorant/BaseLabel.cs
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
using FModel.Creator.Labels;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
using SkiaSharp;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace FModel.Creator.Valorant
|
||||
{
|
||||
public class BaseLabel
|
||||
{
|
||||
public List<BaseUIData> IconImages;
|
||||
public int Width = 512; // keep it 512 (or a multiple of 512) if you don't want blurry icons
|
||||
public int Height = 512;
|
||||
public int Margin = 4;
|
||||
|
||||
public BaseLabel()
|
||||
{
|
||||
IconImages = new List<BaseUIData>();
|
||||
}
|
||||
|
||||
public BaseLabel(IUExport export) : this()
|
||||
{
|
||||
if (export.GetExport<ArrayProperty>("ExplicitAssets") is ArrayProperty explicitAssetsArray)
|
||||
{
|
||||
foreach (var o in explicitAssetsArray.Value)
|
||||
{
|
||||
if (o is SoftObjectProperty s)
|
||||
ExplicitAsset.GetAsset(this, s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Draw(SKCanvas c)
|
||||
{
|
||||
int yPos = Margin;
|
||||
foreach (BaseUIData icon in IconImages)
|
||||
{
|
||||
if (icon.IconImage != null)
|
||||
{
|
||||
c.DrawBitmap(icon.IconImage, new SKRect(0, yPos, icon.Width, yPos + icon.Height),
|
||||
new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true });
|
||||
|
||||
yPos += icon.Height;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
96
FModel/Creator/Valorant/BaseMapUIData.cs
Normal file
96
FModel/Creator/Valorant/BaseMapUIData.cs
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
using FModel.Creator.Texts;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
using SkiaSharp;
|
||||
|
||||
namespace FModel.Creator.Valorant
|
||||
{
|
||||
public class BaseMapUIData
|
||||
{
|
||||
public SKBitmap Splash;
|
||||
public SKBitmap VLogo;
|
||||
public string DisplayName;
|
||||
public string Description;
|
||||
public string Coordinates;
|
||||
public int Width = 1920;
|
||||
public int Height = 1080;
|
||||
|
||||
public BaseMapUIData()
|
||||
{
|
||||
Splash = null;
|
||||
VLogo = null;
|
||||
DisplayName = "";
|
||||
Description = "";
|
||||
Coordinates = "";
|
||||
}
|
||||
|
||||
public BaseMapUIData(IUExport export) : this()
|
||||
{
|
||||
if (export.GetExport<TextProperty>("DisplayName") is TextProperty displayName)
|
||||
DisplayName = Text.GetTextPropertyBase(displayName) ?? "";
|
||||
if (export.GetExport<TextProperty>("Description") is TextProperty description)
|
||||
Description = Text.GetTextPropertyBase(description) ?? "";
|
||||
if (export.GetExport<TextProperty>("Coordinates") is TextProperty coordinates)
|
||||
Coordinates = Text.GetTextPropertyBase(coordinates) ?? "";
|
||||
|
||||
if (export.GetExport<ObjectProperty>("Splash") is ObjectProperty icon)
|
||||
Splash = Utils.GetObjectTexture(icon);
|
||||
|
||||
VLogo = Utils.GetTexture("/Game/UI/Shared/Icons/Valorant_logo_cutout").Resize(48, 48);
|
||||
|
||||
if (Splash != null)
|
||||
{
|
||||
Width = Splash.Width;
|
||||
Height = Splash.Height;
|
||||
}
|
||||
}
|
||||
|
||||
public void Draw(SKCanvas c)
|
||||
{
|
||||
int paddingLR = 80;
|
||||
int paddingTB = 35;
|
||||
int nameSize = 200;
|
||||
int descriptionSize = 30;
|
||||
using var namePaint = new SKPaint
|
||||
{
|
||||
IsAntialias = true,
|
||||
FilterQuality = SKFilterQuality.High,
|
||||
Typeface = Text.TypeFaces.DisplayNameTypeface,
|
||||
TextSize = nameSize,
|
||||
TextAlign = SKTextAlign.Left,
|
||||
Color = SKColor.Parse("FFFBFA")
|
||||
};
|
||||
while (namePaint.MeasureText(DisplayName) > Width - (paddingLR * 2))
|
||||
{
|
||||
namePaint.TextSize = nameSize -= 2;
|
||||
}
|
||||
using var descriptionPaint = new SKPaint
|
||||
{
|
||||
IsAntialias = true,
|
||||
FilterQuality = SKFilterQuality.High,
|
||||
Typeface = Text.TypeFaces.DescriptionTypeface,
|
||||
TextSize = descriptionSize,
|
||||
TextAlign = SKTextAlign.Left,
|
||||
Color = SKColor.Parse("FFFBFA")
|
||||
};
|
||||
while (descriptionPaint.MeasureText(Description) > Width - (paddingLR * 2))
|
||||
{
|
||||
descriptionPaint.TextSize = descriptionSize -= 2;
|
||||
}
|
||||
|
||||
c.DrawBitmap(Splash, new SKRect(0, 0, Width, Height), new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true });
|
||||
c.DrawText(DisplayName.ToUpper(), paddingLR, paddingTB + namePaint.TextSize, namePaint);
|
||||
c.DrawRect(new SKRect(paddingLR + 2.5f, paddingTB + 25 + namePaint.TextSize, paddingLR + 202.5f, paddingTB + 27.5f + namePaint.TextSize), new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true, Color = SKColor.Parse("5AFFFBFA") });
|
||||
c.DrawText(Description, paddingLR + 2.5f, paddingTB + 40 + namePaint.TextSize + descriptionPaint.TextSize, descriptionPaint);
|
||||
|
||||
descriptionPaint.Typeface = Text.TypeFaces.BundleDefaultTypeface;
|
||||
c.DrawText(Coordinates.ToUpper(), paddingLR, Height - paddingTB - descriptionPaint.TextSize, descriptionPaint);
|
||||
|
||||
if (VLogo != null)
|
||||
{
|
||||
c.DrawBitmap(VLogo, new SKRect(Width - VLogo.Width - paddingLR, paddingLR, Width - paddingLR, paddingLR + VLogo.Height), new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true });
|
||||
c.DrawRect(new SKRect(Width - VLogo.Width - paddingLR, paddingLR + VLogo.Height + 5, Width - paddingLR, paddingLR + VLogo.Height + 7.5f), new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true, Color = SKColor.Parse("FFFBFA") });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@ using PakReader.Parsers.Class;
|
|||
using PakReader.Parsers.PropertyTagData;
|
||||
using SkiaSharp;
|
||||
|
||||
namespace FModel.Creator
|
||||
namespace FModel.Creator.Valorant
|
||||
{
|
||||
public class BaseUIData
|
||||
{
|
||||
|
|
@ -37,6 +37,7 @@ namespace FModel.Creator
|
|||
if (export.GetExport<TextProperty>("Description") is TextProperty description)
|
||||
{
|
||||
Description = Text.GetTextPropertyBase(description);
|
||||
if (Description != null && Description.Equals(DisplayName)) Description = string.Empty;
|
||||
if (!string.IsNullOrEmpty(Description))
|
||||
{
|
||||
Height += (int)descriptionPaint.TextSize * Helper.SplitLines(Description, descriptionPaint, Width - Margin).Length;
|
||||
|
|
@ -44,7 +45,7 @@ namespace FModel.Creator
|
|||
}
|
||||
}
|
||||
|
||||
if (export.GetExport<ObjectProperty>("FullRender", "VerticalPromoImage", "LargeIcon", "DisplayIcon") is ObjectProperty icon)
|
||||
if (export.GetExport<ObjectProperty>("ListViewIcon", "FullRender", "VerticalPromoImage", "LargeIcon", "DisplayIcon") is ObjectProperty icon)
|
||||
{
|
||||
SKBitmap raw = Utils.GetObjectTexture(icon);
|
||||
if (raw != null)
|
||||
|
|
@ -83,8 +84,9 @@ namespace FModel.Creator
|
|||
Helper.DrawMultilineText(c, Description, Width, Margin, ETextSide.Left,
|
||||
new SKRect(Margin, textSize + 25, Width - Margin, Height - 25), descriptionPaint, out var yPos);
|
||||
|
||||
c.DrawBitmap(IconImage, new SKRect(0, yPos, Width, Height),
|
||||
new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true });
|
||||
if (IconImage != null)
|
||||
c.DrawBitmap(IconImage, new SKRect(0, yPos, Width, Height),
|
||||
new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
using FModel.Creator.Icons;
|
||||
using FModel.Creator.Texts;
|
||||
using FModel.Creator.Valorant;
|
||||
using FModel.ViewModels.ImageBox;
|
||||
using PakReader.Parsers.Class;
|
||||
using SkiaSharp;
|
||||
|
|
@ -9,27 +10,65 @@ namespace FModel.Creator
|
|||
{
|
||||
static class ValorantCreator
|
||||
{
|
||||
public static bool TryDrawValorantIcon(string assetPath, IUExport export)
|
||||
public static bool TryDrawValorantIcon(string assetPath, string exportType, IUExport export)
|
||||
{
|
||||
var d = new DirectoryInfo(assetPath);
|
||||
string assetName = d.Name;
|
||||
if (Text.TypeFaces.NeedReload(false))
|
||||
Text.TypeFaces = new Typefaces(); // when opening bundle creator settings without loading paks first
|
||||
Text.TypeFaces = new Typefaces();
|
||||
|
||||
BaseUIData icon = new BaseUIData(export);
|
||||
if (icon.IconImage != null)
|
||||
switch (exportType)
|
||||
{
|
||||
using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul))
|
||||
using (var c = new SKCanvas(ret))
|
||||
{
|
||||
icon.Draw(c);
|
||||
case "MapUIData":
|
||||
{
|
||||
BaseMapUIData icon = new BaseMapUIData(export);
|
||||
using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul))
|
||||
using (var c = new SKCanvas(ret))
|
||||
{
|
||||
icon.Draw(c);
|
||||
ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
case "ArmorUIData":
|
||||
case "SprayUIData":
|
||||
case "ThemeUIData":
|
||||
case "SeasonUIData":
|
||||
case "MissionUIData":
|
||||
case "ContractUIData":
|
||||
case "CurrencyUIData":
|
||||
case "GameModeUIData":
|
||||
case "ObjectiveUIData":
|
||||
case "CharacterUIData":
|
||||
case "SprayLevelUIData":
|
||||
case "EquippableUIData":
|
||||
case "PlayerCardUIData":
|
||||
case "ContentTierUIData":
|
||||
case "PlayerTitleUIData":
|
||||
case "Gun_UIData_Base_C":
|
||||
case "CharacterRoleUIData":
|
||||
case "StorefrontItemUIData":
|
||||
case "SprayEquipSlotUIData":
|
||||
case "EquippableSkinUIData":
|
||||
case "ContractChapterUIData":
|
||||
case "EquippableCharmUIData":
|
||||
case "EquippableSkinLevelUIData":
|
||||
case "EquippableSkinChromaUIData":
|
||||
case "EquippableAttachmentUIData":
|
||||
case "EquippableCharmLevelUIData":
|
||||
{
|
||||
BaseUIData icon = new BaseUIData(export);
|
||||
using (var ret = new SKBitmap(icon.Width, icon.Height, SKColorType.Rgba8888, SKAlphaType.Premul))
|
||||
using (var c = new SKCanvas(ret))
|
||||
{
|
||||
icon.Draw(c);
|
||||
|
||||
Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
|
||||
ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
|
||||
}
|
||||
return true;
|
||||
Watermark.DrawWatermark(c); // watermark should only be applied on icons with width = 512
|
||||
ImageBoxVm.imageBoxViewModel.Set(ret, assetName);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
using PakReader.Parsers;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.Objects;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
|
||||
namespace PakReader.Pak
|
||||
{
|
||||
|
|
@ -29,7 +27,7 @@ namespace PakReader.Pak
|
|||
ExportType = ExportTypes[i].String,
|
||||
ExportValue = (FModel.EJsonType)FModel.Properties.Settings.Default.AssetsJsonType switch
|
||||
{
|
||||
FModel.EJsonType.Default => GetJsonDict(Exports[i]),
|
||||
FModel.EJsonType.Default => Exports[i].GetJsonDict(),
|
||||
_ => Exports[i]
|
||||
}
|
||||
};
|
||||
|
|
@ -91,49 +89,6 @@ namespace PakReader.Pak
|
|||
exports = new ExportList();
|
||||
}
|
||||
|
||||
private Dictionary<string, object> GetJsonDict(IUExport export)
|
||||
{
|
||||
if (export != null)
|
||||
{
|
||||
var ret = new Dictionary<string, object>(export.Count);
|
||||
foreach (KeyValuePair<string, object> KvP in export)
|
||||
{
|
||||
if (KvP.Value == null)
|
||||
ret[KvP.Key] = null;
|
||||
else
|
||||
ret[KvP.Key] = KvP.Value.GetType().Name switch
|
||||
{
|
||||
"ByteProperty" => ((ByteProperty)KvP.Value).GetValue(),
|
||||
"BoolProperty" => ((BoolProperty)KvP.Value).GetValue(),
|
||||
"IntProperty" => ((IntProperty)KvP.Value).GetValue(),
|
||||
"FloatProperty" => ((FloatProperty)KvP.Value).GetValue(),
|
||||
"ObjectProperty" => ((ObjectProperty)KvP.Value).GetValue(),
|
||||
"NameProperty" => ((NameProperty)KvP.Value).GetValue(),
|
||||
"DoubleProperty" => ((DoubleProperty)KvP.Value).GetValue(),
|
||||
"ArrayProperty" => ((ArrayProperty)KvP.Value).GetValue(),
|
||||
"StructProperty" => ((StructProperty)KvP.Value).GetValue(),
|
||||
"StrProperty" => ((StrProperty)KvP.Value).GetValue(),
|
||||
"TextProperty" => ((TextProperty)KvP.Value).GetValue(),
|
||||
"InterfaceProperty" => ((InterfaceProperty)KvP.Value).GetValue(),
|
||||
"SoftObjectProperty" => ((SoftObjectProperty)KvP.Value).GetValue(),
|
||||
"UInt64Property" => ((UInt64Property)KvP.Value).GetValue(),
|
||||
"UInt32Property" => ((UInt32Property)KvP.Value).GetValue(),
|
||||
"UInt16Property" => ((UInt16Property)KvP.Value).GetValue(),
|
||||
"Int64Property" => ((Int64Property)KvP.Value).GetValue(),
|
||||
"Int16Property" => ((Int16Property)KvP.Value).GetValue(),
|
||||
"Int8Property" => ((Int8Property)KvP.Value).GetValue(),
|
||||
"MapProperty" => ((MapProperty)KvP.Value).GetValue(),
|
||||
"SetProperty" => ((SetProperty)KvP.Value).GetValue(),
|
||||
"EnumProperty" => ((EnumProperty)KvP.Value).GetValue(),
|
||||
"UObject" => ((UObject)KvP.Value).GetValue(),
|
||||
_ => KvP.Value,
|
||||
};
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public T GetExport<T>() where T : IUExport
|
||||
{
|
||||
var exports = Exports;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System.Collections.Generic;
|
||||
using PakReader.Parsers.PropertyTagData;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Class
|
||||
{
|
||||
|
|
@ -22,5 +23,46 @@ namespace PakReader.Parsers.Class
|
|||
}
|
||||
return default;
|
||||
}
|
||||
|
||||
public static Dictionary<string, object> GetJsonDict(this IUExport export)
|
||||
{
|
||||
if (export != null)
|
||||
{
|
||||
var ret = new Dictionary<string, object>(export.Count);
|
||||
foreach (var (key, value) in export)
|
||||
{
|
||||
ret[key] = value switch
|
||||
{
|
||||
ByteProperty byteProperty => byteProperty.GetValue(),
|
||||
BoolProperty boolProperty => boolProperty.GetValue(),
|
||||
IntProperty intProperty => intProperty.GetValue(),
|
||||
FloatProperty floatProperty => floatProperty.GetValue(),
|
||||
ObjectProperty objectProperty => objectProperty.GetValue(),
|
||||
NameProperty nameProperty => nameProperty.GetValue(),
|
||||
DelegateProperty delegateProperty => delegateProperty.GetValue(),
|
||||
DoubleProperty doubleProperty => doubleProperty.GetValue(),
|
||||
ArrayProperty arrayProperty => arrayProperty.GetValue(),
|
||||
StructProperty structProperty => structProperty.GetValue(),
|
||||
StrProperty strProperty => strProperty.GetValue(),
|
||||
TextProperty textProperty => textProperty.GetValue(),
|
||||
InterfaceProperty interfaceProperty => interfaceProperty.GetValue(),
|
||||
SoftObjectProperty softObjectProperty => softObjectProperty.GetValue(),
|
||||
UInt64Property uInt64Property => uInt64Property.GetValue(),
|
||||
UInt32Property uInt32Property => uInt32Property.GetValue(),
|
||||
UInt16Property uInt16Property => uInt16Property.GetValue(),
|
||||
Int64Property int64Property => int64Property.GetValue(),
|
||||
Int16Property int16Property => int16Property.GetValue(),
|
||||
Int8Property int8Property => int8Property.GetValue(),
|
||||
MapProperty mapProperty => mapProperty.GetValue(),
|
||||
SetProperty setProperty => setProperty.GetValue(),
|
||||
EnumProperty enumProperty => enumProperty.GetValue(),
|
||||
UObject uObject => uObject.GetJsonDict(),
|
||||
_ => value,
|
||||
};
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,15 @@ namespace PakReader.Parsers.Class
|
|||
RowMap = new Dictionary<string, object>();
|
||||
for (int i = 0; i < NumRows; i++)
|
||||
{
|
||||
var RowName = reader.ReadFName();
|
||||
RowMap[RowName.String] = new UObject(reader, true);
|
||||
int num = 1;
|
||||
string RowName = reader.ReadFName().String;
|
||||
string baseName = RowName;
|
||||
while (RowMap.ContainsKey(RowName))
|
||||
{
|
||||
RowName = $"{baseName}_NK{num++:00}";
|
||||
}
|
||||
|
||||
RowMap[RowName] = new UObject(reader, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,15 @@ namespace PakReader.Parsers.Class
|
|||
RowMap = new Dictionary<string, object>();
|
||||
for (int i = 0; i < NumRows; i++)
|
||||
{
|
||||
var RowName = reader.ReadFName();
|
||||
RowMap[RowName.String] = new UObject(reader, true);
|
||||
int num = 1;
|
||||
string RowName = reader.ReadFName().String;
|
||||
string baseName = RowName;
|
||||
while (RowMap.ContainsKey(RowName))
|
||||
{
|
||||
RowName = $"{baseName}_NK{num++:00}";
|
||||
}
|
||||
|
||||
RowMap[RowName] = new UObject(reader, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
@ -21,18 +21,18 @@ namespace PakReader.Parsers.Class
|
|||
internal UObject(PackageReader reader, long maxSize, bool structFallback)
|
||||
{
|
||||
var properties = new Dictionary<string, object>();
|
||||
int i = 1;
|
||||
int num = 1;
|
||||
|
||||
while (true)
|
||||
{
|
||||
var Tag = new FPropertyTag(reader);
|
||||
if (Tag.Name.IsNone)
|
||||
if (Tag.Name.IsNone || Tag.Name.String == null)
|
||||
break;
|
||||
|
||||
var pos = reader.Position;
|
||||
var obj = BaseProperty.ReadAsObject(reader, Tag, Tag.Type, ReadType.NORMAL) ?? null;
|
||||
|
||||
var key = properties.ContainsKey(Tag.Name.String) ? $"{Tag.Name.String}_NK{i++}" : Tag.Name.String;
|
||||
var key = properties.ContainsKey(Tag.Name.String) ? $"{Tag.Name.String}_NK{num++:00}" : Tag.Name.String;
|
||||
properties[key] = obj;
|
||||
if (obj == null) break;
|
||||
|
||||
|
|
@ -52,43 +52,6 @@ namespace PakReader.Parsers.Class
|
|||
}
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetValue()
|
||||
{
|
||||
var ret = new Dictionary<string, object>(Dict.Count);
|
||||
foreach (KeyValuePair<string, object> KvP in Dict)
|
||||
{
|
||||
if (KvP.Value == null)
|
||||
ret[KvP.Key] = null;
|
||||
else
|
||||
ret[KvP.Key] = KvP.Value.GetType().Name switch
|
||||
{
|
||||
"ByteProperty" => ((ByteProperty)KvP.Value).GetValue(),
|
||||
"BoolProperty" => ((BoolProperty)KvP.Value).GetValue(),
|
||||
"IntProperty" => ((IntProperty)KvP.Value).GetValue(),
|
||||
"FloatProperty" => ((FloatProperty)KvP.Value).GetValue(),
|
||||
"ObjectProperty" => ((ObjectProperty)KvP.Value).GetValue(),
|
||||
"NameProperty" => ((NameProperty)KvP.Value).GetValue(),
|
||||
"DoubleProperty" => ((DoubleProperty)KvP.Value).GetValue(),
|
||||
"ArrayProperty" => ((ArrayProperty)KvP.Value).GetValue(),
|
||||
"StructProperty" => ((StructProperty)KvP.Value).GetValue(),
|
||||
"StrProperty" => ((StrProperty)KvP.Value).GetValue(),
|
||||
"TextProperty" => ((TextProperty)KvP.Value).GetValue(),
|
||||
"InterfaceProperty" => ((InterfaceProperty)KvP.Value).GetValue(),
|
||||
"SoftObjectProperty" => ((SoftObjectProperty)KvP.Value).GetValue(),
|
||||
"UInt64Property" => ((UInt64Property)KvP.Value).GetValue(),
|
||||
"UInt32Property" => ((UInt32Property)KvP.Value).GetValue(),
|
||||
"UInt16Property" => ((UInt16Property)KvP.Value).GetValue(),
|
||||
"Int64Property" => ((Int64Property)KvP.Value).GetValue(),
|
||||
"Int16Property" => ((Int16Property)KvP.Value).GetValue(),
|
||||
"Int8Property" => ((Int8Property)KvP.Value).GetValue(),
|
||||
"MapProperty" => ((MapProperty)KvP.Value).GetValue(),
|
||||
"SetProperty" => ((SetProperty)KvP.Value).GetValue(),
|
||||
"EnumProperty" => ((EnumProperty)KvP.Value).GetValue(),
|
||||
_ => KvP.Value,
|
||||
};
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
public object this[string key] => Dict[key];
|
||||
public IEnumerable<string> Keys => Dict.Keys;
|
||||
public IEnumerable<object> Values => Dict.Values;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
namespace PakReader.Parsers.Objects
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
public readonly struct FAssetData : IUStruct
|
||||
{
|
||||
|
|
@ -32,5 +34,20 @@
|
|||
ChunkIDs = reader.Loader.ReadTArray(() => reader.Loader.ReadInt32());
|
||||
PackageFlags = reader.Loader.ReadInt32();
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetValue()
|
||||
{
|
||||
return new Dictionary<string, object>
|
||||
{
|
||||
["ObjectPath"] = ObjectPath.String,
|
||||
["PackageName"] = PackageName.String,
|
||||
["PackagePath"] = PackagePath.String,
|
||||
["AssetName"] = AssetName.String,
|
||||
["AssetClass"] = AssetClass.String,
|
||||
["TagsAndValues"] = TagsAndValues.Map,
|
||||
["ChunkIDs"] = ChunkIDs,
|
||||
["PackageFlags"] = PackageFlags
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
namespace PakReader.Parsers.Objects
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
public readonly struct FAssetIdentifier : IUStruct
|
||||
{
|
||||
|
|
@ -36,5 +38,16 @@
|
|||
ValueName = reader.ReadFName();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<string, string> GetValue()
|
||||
{
|
||||
return new Dictionary<string, string>
|
||||
{
|
||||
["PackageName"] = PackageName.String,
|
||||
["PrimaryAssetType"] = PrimaryAssetType.String,
|
||||
["ObjectName"] = ObjectName.String,
|
||||
["ValueName"] = ValueName.String
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
namespace PakReader.Parsers.Objects
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
public readonly struct FAssetPackageData : IUStruct
|
||||
{
|
||||
|
|
@ -20,5 +22,16 @@
|
|||
else
|
||||
CookedHash = default;
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetValue()
|
||||
{
|
||||
return new Dictionary<string, object>
|
||||
{
|
||||
["PackageName"] = PackageName.String,
|
||||
["DiskSize"] = DiskSize,
|
||||
["PackageGuid"] = PackageGuid.Hex,
|
||||
["CookedHash"] = CookedHash
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
|
|
@ -20,5 +21,18 @@ namespace PakReader.Parsers.Objects
|
|||
_ => throw new NotImplementedException(string.Format(FModel.Properties.Resources.ParsingNotSupported, Type)),
|
||||
};
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetValue()
|
||||
{
|
||||
return new Dictionary<string, object>
|
||||
{
|
||||
["Type"] = Type,
|
||||
["Value"] = Value switch
|
||||
{
|
||||
FText fText => fText.GetValue(),
|
||||
_ => Value,
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,16 @@ namespace PakReader.Parsers.Objects
|
|||
{
|
||||
GameplayTags = reader.ReadTArray(() => reader.ReadFName());
|
||||
}
|
||||
|
||||
public string[] GetValue()
|
||||
{
|
||||
var ret = new string[GameplayTags.Length];
|
||||
for (int i = 0; i < ret.Length; i++)
|
||||
{
|
||||
ret[i] = GameplayTags[i].String;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
public static class FGameplayTagContainerExtension
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ namespace PakReader.Parsers.Objects
|
|||
*/
|
||||
public readonly struct FPackageIndex
|
||||
{
|
||||
[JsonIgnore]
|
||||
public readonly int Index;
|
||||
public FObjectResource Resource
|
||||
{
|
||||
|
|
@ -42,14 +41,13 @@ namespace PakReader.Parsers.Objects
|
|||
{
|
||||
if (Resource != null)
|
||||
{
|
||||
var ret = new Dictionary<string, object>
|
||||
return new Dictionary<string, object>
|
||||
{
|
||||
["ObjectName"] = Resource.ObjectName.String,
|
||||
["OuterIndex"] = Resource.OuterIndex.GetValue()
|
||||
};
|
||||
return ret;
|
||||
}
|
||||
return null;
|
||||
return Index;
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
namespace PakReader.Parsers.Objects
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
public readonly struct FSoftObjectPath : IUStruct
|
||||
{
|
||||
|
|
@ -12,5 +14,14 @@
|
|||
AssetPathName = reader.ReadFName();
|
||||
SubPathString = reader.ReadFString();
|
||||
}
|
||||
|
||||
public Dictionary<string, string> GetValue()
|
||||
{
|
||||
return new Dictionary<string, string>
|
||||
{
|
||||
["AssetPathName"] = AssetPathName.String,
|
||||
["SubPathString"] = SubPathString
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,5 +56,18 @@ namespace PakReader.Parsers.Objects
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public object GetValue()
|
||||
{
|
||||
return Text switch
|
||||
{
|
||||
FTextHistory.DateTime dateTime => dateTime.GetValue(),
|
||||
FTextHistory.OrderedFormat orderedFormat => orderedFormat.GetValue(),
|
||||
FTextHistory.FormatNumber formatNumber => formatNumber.GetValue(),
|
||||
FTextHistory.StringTableEntry stringTableEntry => stringTableEntry.GetValue(),
|
||||
FTextHistory.None none => none.CultureInvariantString,
|
||||
_ => Text
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ namespace PakReader.Parsers.Objects
|
|||
internal Base(PackageReader reader)
|
||||
{
|
||||
Namespace = reader.ReadFString() ?? string.Empty; // namespaces are sometimes null
|
||||
Key = reader.ReadFString();
|
||||
Key = reader.ReadFString() ?? string.Empty;
|
||||
SourceString = Localizations.GetLocalization(Namespace, Key, reader.ReadFString());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
namespace PakReader.Parsers.Objects
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
public partial class FTextHistory
|
||||
{
|
||||
|
|
@ -20,6 +22,18 @@
|
|||
TimeZone = reader.ReadFString();
|
||||
TargetCulture = reader.ReadFString();
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetValue()
|
||||
{
|
||||
return new Dictionary<string, object>
|
||||
{
|
||||
["SourceDateTime"] = SourceDateTime.Ticks,
|
||||
["DateStyle"] = DateStyle,
|
||||
["TimeStyle"] = TimeStyle,
|
||||
["TimeZone"] = TimeZone,
|
||||
["TargetCulture"] = TargetCulture,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
namespace PakReader.Parsers.Objects
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
public partial class FTextHistory
|
||||
{
|
||||
|
|
@ -16,6 +18,16 @@
|
|||
TimeZone = reader.ReadFString();
|
||||
TargetCulture = reader.ReadFString();
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetValue()
|
||||
{
|
||||
return new Dictionary<string, object>
|
||||
{
|
||||
["SourceValue"] = SourceValue.GetValue(),
|
||||
["TimeZone"] = TimeZone,
|
||||
["TargetCulture"] = TargetCulture
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
namespace PakReader.Parsers.Objects
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
public partial class FTextHistory
|
||||
{
|
||||
|
|
@ -18,6 +20,21 @@
|
|||
Arguments[i] = new FFormatArgumentValue(reader);
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetValue()
|
||||
{
|
||||
var array = new Dictionary<string, object>[Arguments.Length];
|
||||
for (int i = 0; i < array.Length; i++)
|
||||
{
|
||||
array[i] = Arguments[i].GetValue();
|
||||
}
|
||||
|
||||
return new Dictionary<string, object>
|
||||
{
|
||||
["SourceFmt"] = SourceFmt.GetValue(),
|
||||
["Arguments"] = array,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
namespace PakReader.Parsers.Objects
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.Objects
|
||||
{
|
||||
public partial class FTextHistory
|
||||
{
|
||||
|
|
@ -14,6 +16,15 @@
|
|||
TableId = reader.ReadFName();
|
||||
Key = reader.ReadFString();
|
||||
}
|
||||
|
||||
public Dictionary<string, string> GetValue()
|
||||
{
|
||||
return new Dictionary<string, string>
|
||||
{
|
||||
["TableId"] = TableId.String,
|
||||
["Key"] = Key
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@ namespace PakReader.Parsers.Objects
|
|||
internal UScriptStruct(PackageReader reader, FName structName) : this(reader, structName.String) { }
|
||||
internal UScriptStruct(PackageReader reader, string structName)
|
||||
{
|
||||
#if DEBUG
|
||||
//System.Diagnostics.Debug.WriteLine(structName);
|
||||
#endif
|
||||
Struct = structName switch
|
||||
{
|
||||
"LevelSequenceObjectReferenceMap" => new FLevelSequenceObjectReferenceMap(reader),
|
||||
|
|
@ -49,7 +51,6 @@ namespace PakReader.Parsers.Objects
|
|||
"MovieSceneFloatChannel" => new FMovieSceneFloatChannel(reader),
|
||||
"MovieSceneEvaluationTemplate" => new FMovieSceneEvaluationTemplate(reader),
|
||||
"SkeletalMeshSamplingLODBuiltData" => new FSkeletalMeshSamplingLODBuiltData(reader),
|
||||
//"BodyInstance" => new FBodyInstance(reader), // if uncommented, can't parse .umap
|
||||
"VectorMaterialInput" => new FVectorMaterialInput(reader),
|
||||
"ColorMaterialInput" => new FColorMaterialInput(reader),
|
||||
"ExpressionInput" => new FMaterialInput(reader),
|
||||
|
|
|
|||
|
|
@ -35,36 +35,39 @@ namespace PakReader.Parsers
|
|||
Loader = uexp;
|
||||
for(int i = 0; i < ExportMap.Length; i++)
|
||||
{
|
||||
FName ObjectClassName;
|
||||
if (ExportMap[i].ClassIndex.IsNull)
|
||||
ObjectClassName = DataExportTypes[i] = ReadFName(); // check if this is true, I don't know if Fortnite ever uses this
|
||||
else if (ExportMap[i].ClassIndex.IsExport)
|
||||
ObjectClassName = DataExportTypes[i] = ExportMap[ExportMap[i].ClassIndex.AsExport].ObjectName;
|
||||
else if (ExportMap[i].ClassIndex.IsImport)
|
||||
ObjectClassName = DataExportTypes[i] = ImportMap[ExportMap[i].ClassIndex.AsImport].ObjectName;
|
||||
else
|
||||
throw new FileLoadException("Can't get class name"); // Shouldn't reach this unless the laws of math have bent to MagmaReef's will
|
||||
|
||||
if (ObjectClassName.String.Equals("BlueprintGeneratedClass")) continue;
|
||||
|
||||
var pos = Position = ExportMap[i].SerialOffset - PackageFileSummary.TotalHeaderSize;
|
||||
DataExports[i] = ObjectClassName.String switch
|
||||
FObjectExport Export = ExportMap[i];
|
||||
{
|
||||
"Texture2D" => new UTexture2D(this, ubulk, ExportMap.Sum(e => e.SerialSize) + PackageFileSummary.TotalHeaderSize),
|
||||
"CurveTable" => new UCurveTable(this),
|
||||
"DataTable" => new UDataTable(this),
|
||||
"FontFace" => new UFontFace(this, ubulk),
|
||||
"SoundWave" => new USoundWave(this, ubulk, ExportMap.Sum(e => e.SerialSize) + PackageFileSummary.TotalHeaderSize),
|
||||
"StringTable" => new UStringTable(this),
|
||||
_ => new UObject(this),
|
||||
};
|
||||
FName ExportType;
|
||||
if (Export.ClassIndex.IsNull)
|
||||
ExportType = DataExportTypes[i] = ReadFName(); // check if this is true, I don't know if Fortnite ever uses this
|
||||
else if (Export.ClassIndex.IsExport)
|
||||
ExportType = DataExportTypes[i] = ExportMap[Export.ClassIndex.AsExport].SuperIndex.Resource.ObjectName;
|
||||
else if (Export.ClassIndex.IsImport)
|
||||
ExportType = DataExportTypes[i] = ImportMap[Export.ClassIndex.AsImport].ObjectName;
|
||||
else
|
||||
throw new FileLoadException("Can't get class name"); // Shouldn't reach this unless the laws of math have bent to MagmaReef's will
|
||||
|
||||
if (ExportType.String.Equals("BlueprintGeneratedClass")) continue;
|
||||
|
||||
var pos = Position = Export.SerialOffset - PackageFileSummary.TotalHeaderSize;
|
||||
DataExports[i] = ExportType.String switch
|
||||
{
|
||||
"Texture2D" => new UTexture2D(this, ubulk, ExportMap.Sum(e => e.SerialSize) + PackageFileSummary.TotalHeaderSize),
|
||||
"CurveTable" => new UCurveTable(this),
|
||||
"DataTable" => new UDataTable(this),
|
||||
"FontFace" => new UFontFace(this, ubulk),
|
||||
"SoundWave" => new USoundWave(this, ubulk, ExportMap.Sum(e => e.SerialSize) + PackageFileSummary.TotalHeaderSize),
|
||||
"StringTable" => new UStringTable(this),
|
||||
_ => new UObject(this),
|
||||
};
|
||||
|
||||
#if DEBUG
|
||||
if (pos + ExportMap[i].SerialSize != Position)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ExportType={ObjectClassName.String}] Didn't read {ExportMap[i].ObjectName} correctly (at {Position}, should be {pos + ExportMap[i].SerialSize}, {pos + ExportMap[i].SerialSize - Position} behind)");
|
||||
}
|
||||
if (pos + Export.SerialSize != Position)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ExportType={ExportType.String}] Didn't read {Export.ObjectName} correctly (at {Position}, should be {pos + Export.SerialSize}, {pos + Export.SerialSize - Position} behind)");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -129,7 +132,10 @@ namespace PakReader.Parsers
|
|||
{
|
||||
return new FName(NameMap[NameIndex], NameIndex, Number);
|
||||
}
|
||||
throw new FileLoadException($"Bad Name Index: {NameIndex}/{NameMap.Length} - Loader Position: {Loader.BaseStream.Position}");
|
||||
#if DEBUG
|
||||
System.Diagnostics.Debug.WriteLine($"Bad Name Index: {NameIndex}/{NameMap.Length} - Loader Position: {Loader.BaseStream.Position}");
|
||||
#endif
|
||||
return default;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class ArrayProperty : BaseProperty<object[]>
|
||||
public sealed class ArrayProperty : BaseProperty<BaseProperty[]>
|
||||
{
|
||||
internal ArrayProperty(PackageReader reader, FPropertyTag tag)
|
||||
{
|
||||
Position = reader.Position;
|
||||
|
||||
int length = reader.ReadInt32();
|
||||
Value = new object[length];
|
||||
Value = new BaseProperty[length];
|
||||
|
||||
FPropertyTag InnerTag = default;
|
||||
// Execute if UE4 version is at least VER_UE4_INNER_ARRAY_TAG_INFO
|
||||
|
|
@ -20,7 +20,7 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
}
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
Value[i] = BaseProperty.ReadAsObject(reader, InnerTag, tag.InnerType, ReadType.ARRAY);
|
||||
Value[i] = ReadAsObject(reader, InnerTag, tag.InnerType, ReadType.ARRAY);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -29,35 +29,33 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
var ret = new object[Value.Length];
|
||||
for (int i = 0; i < ret.Length; i++)
|
||||
{
|
||||
if (Value[i] == null)
|
||||
ret[i] = null;
|
||||
else
|
||||
ret[i] = ((BaseProperty)Value[i]).GetType().Name switch
|
||||
{
|
||||
"ByteProperty" => ((ByteProperty)Value[i]).GetValue(),
|
||||
"BoolProperty" => ((BoolProperty)Value[i]).GetValue(),
|
||||
"IntProperty" => ((IntProperty)Value[i]).GetValue(),
|
||||
"FloatProperty" => ((FloatProperty)Value[i]).GetValue(),
|
||||
"ObjectProperty" => ((ObjectProperty)Value[i]).GetValue(),
|
||||
"NameProperty" => ((NameProperty)Value[i]).GetValue(),
|
||||
"DoubleProperty" => ((DoubleProperty)Value[i]).GetValue(),
|
||||
"ArrayProperty" => ((ArrayProperty)Value[i]).GetValue(),
|
||||
"StructProperty" => ((StructProperty)Value[i]).GetValue(),
|
||||
"StrProperty" => ((StrProperty)Value[i]).GetValue(),
|
||||
"TextProperty" => ((TextProperty)Value[i]).GetValue(),
|
||||
"InterfaceProperty" => ((InterfaceProperty)Value[i]).GetValue(),
|
||||
"SoftObjectProperty" => ((SoftObjectProperty)Value[i]).GetValue(),
|
||||
"UInt64Property" => ((UInt64Property)Value[i]).GetValue(),
|
||||
"UInt32Property" => ((UInt32Property)Value[i]).GetValue(),
|
||||
"UInt16Property" => ((UInt16Property)Value[i]).GetValue(),
|
||||
"Int64Property" => ((Int64Property)Value[i]).GetValue(),
|
||||
"Int16Property" => ((Int16Property)Value[i]).GetValue(),
|
||||
"Int8Property" => ((Int8Property)Value[i]).GetValue(),
|
||||
"MapProperty" => ((MapProperty)Value[i]).GetValue(),
|
||||
"SetProperty" => ((SetProperty)Value[i]).GetValue(),
|
||||
"EnumProperty" => ((EnumProperty)Value[i]).GetValue(),
|
||||
_ => Value[i],
|
||||
};
|
||||
ret[i] = Value[i] switch
|
||||
{
|
||||
ByteProperty byteProperty => byteProperty.GetValue(),
|
||||
BoolProperty boolProperty => boolProperty.GetValue(),
|
||||
IntProperty intProperty => intProperty.GetValue(),
|
||||
FloatProperty floatProperty => floatProperty.GetValue(),
|
||||
ObjectProperty objectProperty => objectProperty.GetValue(),
|
||||
NameProperty nameProperty => nameProperty.GetValue(),
|
||||
DelegateProperty delegateProperty => delegateProperty.GetValue(),
|
||||
DoubleProperty doubleProperty => doubleProperty.GetValue(),
|
||||
ArrayProperty arrayProperty => arrayProperty.GetValue(),
|
||||
StructProperty structProperty => structProperty.GetValue(),
|
||||
StrProperty strProperty => strProperty.GetValue(),
|
||||
TextProperty textProperty => textProperty.GetValue(),
|
||||
InterfaceProperty interfaceProperty => interfaceProperty.GetValue(),
|
||||
SoftObjectProperty softObjectProperty => softObjectProperty.GetValue(),
|
||||
UInt64Property uInt64Property => uInt64Property.GetValue(),
|
||||
UInt32Property uInt32Property => uInt32Property.GetValue(),
|
||||
UInt16Property uInt16Property => uInt16Property.GetValue(),
|
||||
Int64Property int64Property => int64Property.GetValue(),
|
||||
Int16Property int16Property => int16Property.GetValue(),
|
||||
Int8Property int8Property => int8Property.GetValue(),
|
||||
MapProperty mapProperty => mapProperty.GetValue(),
|
||||
SetProperty setProperty => setProperty.GetValue(),
|
||||
EnumProperty enumProperty => enumProperty.GetValue(),
|
||||
_ => Value[i],
|
||||
};
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,31 +8,31 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
{
|
||||
BaseProperty prop = type.String switch
|
||||
{
|
||||
"ByteProperty" => new ByteProperty(reader, tag, readType),
|
||||
"ByteProperty" => new ByteProperty(reader, readType),
|
||||
"BoolProperty" => new BoolProperty(reader, tag, readType),
|
||||
"IntProperty" => new IntProperty(reader, tag),
|
||||
"FloatProperty" => new FloatProperty(reader, tag),
|
||||
"ObjectProperty" => new ObjectProperty(reader, tag),
|
||||
"NameProperty" => new NameProperty(reader, tag),
|
||||
"DelegateProperty" => new DelegateProperty(reader, tag),
|
||||
"DoubleProperty" => new DoubleProperty(reader, tag),
|
||||
"IntProperty" => new IntProperty(reader),
|
||||
"FloatProperty" => new FloatProperty(reader),
|
||||
"ObjectProperty" => new ObjectProperty(reader),
|
||||
"NameProperty" => new NameProperty(reader),
|
||||
"DelegateProperty" => new DelegateProperty(reader),
|
||||
"DoubleProperty" => new DoubleProperty(reader),
|
||||
"ArrayProperty" => new ArrayProperty(reader, tag),
|
||||
"StructProperty" => new StructProperty(reader, tag),
|
||||
"StrProperty" => new StrProperty(reader, tag),
|
||||
"TextProperty" => new TextProperty(reader, tag),
|
||||
"InterfaceProperty" => new InterfaceProperty(reader, tag),
|
||||
"StrProperty" => new StrProperty(reader),
|
||||
"TextProperty" => new TextProperty(reader),
|
||||
"InterfaceProperty" => new InterfaceProperty(reader),
|
||||
"MulticastDelegateProperty" => new MulticastDelegateProperty(reader, tag),
|
||||
"LazyObjectProperty" => new LazyObjectProperty(reader, tag),
|
||||
"SoftObjectProperty" => new SoftObjectProperty(reader, tag, readType),
|
||||
"UInt64Property" => new UInt64Property(reader, tag),
|
||||
"UInt32Property" => new UInt32Property(reader, tag),
|
||||
"UInt16Property" => new UInt16Property(reader, tag),
|
||||
"Int64Property" => new Int64Property(reader, tag),
|
||||
"Int16Property" => new Int16Property(reader, tag),
|
||||
"Int8Property" => new Int8Property(reader, tag),
|
||||
"SoftObjectProperty" => new SoftObjectProperty(reader, readType),
|
||||
"UInt64Property" => new UInt64Property(reader),
|
||||
"UInt32Property" => new UInt32Property(reader),
|
||||
"UInt16Property" => new UInt16Property(reader),
|
||||
"Int64Property" => new Int64Property(reader),
|
||||
"Int16Property" => new Int16Property(reader),
|
||||
"Int8Property" => new Int8Property(reader),
|
||||
"MapProperty" => new MapProperty(reader, tag),
|
||||
"SetProperty" => new SetProperty(reader, tag),
|
||||
"EnumProperty" => new EnumProperty(reader, tag),
|
||||
"EnumProperty" => new EnumProperty(reader),
|
||||
_ => null, //throw new NotImplementedException($"Parsing of {type.String} types aren't supported yet."),
|
||||
};
|
||||
return prop;
|
||||
|
|
@ -40,33 +40,33 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
|
||||
internal static object ReadAsValue(PackageReader reader, FPropertyTag tag, FName type, ReadType readType)
|
||||
{
|
||||
var prop = type.String switch
|
||||
object prop = type.String switch
|
||||
{
|
||||
"ByteProperty" => new ByteProperty(reader, tag, readType).Value,
|
||||
"ByteProperty" => new ByteProperty(reader, readType).Value,
|
||||
"BoolProperty" => new BoolProperty(reader, tag, readType).Value,
|
||||
"IntProperty" => new IntProperty(reader, tag).Value,
|
||||
"FloatProperty" => new FloatProperty(reader, tag).Value,
|
||||
"ObjectProperty" => new ObjectProperty(reader, tag).Value,
|
||||
"NameProperty" => new NameProperty(reader, tag).Value,
|
||||
"DelegateProperty" => new DelegateProperty(reader, tag),
|
||||
"DoubleProperty" => new DoubleProperty(reader, tag).Value,
|
||||
"IntProperty" => new IntProperty(reader).Value,
|
||||
"FloatProperty" => new FloatProperty(reader).Value,
|
||||
"ObjectProperty" => new ObjectProperty(reader).Value,
|
||||
"NameProperty" => new NameProperty(reader).Value,
|
||||
"DelegateProperty" => new DelegateProperty(reader),
|
||||
"DoubleProperty" => new DoubleProperty(reader).Value,
|
||||
"ArrayProperty" => new ArrayProperty(reader, tag).Value,
|
||||
"StructProperty" => new StructProperty(reader, tag).Value,
|
||||
"StrProperty" => new StrProperty(reader, tag).Value,
|
||||
"TextProperty" => new TextProperty(reader, tag).Value,
|
||||
"InterfaceProperty" => new InterfaceProperty(reader, tag).Value,
|
||||
"StrProperty" => new StrProperty(reader).Value,
|
||||
"TextProperty" => new TextProperty(reader).Value,
|
||||
"InterfaceProperty" => new InterfaceProperty(reader).Value,
|
||||
"MulticastDelegateProperty" => new MulticastDelegateProperty(reader, tag).Value,
|
||||
"LazyObjectProperty" => new LazyObjectProperty(reader, tag).Value,
|
||||
"SoftObjectProperty" => new SoftObjectProperty(reader, tag, readType).Value,
|
||||
"UInt64Property" => new UInt64Property(reader, tag).Value,
|
||||
"UInt32Property" => new UInt32Property(reader, tag).Value,
|
||||
"UInt16Property" => new UInt16Property(reader, tag).Value,
|
||||
"Int64Property" => new Int64Property(reader, tag).Value,
|
||||
"Int16Property" => new Int16Property(reader, tag).Value,
|
||||
"Int8Property" => new Int8Property(reader, tag).Value,
|
||||
"SoftObjectProperty" => new SoftObjectProperty(reader, readType).Value,
|
||||
"UInt64Property" => new UInt64Property(reader).Value,
|
||||
"UInt32Property" => new UInt32Property(reader).Value,
|
||||
"UInt16Property" => new UInt16Property(reader).Value,
|
||||
"Int64Property" => new Int64Property(reader).Value,
|
||||
"Int16Property" => new Int16Property(reader).Value,
|
||||
"Int8Property" => new Int8Property(reader).Value,
|
||||
"MapProperty" => new MapProperty(reader, tag).Value,
|
||||
"SetProperty" => new SetProperty(reader, tag).Value,
|
||||
"EnumProperty" => new EnumProperty(reader, tag).Value,
|
||||
"EnumProperty" => new EnumProperty(reader).Value,
|
||||
_ => null, //throw new NotImplementedException($"Parsing of {type.String} types aren't supported yet."),
|
||||
};
|
||||
return prop;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
using System;
|
||||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class ByteProperty : BaseProperty<byte>
|
||||
{
|
||||
internal ByteProperty(PackageReader reader, FPropertyTag tag, ReadType readType)
|
||||
internal ByteProperty(PackageReader reader, ReadType readType)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = readType switch
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
|
|
@ -7,10 +8,12 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
public int Object;
|
||||
public FName Name;
|
||||
|
||||
internal DelegateProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal DelegateProperty(PackageReader reader)
|
||||
{
|
||||
Object = reader.ReadInt32();
|
||||
Name = reader.ReadFName();
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetValue() => new Dictionary<string, object> { ["Object"] = Object, ["Name"] = Name.String };
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class DoubleProperty : BaseProperty<double>
|
||||
{
|
||||
internal DoubleProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal DoubleProperty(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadDouble();
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
{
|
||||
public sealed class EnumProperty : BaseProperty<FName>
|
||||
{
|
||||
internal EnumProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal EnumProperty(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadFName();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class FloatProperty : BaseProperty<float>
|
||||
{
|
||||
internal FloatProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal FloatProperty(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadFloat();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class Int16Property : BaseProperty<short>
|
||||
{
|
||||
internal Int16Property(PackageReader reader, FPropertyTag tag)
|
||||
internal Int16Property(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadInt16();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class Int64Property : BaseProperty<long>
|
||||
{
|
||||
internal Int64Property(PackageReader reader, FPropertyTag tag)
|
||||
internal Int64Property(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadInt64();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class Int8Property : BaseProperty<byte>
|
||||
{
|
||||
internal Int8Property(PackageReader reader, FPropertyTag tag)
|
||||
internal Int8Property(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadByte();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class IntProperty : BaseProperty<int>
|
||||
{
|
||||
internal IntProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal IntProperty(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadInt32();
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class InterfaceProperty : BaseProperty<uint>
|
||||
{
|
||||
// Value is ObjectRef
|
||||
internal InterfaceProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal InterfaceProperty(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadUInt32();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using PakReader.Parsers.Objects;
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
var dict = new Dictionary<object, object>(NumEntries);
|
||||
for (int i = 0; i < NumEntries; i++)
|
||||
{
|
||||
dict[ReadAsValue(reader, tag, tag.InnerType, ReadType.MAP)] = BaseProperty.ReadAsObject(reader, tag, tag.ValueType, ReadType.MAP);
|
||||
dict[ReadAsValue(reader, tag, tag.ValueType, ReadType.MAP)] = ReadAsObject(reader, tag, tag.ValueType, ReadType.MAP);
|
||||
}
|
||||
Value = dict;
|
||||
}
|
||||
|
|
@ -29,37 +29,35 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
public Dictionary<object, object> GetValue()
|
||||
{
|
||||
var ret = new Dictionary<object, object>(Value.Count);
|
||||
foreach (KeyValuePair<object, object> KvP in Value)
|
||||
foreach (var (key, value) in Value)
|
||||
{
|
||||
if (KvP.Value == null)
|
||||
ret[KvP.Key] = null;
|
||||
else
|
||||
ret[KvP.Key] = KvP.Value.GetType().Name switch
|
||||
{
|
||||
"ByteProperty" => ((ByteProperty)KvP.Value).GetValue(),
|
||||
"BoolProperty" => ((BoolProperty)KvP.Value).GetValue(),
|
||||
"IntProperty" => ((IntProperty)KvP.Value).GetValue(),
|
||||
"FloatProperty" => ((FloatProperty)KvP.Value).GetValue(),
|
||||
"ObjectProperty" => ((ObjectProperty)KvP.Value).GetValue(),
|
||||
"NameProperty" => ((NameProperty)KvP.Value).GetValue(),
|
||||
"DoubleProperty" => ((DoubleProperty)KvP.Value).GetValue(),
|
||||
"ArrayProperty" => ((ArrayProperty)KvP.Value).GetValue(),
|
||||
"StructProperty" => ((StructProperty)KvP.Value).GetValue(),
|
||||
"StrProperty" => ((StrProperty)KvP.Value).GetValue(),
|
||||
"TextProperty" => ((TextProperty)KvP.Value).GetValue(),
|
||||
"InterfaceProperty" => ((InterfaceProperty)KvP.Value).GetValue(),
|
||||
"SoftObjectProperty" => ((SoftObjectProperty)KvP.Value).GetValue(),
|
||||
"UInt64Property" => ((UInt64Property)KvP.Value).GetValue(),
|
||||
"UInt32Property" => ((UInt32Property)KvP.Value).GetValue(),
|
||||
"UInt16Property" => ((UInt16Property)KvP.Value).GetValue(),
|
||||
"Int64Property" => ((Int64Property)KvP.Value).GetValue(),
|
||||
"Int16Property" => ((Int16Property)KvP.Value).GetValue(),
|
||||
"Int8Property" => ((Int8Property)KvP.Value).GetValue(),
|
||||
"MapProperty" => ((MapProperty)KvP.Value).GetValue(),
|
||||
"SetProperty" => ((SetProperty)KvP.Value).GetValue(),
|
||||
"EnumProperty" => ((EnumProperty)KvP.Value).GetValue(),
|
||||
_ => KvP.Value,
|
||||
};
|
||||
ret[key] = value switch
|
||||
{
|
||||
ByteProperty byteProperty => byteProperty.GetValue(),
|
||||
BoolProperty boolProperty => boolProperty.GetValue(),
|
||||
IntProperty intProperty => intProperty.GetValue(),
|
||||
FloatProperty floatProperty => floatProperty.GetValue(),
|
||||
ObjectProperty objectProperty => objectProperty.GetValue(),
|
||||
NameProperty nameProperty => nameProperty.GetValue(),
|
||||
DelegateProperty delegateProperty => delegateProperty.GetValue(),
|
||||
DoubleProperty doubleProperty => doubleProperty.GetValue(),
|
||||
ArrayProperty arrayProperty => arrayProperty.GetValue(),
|
||||
StructProperty structProperty => structProperty.GetValue(),
|
||||
StrProperty strProperty => strProperty.GetValue(),
|
||||
TextProperty textProperty => textProperty.GetValue(),
|
||||
InterfaceProperty interfaceProperty => interfaceProperty.GetValue(),
|
||||
SoftObjectProperty softObjectProperty => softObjectProperty.GetValue(),
|
||||
UInt64Property uInt64Property => uInt64Property.GetValue(),
|
||||
UInt32Property uInt32Property => uInt32Property.GetValue(),
|
||||
UInt16Property uInt16Property => uInt16Property.GetValue(),
|
||||
Int64Property int64Property => int64Property.GetValue(),
|
||||
Int16Property int16Property => int16Property.GetValue(),
|
||||
Int8Property int8Property => int8Property.GetValue(),
|
||||
MapProperty mapProperty => mapProperty.GetValue(),
|
||||
SetProperty setProperty => setProperty.GetValue(),
|
||||
EnumProperty enumProperty => enumProperty.GetValue(),
|
||||
_ => value,
|
||||
};
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
{
|
||||
public sealed class NameProperty : BaseProperty<FName>
|
||||
{
|
||||
internal NameProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal NameProperty(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadFName();
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class ObjectProperty : BaseProperty<FPackageIndex>
|
||||
{
|
||||
internal ObjectProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal ObjectProperty(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = new FPackageIndex(reader);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
|
|
@ -20,7 +20,7 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
Value = new object[NumEntries];
|
||||
for (int i = 0; i < NumEntries; i++)
|
||||
{
|
||||
Value[i] = BaseProperty.ReadAsObject(reader, tag, tag.InnerType, ReadType.ARRAY);
|
||||
Value[i] = ReadAsObject(reader, tag, tag.InnerType, ReadType.ARRAY);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -29,35 +29,33 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
var ret = new object[Value.Length];
|
||||
for (int i = 0; i < ret.Length; i++)
|
||||
{
|
||||
if (Value[i] == null)
|
||||
ret[i] = null;
|
||||
else
|
||||
ret[i] = ((BaseProperty)Value[i]).GetType().Name switch
|
||||
{
|
||||
"ByteProperty" => ((ByteProperty)Value[i]).GetValue(),
|
||||
"BoolProperty" => ((BoolProperty)Value[i]).GetValue(),
|
||||
"IntProperty" => ((IntProperty)Value[i]).GetValue(),
|
||||
"FloatProperty" => ((FloatProperty)Value[i]).GetValue(),
|
||||
"ObjectProperty" => ((ObjectProperty)Value[i]).GetValue(),
|
||||
"NameProperty" => ((NameProperty)Value[i]).GetValue(),
|
||||
"DoubleProperty" => ((DoubleProperty)Value[i]).GetValue(),
|
||||
"ArrayProperty" => ((ArrayProperty)Value[i]).GetValue(),
|
||||
"StructProperty" => ((StructProperty)Value[i]).GetValue(),
|
||||
"StrProperty" => ((StrProperty)Value[i]).GetValue(),
|
||||
"TextProperty" => ((TextProperty)Value[i]).GetValue(),
|
||||
"InterfaceProperty" => ((InterfaceProperty)Value[i]).GetValue(),
|
||||
"SoftObjectProperty" => ((SoftObjectProperty)Value[i]).GetValue(),
|
||||
"UInt64Property" => ((UInt64Property)Value[i]).GetValue(),
|
||||
"UInt32Property" => ((UInt32Property)Value[i]).GetValue(),
|
||||
"UInt16Property" => ((UInt16Property)Value[i]).GetValue(),
|
||||
"Int64Property" => ((Int64Property)Value[i]).GetValue(),
|
||||
"Int16Property" => ((Int16Property)Value[i]).GetValue(),
|
||||
"Int8Property" => ((Int8Property)Value[i]).GetValue(),
|
||||
"MapProperty" => ((MapProperty)Value[i]).GetValue(),
|
||||
"SetProperty" => ((SetProperty)Value[i]).GetValue(),
|
||||
"EnumProperty" => ((EnumProperty)Value[i]).GetValue(),
|
||||
_ => Value[i],
|
||||
};
|
||||
ret[i] = Value[i] switch
|
||||
{
|
||||
ByteProperty byteProperty => byteProperty.GetValue(),
|
||||
BoolProperty boolProperty => boolProperty.GetValue(),
|
||||
IntProperty intProperty => intProperty.GetValue(),
|
||||
FloatProperty floatProperty => floatProperty.GetValue(),
|
||||
ObjectProperty objectProperty => objectProperty.GetValue(),
|
||||
NameProperty nameProperty => nameProperty.GetValue(),
|
||||
DelegateProperty delegateProperty => delegateProperty.GetValue(),
|
||||
DoubleProperty doubleProperty => doubleProperty.GetValue(),
|
||||
ArrayProperty arrayProperty => arrayProperty.GetValue(),
|
||||
StructProperty structProperty => structProperty.GetValue(),
|
||||
StrProperty strProperty => strProperty.GetValue(),
|
||||
TextProperty textProperty => textProperty.GetValue(),
|
||||
InterfaceProperty interfaceProperty => interfaceProperty.GetValue(),
|
||||
SoftObjectProperty softObjectProperty => softObjectProperty.GetValue(),
|
||||
UInt64Property uInt64Property => uInt64Property.GetValue(),
|
||||
UInt32Property uInt32Property => uInt32Property.GetValue(),
|
||||
UInt16Property uInt16Property => uInt16Property.GetValue(),
|
||||
Int64Property int64Property => int64Property.GetValue(),
|
||||
Int16Property int16Property => int16Property.GetValue(),
|
||||
Int8Property int8Property => int8Property.GetValue(),
|
||||
MapProperty mapProperty => mapProperty.GetValue(),
|
||||
SetProperty setProperty => setProperty.GetValue(),
|
||||
EnumProperty enumProperty => enumProperty.GetValue(),
|
||||
_ => Value[i],
|
||||
};
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class SoftObjectProperty : BaseProperty<FSoftObjectPath>
|
||||
{
|
||||
internal SoftObjectProperty(PackageReader reader, FPropertyTag tag, ReadType readType)
|
||||
internal SoftObjectProperty(PackageReader reader, ReadType readType)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = new FSoftObjectPath(reader);
|
||||
|
|
@ -12,6 +13,6 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
reader.Position += 16 - (reader.Position - Position); // skip ahead, putting the total bytes read to 16
|
||||
}
|
||||
|
||||
public FSoftObjectPath GetValue() => Value;
|
||||
public Dictionary<string, string> GetValue() => Value.GetValue();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class StrProperty : BaseProperty<string>
|
||||
{
|
||||
internal StrProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal StrProperty(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadFString();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.Class;
|
||||
using PakReader.Parsers.Objects;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
|
|
@ -14,57 +13,19 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
|
||||
public object GetValue()
|
||||
{
|
||||
if (Value is UObject obj)
|
||||
return Value switch
|
||||
{
|
||||
var ret = new Dictionary<string, object>(obj.Count);
|
||||
foreach (KeyValuePair<string, object> KvP in obj)
|
||||
{
|
||||
if (KvP.Value == null)
|
||||
ret[KvP.Key] = null;
|
||||
else
|
||||
ret[KvP.Key] = KvP.Value.GetType().Name switch
|
||||
{
|
||||
"ByteProperty" => ((ByteProperty)KvP.Value).GetValue(),
|
||||
"BoolProperty" => ((BoolProperty)KvP.Value).GetValue(),
|
||||
"IntProperty" => ((IntProperty)KvP.Value).GetValue(),
|
||||
"FloatProperty" => ((FloatProperty)KvP.Value).GetValue(),
|
||||
"ObjectProperty" => ((ObjectProperty)KvP.Value).GetValue(),
|
||||
"NameProperty" => ((NameProperty)KvP.Value).GetValue(),
|
||||
"DoubleProperty" => ((DoubleProperty)KvP.Value).GetValue(),
|
||||
"ArrayProperty" => ((ArrayProperty)KvP.Value).GetValue(),
|
||||
"StructProperty" => ((StructProperty)KvP.Value).GetValue(),
|
||||
"StrProperty" => ((StrProperty)KvP.Value).GetValue(),
|
||||
"TextProperty" => ((TextProperty)KvP.Value).GetValue(),
|
||||
"InterfaceProperty" => ((InterfaceProperty)KvP.Value).GetValue(),
|
||||
"SoftObjectProperty" => ((SoftObjectProperty)KvP.Value).GetValue(),
|
||||
"UInt64Property" => ((UInt64Property)KvP.Value).GetValue(),
|
||||
"UInt32Property" => ((UInt32Property)KvP.Value).GetValue(),
|
||||
"UInt16Property" => ((UInt16Property)KvP.Value).GetValue(),
|
||||
"Int64Property" => ((Int64Property)KvP.Value).GetValue(),
|
||||
"Int16Property" => ((Int16Property)KvP.Value).GetValue(),
|
||||
"Int8Property" => ((Int8Property)KvP.Value).GetValue(),
|
||||
"MapProperty" => ((MapProperty)KvP.Value).GetValue(),
|
||||
"SetProperty" => ((SetProperty)KvP.Value).GetValue(),
|
||||
"EnumProperty" => ((EnumProperty)KvP.Value).GetValue(),
|
||||
_ => KvP.Value,
|
||||
};
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
else if (Value is FGameplayTagContainer gTags)
|
||||
{
|
||||
var ret = new string[gTags.GameplayTags.Length];
|
||||
for (int i = 0; i < ret.Length; i++)
|
||||
{
|
||||
ret[i] = gTags.GameplayTags[i].String;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
else if (Value is FGuid guid)
|
||||
{
|
||||
return guid.Hex;
|
||||
}
|
||||
return Value;
|
||||
UObject uObject => uObject.GetJsonDict(),
|
||||
FAssetData fAssetData => fAssetData.GetValue(),
|
||||
FAssetDataTagMapSharedView fAssetDataTagMapSharedView => fAssetDataTagMapSharedView.Map,
|
||||
FAssetIdentifier fAssetIdentifier => fAssetIdentifier.GetValue(),
|
||||
FAssetPackageData fAssetPackageData => fAssetPackageData.GetValue(),
|
||||
FGameplayTagContainer fGameplayTagContainer => fGameplayTagContainer.GetValue(),
|
||||
FSoftObjectPath fSoftObjectPath => fSoftObjectPath.GetValue(),
|
||||
FDateTime fDateTime => fDateTime.Ticks,
|
||||
FGuid fGuid => fGuid.Hex,
|
||||
_ => Value
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@ namespace PakReader.Parsers.PropertyTagData
|
|||
{
|
||||
public sealed class TextProperty : BaseProperty<FText>
|
||||
{
|
||||
internal TextProperty(PackageReader reader, FPropertyTag tag)
|
||||
internal TextProperty(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = new FText(reader);
|
||||
}
|
||||
|
||||
public FText GetValue() => Value;
|
||||
public object GetValue() => Value.GetValue();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class UInt16Property : BaseProperty<ushort>
|
||||
{
|
||||
internal UInt16Property(PackageReader reader, FPropertyTag tag)
|
||||
internal UInt16Property(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadUInt16();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class UInt32Property : BaseProperty<uint>
|
||||
{
|
||||
internal UInt32Property(PackageReader reader, FPropertyTag tag)
|
||||
internal UInt32Property(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadUInt32();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
using PakReader.Parsers.Objects;
|
||||
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
namespace PakReader.Parsers.PropertyTagData
|
||||
{
|
||||
public sealed class UInt64Property : BaseProperty<ulong>
|
||||
{
|
||||
internal UInt64Property(PackageReader reader, FPropertyTag tag)
|
||||
internal UInt64Property(PackageReader reader)
|
||||
{
|
||||
Position = reader.Position;
|
||||
Value = reader.ReadUInt64();
|
||||
|
|
|
|||
153
FModel/Properties/Resources.Designer.cs
generated
153
FModel/Properties/Resources.Designer.cs
generated
|
|
@ -109,15 +109,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Add Separator.
|
||||
/// </summary>
|
||||
public static string AddSeparator {
|
||||
get {
|
||||
return ResourceManager.GetString("AddSeparator", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à AES.
|
||||
/// </summary>
|
||||
|
|
@ -248,15 +239,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Audio.
|
||||
/// </summary>
|
||||
public static string Audio {
|
||||
get {
|
||||
return ResourceManager.GetString("Audio", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Audio Devices.
|
||||
/// </summary>
|
||||
|
|
@ -339,15 +321,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à BenBot API.
|
||||
/// </summary>
|
||||
public static string BenBotApi {
|
||||
get {
|
||||
return ResourceManager.GetString("BenBotApi", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une ressource localisée de type System.Drawing.Icon semblable à (Icône).
|
||||
/// </summary>
|
||||
|
|
@ -695,15 +668,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Difference.
|
||||
/// </summary>
|
||||
public static string Difference {
|
||||
get {
|
||||
return ResourceManager.GetString("Difference", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Directories.
|
||||
/// </summary>
|
||||
|
|
@ -947,15 +911,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Exit.
|
||||
/// </summary>
|
||||
public static string Exit {
|
||||
get {
|
||||
return ResourceManager.GetString("Exit", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Export.
|
||||
/// </summary>
|
||||
|
|
@ -965,15 +920,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Export Directory.
|
||||
/// </summary>
|
||||
public static string ExportDirectory {
|
||||
get {
|
||||
return ResourceManager.GetString("ExportDirectory", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Extract.
|
||||
/// </summary>
|
||||
|
|
@ -983,15 +929,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Extract Directory.
|
||||
/// </summary>
|
||||
public static string ExtractDirectory {
|
||||
get {
|
||||
return ResourceManager.GetString("ExtractDirectory", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Extraction.
|
||||
/// </summary>
|
||||
|
|
@ -1235,24 +1172,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à The selected language will be the one used for icons creation.
|
||||
/// </summary>
|
||||
public static string FyiDetails {
|
||||
get {
|
||||
return ResourceManager.GetString("FyiDetails", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à FYI:.
|
||||
/// </summary>
|
||||
public static string FyiTitle {
|
||||
get {
|
||||
return ResourceManager.GetString("FyiTitle", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une ressource localisée de type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
|
@ -1723,15 +1642,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Media.
|
||||
/// </summary>
|
||||
public static string Media {
|
||||
get {
|
||||
return ResourceManager.GetString("Media", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Minimalist.
|
||||
/// </summary>
|
||||
|
|
@ -1975,15 +1885,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Fortnite PAK files auto-detected.
|
||||
/// </summary>
|
||||
public static string PakFilesAutoDetected {
|
||||
get {
|
||||
return ResourceManager.GetString("PakFilesAutoDetected", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Parsing of {0} types isn't supported yet..
|
||||
/// </summary>
|
||||
|
|
@ -2097,15 +1998,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Popup.
|
||||
/// </summary>
|
||||
public static string Popup {
|
||||
get {
|
||||
return ResourceManager.GetString("Popup", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Portuguese (Brazil).
|
||||
/// </summary>
|
||||
|
|
@ -2171,15 +2063,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Rate Limit Exceeded.
|
||||
/// </summary>
|
||||
public static string RateLimited {
|
||||
get {
|
||||
return ResourceManager.GetString("RateLimited", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une ressource localisée de type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
|
@ -2208,15 +2091,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Remember game.
|
||||
/// </summary>
|
||||
public static string RememberGame {
|
||||
get {
|
||||
return ResourceManager.GetString("RememberGame", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Remove.
|
||||
/// </summary>
|
||||
|
|
@ -2307,15 +2181,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Save Directory.
|
||||
/// </summary>
|
||||
public static string SaveDirectory {
|
||||
get {
|
||||
return ResourceManager.GetString("SaveDirectory", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Save Image.
|
||||
/// </summary>
|
||||
|
|
@ -2683,12 +2548,9 @@ namespace FModel.Properties {
|
|||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à • EN: Asval#2291 • FR: Asval#2291
|
||||
///• DE: FunGames#6822 • IT: Angry Cat#5581
|
||||
///• DE: FunGames#6822 • IT: arianaglande#5581
|
||||
///• ES: Maiky.M#9879 • AR: PsychoPast#0001
|
||||
///• JA: FNJPNews#7820 • KO:
|
||||
///• PL: • PT-BR:
|
||||
///• RU: Seawod#4311 • TR:
|
||||
///• ZH-CN: • ZH-Hant:.
|
||||
///• JA: FNJPNews#7820 • RU: Seawod#4311.
|
||||
/// </summary>
|
||||
public static string TranslatorsFDetails {
|
||||
get {
|
||||
|
|
@ -2714,15 +2576,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Update.
|
||||
/// </summary>
|
||||
public static string Update {
|
||||
get {
|
||||
return ResourceManager.GetString("Update", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à Update Available.
|
||||
/// </summary>
|
||||
|
|
@ -2919,7 +2772,7 @@ namespace FModel.Properties {
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recherche une chaîne localisée semblable à With Position.
|
||||
/// Recherche une chaîne localisée semblable à Position / Value.
|
||||
/// </summary>
|
||||
public static string WithPosition {
|
||||
get {
|
||||
|
|
|
|||
|
|
@ -139,9 +139,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="AddDirectory" xml:space="preserve">
|
||||
<value>أضف المجلد</value>
|
||||
</data>
|
||||
<data name="AddSeparator" xml:space="preserve">
|
||||
<value>إضافة فاصل</value>
|
||||
</data>
|
||||
<data name="AES" xml:space="preserve">
|
||||
<value>AES</value>
|
||||
</data>
|
||||
|
|
@ -172,9 +169,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Assets" xml:space="preserve">
|
||||
<value>Assets</value>
|
||||
</data>
|
||||
<data name="Audio" xml:space="preserve">
|
||||
<value>صوت</value>
|
||||
</data>
|
||||
<data name="AudioDevices" xml:space="preserve">
|
||||
<value>أجهزة الصوت</value>
|
||||
</data>
|
||||
|
|
@ -199,9 +193,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Banner" xml:space="preserve">
|
||||
<value>شعار</value>
|
||||
</data>
|
||||
<data name="BenBotApi" xml:space="preserve">
|
||||
<value>BenBot API</value>
|
||||
</data>
|
||||
<data name="BugsReport" xml:space="preserve">
|
||||
<value>Bugs Report</value>
|
||||
</data>
|
||||
|
|
@ -274,9 +265,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Design" xml:space="preserve">
|
||||
<value>التصميم</value>
|
||||
</data>
|
||||
<data name="Difference" xml:space="preserve">
|
||||
<value>فرق</value>
|
||||
</data>
|
||||
<data name="Directories" xml:space="preserve">
|
||||
<value>المجلدات</value>
|
||||
</data>
|
||||
|
|
@ -331,18 +319,12 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Error" xml:space="preserve">
|
||||
<value>خطأ</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>خروج</value>
|
||||
</data>
|
||||
<data name="Export" xml:space="preserve">
|
||||
<value>تصدير</value>
|
||||
</data>
|
||||
<data name="Extract" xml:space="preserve">
|
||||
<value>استخراج</value>
|
||||
</data>
|
||||
<data name="ExtractDirectory" xml:space="preserve">
|
||||
<value>استخراج المجلد</value>
|
||||
</data>
|
||||
<data name="Extraction" xml:space="preserve">
|
||||
<value>استخلاص</value>
|
||||
</data>
|
||||
|
|
@ -394,12 +376,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="French" xml:space="preserve">
|
||||
<value>اللغة الفرنسية</value>
|
||||
</data>
|
||||
<data name="FyiDetails" xml:space="preserve">
|
||||
<value>ستكون اللغة المحددة هي اللغة المستخدمة لإنشاء الرموز</value>
|
||||
</data>
|
||||
<data name="FyiTitle" xml:space="preserve">
|
||||
<value>لمعلوماتك</value>
|
||||
</data>
|
||||
<data name="Games" xml:space="preserve">
|
||||
<value>ألعاب</value>
|
||||
</data>
|
||||
|
|
@ -517,9 +493,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="MB" xml:space="preserve">
|
||||
<value>MB</value>
|
||||
</data>
|
||||
<data name="Media" xml:space="preserve">
|
||||
<value>وسائل الإعلام</value>
|
||||
</data>
|
||||
<data name="Minimalist" xml:space="preserve">
|
||||
<value>الحد الأدنى</value>
|
||||
</data>
|
||||
|
|
@ -595,9 +568,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="PakFiles" xml:space="preserve">
|
||||
<value>PAK Files</value>
|
||||
</data>
|
||||
<data name="PakFilesAutoDetected" xml:space="preserve">
|
||||
<value>Fortnite PAK files auto-detected</value>
|
||||
</data>
|
||||
<data name="ParsingNotSupported" xml:space="preserve">
|
||||
<value>Parsing of {0} types isn't supported yet.</value>
|
||||
</data>
|
||||
|
|
@ -619,9 +589,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Polish" xml:space="preserve">
|
||||
<value>اللغة البولندية</value>
|
||||
</data>
|
||||
<data name="Popup" xml:space="preserve">
|
||||
<value>Popup</value>
|
||||
</data>
|
||||
<data name="PortugueseBrazil" xml:space="preserve">
|
||||
<value>اللغة البرتغالية (البرازيل)</value>
|
||||
</data>
|
||||
|
|
@ -637,18 +604,12 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Rarity" xml:space="preserve">
|
||||
<value>Rarity</value>
|
||||
</data>
|
||||
<data name="RateLimited" xml:space="preserve">
|
||||
<value>Rate Limit Exceeded</value>
|
||||
</data>
|
||||
<data name="RegularExpression" xml:space="preserve">
|
||||
<value>Regular Expression</value>
|
||||
</data>
|
||||
<data name="ReloadAesKeysAtLaunch" xml:space="preserve">
|
||||
<value>إعادة تحميل مفاتيح AES عند الإطلاق</value>
|
||||
</data>
|
||||
<data name="RememberGame" xml:space="preserve">
|
||||
<value>تذكر اللعبة</value>
|
||||
</data>
|
||||
<data name="Remove" xml:space="preserve">
|
||||
<value>إزالة</value>
|
||||
</data>
|
||||
|
|
@ -760,9 +721,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="UnhandledExceptionOccured" xml:space="preserve">
|
||||
<value>An unhandled exception occurred: {0}</value>
|
||||
</data>
|
||||
<data name="Update" xml:space="preserve">
|
||||
<value>تحديث</value>
|
||||
</data>
|
||||
<data name="UpdateAvailable" xml:space="preserve">
|
||||
<value>تحديث متوفر</value>
|
||||
</data>
|
||||
|
|
@ -808,9 +766,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="UseDiscordRpc" xml:space="preserve">
|
||||
<value>استخدم Discord RPC</value>
|
||||
</data>
|
||||
<data name="SaveDirectory" xml:space="preserve">
|
||||
<value>احفظ المجلد</value>
|
||||
</data>
|
||||
<data name="NoImageToCopy" xml:space="preserve">
|
||||
<value>لا يوجد حاليا صورة لنسخها</value>
|
||||
</data>
|
||||
|
|
|
|||
|
|
@ -134,9 +134,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="AddDirectory" xml:space="preserve">
|
||||
<value>Ordner hinzufügen</value>
|
||||
</data>
|
||||
<data name="AddSeparator" xml:space="preserve">
|
||||
<value>Trennzeichen hinzufügen</value>
|
||||
</data>
|
||||
<data name="AesKey" xml:space="preserve">
|
||||
<value>AES-Schlüssel</value>
|
||||
</data>
|
||||
|
|
@ -251,9 +248,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="Design" xml:space="preserve">
|
||||
<value>Design</value>
|
||||
</data>
|
||||
<data name="Difference" xml:space="preserve">
|
||||
<value>Unterschied</value>
|
||||
</data>
|
||||
<data name="Directories" xml:space="preserve">
|
||||
<value>Ordner</value>
|
||||
</data>
|
||||
|
|
@ -307,18 +301,12 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="Error" xml:space="preserve">
|
||||
<value>Fehler</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Schließen</value>
|
||||
</data>
|
||||
<data name="Export" xml:space="preserve">
|
||||
<value>Exportieren</value>
|
||||
</data>
|
||||
<data name="Extract" xml:space="preserve">
|
||||
<value>Extrahieren</value>
|
||||
</data>
|
||||
<data name="ExtractDirectory" xml:space="preserve">
|
||||
<value>Ordner extrahieren</value>
|
||||
</data>
|
||||
<data name="Extraction" xml:space="preserve">
|
||||
<value>Ausgabe</value>
|
||||
</data>
|
||||
|
|
@ -371,12 +359,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="French" xml:space="preserve">
|
||||
<value>Französisch</value>
|
||||
</data>
|
||||
<data name="FyiDetails" xml:space="preserve">
|
||||
<value>Die ausgewählte Sprache wird zur Erstellung von Icons benutzt</value>
|
||||
</data>
|
||||
<data name="FyiTitle" xml:space="preserve">
|
||||
<value>Zur Information:</value>
|
||||
</data>
|
||||
<data name="Games" xml:space="preserve">
|
||||
<value>Spiele</value>
|
||||
</data>
|
||||
|
|
@ -479,9 +461,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<value>Ganzes Wort überprüfen</value>
|
||||
<comment>Find & Replace Window</comment>
|
||||
</data>
|
||||
<data name="Media" xml:space="preserve">
|
||||
<value>Medien</value>
|
||||
</data>
|
||||
<data name="Minimalist" xml:space="preserve">
|
||||
<value>Minimalistisch</value>
|
||||
<comment>Rarity Design</comment>
|
||||
|
|
@ -548,9 +527,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="PakFiles" xml:space="preserve">
|
||||
<value>PAK-Dateien</value>
|
||||
</data>
|
||||
<data name="PakFilesAutoDetected" xml:space="preserve">
|
||||
<value>Fortnite PAK-Dateien wurden automatisch erkannt</value>
|
||||
</data>
|
||||
<data name="ParsingNotSupported" xml:space="preserve">
|
||||
<value>Das Parsen von {0}-Typen wird noch nicht unterstützt</value>
|
||||
</data>
|
||||
|
|
@ -574,10 +550,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="Polish" xml:space="preserve">
|
||||
<value>Polnisch</value>
|
||||
</data>
|
||||
<data name="Popup" xml:space="preserve">
|
||||
<value>Pop-up</value>
|
||||
<comment>Rarity Design</comment>
|
||||
</data>
|
||||
<data name="PortugueseBrazil" xml:space="preserve">
|
||||
<value>Portugiesisch (Brasilien)</value>
|
||||
</data>
|
||||
|
|
@ -594,15 +566,9 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="Rarity" xml:space="preserve">
|
||||
<value>Seltenheit</value>
|
||||
</data>
|
||||
<data name="RateLimited" xml:space="preserve">
|
||||
<value>Rate Limit überschritten</value>
|
||||
</data>
|
||||
<data name="ReloadAesKeysAtLaunch" xml:space="preserve">
|
||||
<value>AES-Schlüssel beim Start neuladen</value>
|
||||
</data>
|
||||
<data name="RememberGame" xml:space="preserve">
|
||||
<value>Spiel merken</value>
|
||||
</data>
|
||||
<data name="RemoveDirectory" xml:space="preserve">
|
||||
<value>Ordner entfernen</value>
|
||||
</data>
|
||||
|
|
@ -719,9 +685,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="UnhandledExceptionOccured" xml:space="preserve">
|
||||
<value>Eine nicht behandelte Ausnahme ist aufgetreten: {0}</value>
|
||||
</data>
|
||||
<data name="Update" xml:space="preserve">
|
||||
<value>Aktualisieren</value>
|
||||
</data>
|
||||
<data name="UseGameColors" xml:space="preserve">
|
||||
<value>Verwende Farben aus dem Spiel</value>
|
||||
</data>
|
||||
|
|
@ -765,9 +728,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="AES" xml:space="preserve">
|
||||
<value>AES</value>
|
||||
</data>
|
||||
<data name="Audio" xml:space="preserve">
|
||||
<value>Audio</value>
|
||||
</data>
|
||||
<data name="AudioPlayer" xml:space="preserve">
|
||||
<value>Audio Player</value>
|
||||
</data>
|
||||
|
|
@ -780,9 +740,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="Banner" xml:space="preserve">
|
||||
<value>Banner</value>
|
||||
</data>
|
||||
<data name="BenBotApi" xml:space="preserve">
|
||||
<value>BenBot API</value>
|
||||
</data>
|
||||
<data name="DiscordServer" xml:space="preserve">
|
||||
<value>Discord Server</value>
|
||||
</data>
|
||||
|
|
@ -843,9 +800,6 @@ Jetzt ist es die am häufigsten genutzte freie Software um mit Fortnite zu leake
|
|||
<data name="UseDiscordRpc" xml:space="preserve">
|
||||
<value>Discord RPC benutzen</value>
|
||||
</data>
|
||||
<data name="SaveDirectory" xml:space="preserve">
|
||||
<value>Speicherordner</value>
|
||||
</data>
|
||||
<data name="NoImageToCopy" xml:space="preserve">
|
||||
<value>Es gibt aktuell kein Bild zum kopieren</value>
|
||||
</data>
|
||||
|
|
|
|||
|
|
@ -137,9 +137,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="AddDirectory" xml:space="preserve">
|
||||
<value>Añadir directorio</value>
|
||||
</data>
|
||||
<data name="AddSeparator" xml:space="preserve">
|
||||
<value>Añadir separador</value>
|
||||
</data>
|
||||
<data name="AES" xml:space="preserve">
|
||||
<value>AES</value>
|
||||
<comment>Do not change this</comment>
|
||||
|
|
@ -186,9 +183,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="Assets" xml:space="preserve">
|
||||
<value>Assets</value>
|
||||
</data>
|
||||
<data name="Audio" xml:space="preserve">
|
||||
<value>Audio</value>
|
||||
</data>
|
||||
<data name="AudioDevices" xml:space="preserve">
|
||||
<value>Dispositivos de Audio</value>
|
||||
</data>
|
||||
|
|
@ -218,9 +212,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="Banner" xml:space="preserve">
|
||||
<value>Encabezado</value>
|
||||
</data>
|
||||
<data name="BenBotApi" xml:space="preserve">
|
||||
<value>BenBot API</value>
|
||||
</data>
|
||||
<data name="bug" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\bug.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
|
@ -326,9 +317,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="Design" xml:space="preserve">
|
||||
<value>Diseño</value>
|
||||
</data>
|
||||
<data name="Difference" xml:space="preserve">
|
||||
<value>Diferencia</value>
|
||||
</data>
|
||||
<data name="Directories" xml:space="preserve">
|
||||
<value>Directorios</value>
|
||||
</data>
|
||||
|
|
@ -403,18 +391,12 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="Error" xml:space="preserve">
|
||||
<value>Error</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Salir</value>
|
||||
</data>
|
||||
<data name="Export" xml:space="preserve">
|
||||
<value>Exportar</value>
|
||||
</data>
|
||||
<data name="Extract" xml:space="preserve">
|
||||
<value>Extraer</value>
|
||||
</data>
|
||||
<data name="ExtractDirectory" xml:space="preserve">
|
||||
<value>Extraer directorio</value>
|
||||
</data>
|
||||
<data name="Extraction" xml:space="preserve">
|
||||
<value>Extracción</value>
|
||||
</data>
|
||||
|
|
@ -497,12 +479,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="French" xml:space="preserve">
|
||||
<value>Francés</value>
|
||||
</data>
|
||||
<data name="FyiDetails" xml:space="preserve">
|
||||
<value>El idioma selecciona será utilizado para la creación de iconos.</value>
|
||||
</data>
|
||||
<data name="FyiTitle" xml:space="preserve">
|
||||
<value>Para tu información:</value>
|
||||
</data>
|
||||
<data name="gamepad_variant" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\gamepad-variant.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
|
@ -659,9 +635,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<value>MB</value>
|
||||
<comment>MegaByte</comment>
|
||||
</data>
|
||||
<data name="Media" xml:space="preserve">
|
||||
<value>Media</value>
|
||||
</data>
|
||||
<data name="Minimalist" xml:space="preserve">
|
||||
<value>Minimalista</value>
|
||||
<comment>Rarity Design</comment>
|
||||
|
|
@ -741,9 +714,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="PakFiles" xml:space="preserve">
|
||||
<value>Archivos PAK</value>
|
||||
</data>
|
||||
<data name="PakFilesAutoDetected" xml:space="preserve">
|
||||
<value>Archivos PAK de Fortnite detectados automáticamente</value>
|
||||
</data>
|
||||
<data name="ParsingNotSupported" xml:space="preserve">
|
||||
<value>El análisis del tipo {0} aún no es soportado.</value>
|
||||
</data>
|
||||
|
|
@ -782,10 +752,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="Polish" xml:space="preserve">
|
||||
<value>Polaco</value>
|
||||
</data>
|
||||
<data name="Popup" xml:space="preserve">
|
||||
<value>Ventana emergente</value>
|
||||
<comment>Rarity Design</comment>
|
||||
</data>
|
||||
<data name="PortugueseBrazil" xml:space="preserve">
|
||||
<value>Portugués (Brasil)</value>
|
||||
</data>
|
||||
|
|
@ -808,9 +774,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="Rarity" xml:space="preserve">
|
||||
<value>Rareza</value>
|
||||
</data>
|
||||
<data name="RateLimited" xml:space="preserve">
|
||||
<value>Límite de Consultas Excedido</value>
|
||||
</data>
|
||||
<data name="refresh" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
|
@ -821,9 +784,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="ReloadAesKeysAtLaunch" xml:space="preserve">
|
||||
<value>Recargar Claves AES al iniciar</value>
|
||||
</data>
|
||||
<data name="RememberGame" xml:space="preserve">
|
||||
<value>Recordar juego</value>
|
||||
</data>
|
||||
<data name="Remove" xml:space="preserve">
|
||||
<value>Remover</value>
|
||||
</data>
|
||||
|
|
@ -988,9 +948,6 @@ Ahora es el software gratuito más utilizado para filtrar en Fortnite.</value>
|
|||
<data name="UnhandledExceptionOccured" xml:space="preserve">
|
||||
<value>Ha ocurrido una excepción: {0}</value>
|
||||
</data>
|
||||
<data name="Update" xml:space="preserve">
|
||||
<value>Actualización</value>
|
||||
</data>
|
||||
<data name="UseGameColors" xml:space="preserve">
|
||||
<value>Usar colores del juego</value>
|
||||
</data>
|
||||
|
|
|
|||
|
|
@ -137,9 +137,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="AddDirectory" xml:space="preserve">
|
||||
<value>Ajouter un Répertoire</value>
|
||||
</data>
|
||||
<data name="AddSeparator" xml:space="preserve">
|
||||
<value>Ajouter un Séparateur</value>
|
||||
</data>
|
||||
<data name="AES" xml:space="preserve">
|
||||
<value>AES</value>
|
||||
<comment>Do not change this</comment>
|
||||
|
|
@ -173,9 +170,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="Assets" xml:space="preserve">
|
||||
<value>Assets</value>
|
||||
</data>
|
||||
<data name="Audio" xml:space="preserve">
|
||||
<value>Audio</value>
|
||||
</data>
|
||||
<data name="AudioDevices" xml:space="preserve">
|
||||
<value>Périphériques Audio</value>
|
||||
</data>
|
||||
|
|
@ -202,9 +196,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="Banner" xml:space="preserve">
|
||||
<value>Bannière</value>
|
||||
</data>
|
||||
<data name="BenBotApi" xml:space="preserve">
|
||||
<value>API BenBot</value>
|
||||
</data>
|
||||
<data name="BugsReport" xml:space="preserve">
|
||||
<value>Signaler un Bug</value>
|
||||
</data>
|
||||
|
|
@ -280,9 +271,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="Design" xml:space="preserve">
|
||||
<value>Design</value>
|
||||
</data>
|
||||
<data name="Difference" xml:space="preserve">
|
||||
<value>Différence</value>
|
||||
</data>
|
||||
<data name="Directories" xml:space="preserve">
|
||||
<value>Répertoires</value>
|
||||
</data>
|
||||
|
|
@ -339,18 +327,12 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="Error" xml:space="preserve">
|
||||
<value>Erreur</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Sortie</value>
|
||||
</data>
|
||||
<data name="Export" xml:space="preserve">
|
||||
<value>Exporter</value>
|
||||
</data>
|
||||
<data name="Extract" xml:space="preserve">
|
||||
<value>Extraire</value>
|
||||
</data>
|
||||
<data name="ExtractDirectory" xml:space="preserve">
|
||||
<value>Extraire le Répertoire</value>
|
||||
</data>
|
||||
<data name="Extraction" xml:space="preserve">
|
||||
<value>Extraction</value>
|
||||
</data>
|
||||
|
|
@ -406,12 +388,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="French" xml:space="preserve">
|
||||
<value>Français</value>
|
||||
</data>
|
||||
<data name="FyiDetails" xml:space="preserve">
|
||||
<value>La langue sélectionnée sera celle utilisée pour la création des icônes</value>
|
||||
</data>
|
||||
<data name="FyiTitle" xml:space="preserve">
|
||||
<value>Pour Information :</value>
|
||||
</data>
|
||||
<data name="Games" xml:space="preserve">
|
||||
<value>Jeux</value>
|
||||
</data>
|
||||
|
|
@ -535,9 +511,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<value>Mo</value>
|
||||
<comment>MegaByte</comment>
|
||||
</data>
|
||||
<data name="Media" xml:space="preserve">
|
||||
<value>Média</value>
|
||||
</data>
|
||||
<data name="Minimalist" xml:space="preserve">
|
||||
<value>Minimaliste</value>
|
||||
<comment>Rarity Design</comment>
|
||||
|
|
@ -617,9 +590,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="PakFiles" xml:space="preserve">
|
||||
<value>Fichiers PAK</value>
|
||||
</data>
|
||||
<data name="PakFilesAutoDetected" xml:space="preserve">
|
||||
<value>Les fichiers PAK de Fortnite ont été détectés automatiquement</value>
|
||||
</data>
|
||||
<data name="ParsingNotSupported" xml:space="preserve">
|
||||
<value>L'analyse des types {0} n'est pas encore prise en charge.</value>
|
||||
</data>
|
||||
|
|
@ -643,10 +613,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="Polish" xml:space="preserve">
|
||||
<value>Polonais</value>
|
||||
</data>
|
||||
<data name="Popup" xml:space="preserve">
|
||||
<value>Contextuel</value>
|
||||
<comment>Rarity Design</comment>
|
||||
</data>
|
||||
<data name="PortugueseBrazil" xml:space="preserve">
|
||||
<value>Portugais (Brésil)</value>
|
||||
</data>
|
||||
|
|
@ -663,9 +629,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="Rarity" xml:space="preserve">
|
||||
<value>Rareté</value>
|
||||
</data>
|
||||
<data name="RateLimited" xml:space="preserve">
|
||||
<value>Limite de Taux Dépassée</value>
|
||||
</data>
|
||||
<data name="RegularExpression" xml:space="preserve">
|
||||
<value>Expression Régulière</value>
|
||||
<comment>Find & Replace Window</comment>
|
||||
|
|
@ -673,9 +636,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="ReloadAesKeysAtLaunch" xml:space="preserve">
|
||||
<value>Recharger les clés AES au lancement</value>
|
||||
</data>
|
||||
<data name="RememberGame" xml:space="preserve">
|
||||
<value>Se souvenir du jeu</value>
|
||||
</data>
|
||||
<data name="Remove" xml:space="preserve">
|
||||
<value>Supprimer</value>
|
||||
</data>
|
||||
|
|
@ -798,9 +758,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="UnhandledExceptionOccured" xml:space="preserve">
|
||||
<value>Une exception non gérée s'est produite: {0}</value>
|
||||
</data>
|
||||
<data name="Update" xml:space="preserve">
|
||||
<value>Mise à Jour</value>
|
||||
</data>
|
||||
<data name="UseGameColors" xml:space="preserve">
|
||||
<value>Utiliser les couleurs du jeu</value>
|
||||
</data>
|
||||
|
|
@ -850,9 +807,6 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="UseDiscordRpc" xml:space="preserve">
|
||||
<value>Utiliser Discord RPC</value>
|
||||
</data>
|
||||
<data name="SaveDirectory" xml:space="preserve">
|
||||
<value>Sauvegarder le Répertoire</value>
|
||||
</data>
|
||||
<data name="CopyImage" xml:space="preserve">
|
||||
<value>Copier l'Image</value>
|
||||
</data>
|
||||
|
|
@ -868,7 +822,4 @@ C'est maintenant le logiciel gratuit le plus utilisé pour leak sur Fortnite.</v
|
|||
<data name="JsonType" xml:space="preserve">
|
||||
<value>Type de JSON</value>
|
||||
</data>
|
||||
<data name="WithPosition" xml:space="preserve">
|
||||
<value>Avec Position</value>
|
||||
</data>
|
||||
</root>
|
||||
|
|
@ -136,9 +136,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="AddDirectory" xml:space="preserve">
|
||||
<value>Aggiungi Directory</value>
|
||||
</data>
|
||||
<data name="AddSeparator" xml:space="preserve">
|
||||
<value>Aggiungi Separatore</value>
|
||||
</data>
|
||||
<data name="AES" xml:space="preserve">
|
||||
<value>AES</value>
|
||||
</data>
|
||||
|
|
@ -169,9 +166,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="Assets" xml:space="preserve">
|
||||
<value>Assets</value>
|
||||
</data>
|
||||
<data name="Audio" xml:space="preserve">
|
||||
<value>Audio</value>
|
||||
</data>
|
||||
<data name="AudioDevices" xml:space="preserve">
|
||||
<value>Periferica Audio</value>
|
||||
</data>
|
||||
|
|
@ -196,9 +190,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="Banner" xml:space="preserve">
|
||||
<value>Banner</value>
|
||||
</data>
|
||||
<data name="BenBotApi" xml:space="preserve">
|
||||
<value>BenBot API</value>
|
||||
</data>
|
||||
<data name="BugsReport" xml:space="preserve">
|
||||
<value>Segnala un bug</value>
|
||||
</data>
|
||||
|
|
@ -268,9 +259,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="Design" xml:space="preserve">
|
||||
<value>Design</value>
|
||||
</data>
|
||||
<data name="Difference" xml:space="preserve">
|
||||
<value>Differenza</value>
|
||||
</data>
|
||||
<data name="Directories" xml:space="preserve">
|
||||
<value>Directories</value>
|
||||
</data>
|
||||
|
|
@ -325,18 +313,12 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="Error" xml:space="preserve">
|
||||
<value>Errore</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Esci</value>
|
||||
</data>
|
||||
<data name="Export" xml:space="preserve">
|
||||
<value>Esporta</value>
|
||||
</data>
|
||||
<data name="Extract" xml:space="preserve">
|
||||
<value>Estrai</value>
|
||||
</data>
|
||||
<data name="ExtractDirectory" xml:space="preserve">
|
||||
<value>Estrai directory</value>
|
||||
</data>
|
||||
<data name="Extraction" xml:space="preserve">
|
||||
<value>Estrazione</value>
|
||||
</data>
|
||||
|
|
@ -388,12 +370,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="French" xml:space="preserve">
|
||||
<value>Francese</value>
|
||||
</data>
|
||||
<data name="FyiDetails" xml:space="preserve">
|
||||
<value>La lingua selezionata è la stessa che sarà utilizzata per la creazione delle icone</value>
|
||||
</data>
|
||||
<data name="FyiTitle" xml:space="preserve">
|
||||
<value>Per tua informazione:</value>
|
||||
</data>
|
||||
<data name="Games" xml:space="preserve">
|
||||
<value>Giochi</value>
|
||||
</data>
|
||||
|
|
@ -511,9 +487,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="MB" xml:space="preserve">
|
||||
<value>MB</value>
|
||||
</data>
|
||||
<data name="Media" xml:space="preserve">
|
||||
<value>Media</value>
|
||||
</data>
|
||||
<data name="Minimalist" xml:space="preserve">
|
||||
<value>Minimalista</value>
|
||||
</data>
|
||||
|
|
@ -589,9 +562,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="PakFiles" xml:space="preserve">
|
||||
<value>Files PAK</value>
|
||||
</data>
|
||||
<data name="PakFilesAutoDetected" xml:space="preserve">
|
||||
<value>I files PAK di Fortnite saranno automaticamente rilevati</value>
|
||||
</data>
|
||||
<data name="ParsingNotSupported" xml:space="preserve">
|
||||
<value>L'analisi dei tipi {0} non è ancora supportata</value>
|
||||
</data>
|
||||
|
|
@ -613,9 +583,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="Polish" xml:space="preserve">
|
||||
<value>Polacco</value>
|
||||
</data>
|
||||
<data name="Popup" xml:space="preserve">
|
||||
<value>Popup</value>
|
||||
</data>
|
||||
<data name="PortugueseBrazil" xml:space="preserve">
|
||||
<value>Portoghese (Brasile)</value>
|
||||
</data>
|
||||
|
|
@ -631,18 +598,12 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="Rarity" xml:space="preserve">
|
||||
<value>Rarità</value>
|
||||
</data>
|
||||
<data name="RateLimited" xml:space="preserve">
|
||||
<value>Limite sorpassato</value>
|
||||
</data>
|
||||
<data name="RegularExpression" xml:space="preserve">
|
||||
<value>Espressione Regolare</value>
|
||||
</data>
|
||||
<data name="ReloadAesKeysAtLaunch" xml:space="preserve">
|
||||
<value>Ricarica le chiavi AES all'avvio</value>
|
||||
</data>
|
||||
<data name="RememberGame" xml:space="preserve">
|
||||
<value>Ricorda gioco</value>
|
||||
</data>
|
||||
<data name="Remove" xml:space="preserve">
|
||||
<value>Rimuovi</value>
|
||||
</data>
|
||||
|
|
@ -754,9 +715,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="UnhandledExceptionOccured" xml:space="preserve">
|
||||
<value>Si è verificato un errore non previsto: {0}</value>
|
||||
</data>
|
||||
<data name="Update" xml:space="preserve">
|
||||
<value>Aggiorna</value>
|
||||
</data>
|
||||
<data name="UseGameColors" xml:space="preserve">
|
||||
<value>Usa i colori di gioco</value>
|
||||
</data>
|
||||
|
|
@ -808,9 +766,6 @@ Col tempo sono state aggiunte nuove funzioni e molti altri utenti hanno comincia
|
|||
<data name="UseDiscordRpc" xml:space="preserve">
|
||||
<value>Usa Discord RPC</value>
|
||||
</data>
|
||||
<data name="SaveDirectory" xml:space="preserve">
|
||||
<value>Salva Directory</value>
|
||||
</data>
|
||||
<data name="CopyImage" xml:space="preserve">
|
||||
<value>Copia Immagine</value>
|
||||
</data>
|
||||
|
|
|
|||
|
|
@ -168,9 +168,6 @@
|
|||
<data name="French" xml:space="preserve">
|
||||
<value>フランス語</value>
|
||||
</data>
|
||||
<data name="BenBotApi" xml:space="preserve">
|
||||
<value>BenBot API</value>
|
||||
</data>
|
||||
<data name="German" xml:space="preserve">
|
||||
<value>ドイツ語</value>
|
||||
</data>
|
||||
|
|
@ -234,9 +231,6 @@
|
|||
<data name="BugsReport" xml:space="preserve">
|
||||
<value>不具合を報告</value>
|
||||
</data>
|
||||
<data name="Update" xml:space="preserve">
|
||||
<value>アップデート</value>
|
||||
</data>
|
||||
<data name="Korean" xml:space="preserve">
|
||||
<value>韓国語</value>
|
||||
</data>
|
||||
|
|
@ -330,9 +324,6 @@
|
|||
<data name="DownloadError" xml:space="preserve">
|
||||
<value>{0}のダウンロード中にエラーが発生しました</value>
|
||||
</data>
|
||||
<data name="FyiDetails" xml:space="preserve">
|
||||
<value>選択した言語はアイコンの作成に使用される言語になります</value>
|
||||
</data>
|
||||
<data name="Initializing" xml:space="preserve">
|
||||
<value>初期化中</value>
|
||||
</data>
|
||||
|
|
@ -345,9 +336,6 @@
|
|||
<data name="ChallengesThemeCreator" xml:space="preserve">
|
||||
<value>チャレンジのテーマクリエイター</value>
|
||||
</data>
|
||||
<data name="Difference" xml:space="preserve">
|
||||
<value>違う</value>
|
||||
</data>
|
||||
<data name="DynamicKeys" xml:space="preserve">
|
||||
<value>ダイナミックキー</value>
|
||||
</data>
|
||||
|
|
@ -505,9 +493,6 @@
|
|||
<data name="AesNotWorking" xml:space="preserve">
|
||||
<value>'{0}'は'{1}'では機能しません</value>
|
||||
</data>
|
||||
<data name="Audio" xml:space="preserve">
|
||||
<value>オーディオ</value>
|
||||
</data>
|
||||
<data name="Asset" xml:space="preserve">
|
||||
<value>アセット</value>
|
||||
</data>
|
||||
|
|
@ -517,9 +502,6 @@
|
|||
<data name="Games" xml:space="preserve">
|
||||
<value>ゲーム</value>
|
||||
</data>
|
||||
<data name="Media" xml:space="preserve">
|
||||
<value>メディア</value>
|
||||
</data>
|
||||
<data name="Clear" xml:space="preserve">
|
||||
<value>クリア</value>
|
||||
</data>
|
||||
|
|
@ -535,9 +517,6 @@
|
|||
<data name="Scale" xml:space="preserve">
|
||||
<value>スケール</value>
|
||||
</data>
|
||||
<data name="Popup" xml:space="preserve">
|
||||
<value>ポップアップ</value>
|
||||
</data>
|
||||
<data name="ParsingNotSupported" xml:space="preserve">
|
||||
<value>{0}タイプの解析はまだサポートされていません。</value>
|
||||
</data>
|
||||
|
|
@ -550,9 +529,6 @@
|
|||
<data name="Analyzing" xml:space="preserve">
|
||||
<value>{0}を分析しています</value>
|
||||
</data>
|
||||
<data name="AddSeparator" xml:space="preserve">
|
||||
<value>セパレータを追加</value>
|
||||
</data>
|
||||
<data name="AudioPlayer" xml:space="preserve">
|
||||
<value>オーディオプレイヤー</value>
|
||||
</data>
|
||||
|
|
@ -571,9 +547,6 @@
|
|||
<data name="Disabled" xml:space="preserve">
|
||||
<value>無効</value>
|
||||
</data>
|
||||
<data name="RateLimited" xml:space="preserve">
|
||||
<value>レート制限を超えました</value>
|
||||
</data>
|
||||
<data name="Japanese" xml:space="preserve">
|
||||
<value>日本語</value>
|
||||
</data>
|
||||
|
|
@ -583,9 +556,6 @@
|
|||
<data name="CustomBannerNotFound" xml:space="preserve">
|
||||
<value>ファイルが見つかりません、チャレンジのカスタムテーマは無効です</value>
|
||||
</data>
|
||||
<data name="PakFilesAutoDetected" xml:space="preserve">
|
||||
<value>自動検出されたフォートナイト PAKファイル</value>
|
||||
</data>
|
||||
<data name="IconWatermarkNotFound" xml:space="preserve">
|
||||
<value>ファイルが見つかりません、透かしは無効になっています</value>
|
||||
</data>
|
||||
|
|
@ -601,9 +571,6 @@
|
|||
<data name="Secondary" xml:space="preserve">
|
||||
<value>セカンダリー</value>
|
||||
</data>
|
||||
<data name="ExtractDirectory" xml:space="preserve">
|
||||
<value>ディレクトリを抽出</value>
|
||||
</data>
|
||||
<data name="Russian" xml:space="preserve">
|
||||
<value>ロシア語</value>
|
||||
</data>
|
||||
|
|
@ -625,9 +592,6 @@
|
|||
<data name="Changelog" xml:space="preserve">
|
||||
<value>変更ログ</value>
|
||||
</data>
|
||||
<data name="FyiTitle" xml:space="preserve">
|
||||
<value>ご参考までに:</value>
|
||||
</data>
|
||||
<data name="LoadingMode" xml:space="preserve">
|
||||
<value>読み込みモード</value>
|
||||
</data>
|
||||
|
|
@ -643,9 +607,6 @@
|
|||
<data name="Opacity" xml:space="preserve">
|
||||
<value>不透明度</value>
|
||||
</data>
|
||||
<data name="RememberGame" xml:space="preserve">
|
||||
<value>ゲームを覚える</value>
|
||||
</data>
|
||||
<data name="SearchIn" xml:space="preserve">
|
||||
<value>で検索:</value>
|
||||
</data>
|
||||
|
|
@ -757,9 +718,6 @@
|
|||
<data name="Waiting" xml:space="preserve">
|
||||
<value>待つ</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>終了</value>
|
||||
</data>
|
||||
<data name="Auto" xml:space="preserve">
|
||||
<value>自動</value>
|
||||
</data>
|
||||
|
|
|
|||
|
|
@ -137,9 +137,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="AddDirectory" xml:space="preserve">
|
||||
<value>Add Directory</value>
|
||||
</data>
|
||||
<data name="AddSeparator" xml:space="preserve">
|
||||
<value>Add Separator</value>
|
||||
</data>
|
||||
<data name="AES" xml:space="preserve">
|
||||
<value>AES</value>
|
||||
<comment>Do not change this</comment>
|
||||
|
|
@ -186,9 +183,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Assets" xml:space="preserve">
|
||||
<value>Assets</value>
|
||||
</data>
|
||||
<data name="Audio" xml:space="preserve">
|
||||
<value>Audio</value>
|
||||
</data>
|
||||
<data name="AudioDevices" xml:space="preserve">
|
||||
<value>Audio Devices</value>
|
||||
</data>
|
||||
|
|
@ -218,9 +212,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Banner" xml:space="preserve">
|
||||
<value>Banner</value>
|
||||
</data>
|
||||
<data name="BenBotApi" xml:space="preserve">
|
||||
<value>BenBot API</value>
|
||||
</data>
|
||||
<data name="bug" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\bug.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
|
@ -333,9 +324,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Design" xml:space="preserve">
|
||||
<value>Design</value>
|
||||
</data>
|
||||
<data name="Difference" xml:space="preserve">
|
||||
<value>Difference</value>
|
||||
</data>
|
||||
<data name="Directories" xml:space="preserve">
|
||||
<value>Directories</value>
|
||||
</data>
|
||||
|
|
@ -416,18 +404,12 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Error" xml:space="preserve">
|
||||
<value>Error</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Exit</value>
|
||||
</data>
|
||||
<data name="Export" xml:space="preserve">
|
||||
<value>Export</value>
|
||||
</data>
|
||||
<data name="Extract" xml:space="preserve">
|
||||
<value>Extract</value>
|
||||
</data>
|
||||
<data name="ExtractDirectory" xml:space="preserve">
|
||||
<value>Extract Directory</value>
|
||||
</data>
|
||||
<data name="Extraction" xml:space="preserve">
|
||||
<value>Extraction</value>
|
||||
</data>
|
||||
|
|
@ -510,12 +492,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="French" xml:space="preserve">
|
||||
<value>French</value>
|
||||
</data>
|
||||
<data name="FyiDetails" xml:space="preserve">
|
||||
<value>The selected language will be the one used for icons creation</value>
|
||||
</data>
|
||||
<data name="FyiTitle" xml:space="preserve">
|
||||
<value>FYI:</value>
|
||||
</data>
|
||||
<data name="gamepad_variant" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\gamepad-variant.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
|
@ -672,9 +648,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<value>MB</value>
|
||||
<comment>MegaByte</comment>
|
||||
</data>
|
||||
<data name="Media" xml:space="preserve">
|
||||
<value>Media</value>
|
||||
</data>
|
||||
<data name="Minimalist" xml:space="preserve">
|
||||
<value>Minimalist</value>
|
||||
<comment>Rarity Design</comment>
|
||||
|
|
@ -754,9 +727,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="PakFiles" xml:space="preserve">
|
||||
<value>PAK Files</value>
|
||||
</data>
|
||||
<data name="PakFilesAutoDetected" xml:space="preserve">
|
||||
<value>Fortnite PAK files auto-detected</value>
|
||||
</data>
|
||||
<data name="ParsingNotSupported" xml:space="preserve">
|
||||
<value>Parsing of {0} types isn't supported yet.</value>
|
||||
</data>
|
||||
|
|
@ -795,10 +765,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Polish" xml:space="preserve">
|
||||
<value>Polish</value>
|
||||
</data>
|
||||
<data name="Popup" xml:space="preserve">
|
||||
<value>Popup</value>
|
||||
<comment>Rarity Design</comment>
|
||||
</data>
|
||||
<data name="PortugueseBrazil" xml:space="preserve">
|
||||
<value>Portuguese (Brazil)</value>
|
||||
</data>
|
||||
|
|
@ -821,9 +787,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="Rarity" xml:space="preserve">
|
||||
<value>Rarity</value>
|
||||
</data>
|
||||
<data name="RateLimited" xml:space="preserve">
|
||||
<value>Rate Limit Exceeded</value>
|
||||
</data>
|
||||
<data name="refresh" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\refresh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
|
@ -834,9 +797,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="ReloadAesKeysAtLaunch" xml:space="preserve">
|
||||
<value>Reload AES keys at launch</value>
|
||||
</data>
|
||||
<data name="RememberGame" xml:space="preserve">
|
||||
<value>Remember game</value>
|
||||
</data>
|
||||
<data name="Remove" xml:space="preserve">
|
||||
<value>Remove</value>
|
||||
</data>
|
||||
|
|
@ -976,12 +936,9 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
</data>
|
||||
<data name="TranslatorsFDetails" xml:space="preserve">
|
||||
<value>• EN: Asval#2291 • FR: Asval#2291
|
||||
• DE: FunGames#6822 • IT: Angry Cat#5581
|
||||
• DE: FunGames#6822 • IT: arianaglande#5581
|
||||
• ES: Maiky.M#9879 • AR: PsychoPast#0001
|
||||
• JA: FNJPNews#7820 • KO:
|
||||
• PL: • PT-BR:
|
||||
• RU: Seawod#4311 • TR:
|
||||
• ZH-CN: • ZH-Hant:</value>
|
||||
• JA: FNJPNews#7820 • RU: Seawod#4311</value>
|
||||
<comment>Do not translate</comment>
|
||||
</data>
|
||||
<data name="Turkish" xml:space="preserve">
|
||||
|
|
@ -1011,9 +968,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="UnhandledExceptionOccured" xml:space="preserve">
|
||||
<value>An unhandled exception occurred: {0}</value>
|
||||
</data>
|
||||
<data name="Update" xml:space="preserve">
|
||||
<value>Update</value>
|
||||
</data>
|
||||
<data name="UseGameColors" xml:space="preserve">
|
||||
<value>Use game colors</value>
|
||||
</data>
|
||||
|
|
@ -1085,9 +1039,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<value>Use Discord RPC</value>
|
||||
<comment>Should Discord Rich Presence be enabled?</comment>
|
||||
</data>
|
||||
<data name="SaveDirectory" xml:space="preserve">
|
||||
<value>Save Directory</value>
|
||||
</data>
|
||||
<data name="CopyImage" xml:space="preserve">
|
||||
<value>Copy Image</value>
|
||||
</data>
|
||||
|
|
@ -1103,9 +1054,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<data name="EIconDesign_NoBackground" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\EIconDesign_NoBackground.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ExportDirectory" xml:space="preserve">
|
||||
<value>Export Directory</value>
|
||||
</data>
|
||||
<data name="borderlands3" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\borderlands3.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
|
|
@ -1113,6 +1061,6 @@ It's now the most used free software to leak on Fortnite.</value>
|
|||
<value>JSON Type</value>
|
||||
</data>
|
||||
<data name="WithPosition" xml:space="preserve">
|
||||
<value>With Position</value>
|
||||
<value>Position / Value</value>
|
||||
</data>
|
||||
</root>
|
||||
|
|
@ -147,9 +147,6 @@
|
|||
<data name="Arabic" xml:space="preserve">
|
||||
<value>Арабский</value>
|
||||
</data>
|
||||
<data name="Audio" xml:space="preserve">
|
||||
<value>Аудио</value>
|
||||
</data>
|
||||
<data name="AudioDevices" xml:space="preserve">
|
||||
<value>Звуковые устройства</value>
|
||||
</data>
|
||||
|
|
@ -168,9 +165,6 @@
|
|||
<data name="Banner" xml:space="preserve">
|
||||
<value>Баннер</value>
|
||||
</data>
|
||||
<data name="BenBotApi" xml:space="preserve">
|
||||
<value>BenBot API</value>
|
||||
</data>
|
||||
<data name="BugsReport" xml:space="preserve">
|
||||
<value>Сообщить об ошибке</value>
|
||||
</data>
|
||||
|
|
@ -279,9 +273,6 @@
|
|||
<data name="Error" xml:space="preserve">
|
||||
<value>Ошибка</value>
|
||||
</data>
|
||||
<data name="Exit" xml:space="preserve">
|
||||
<value>Выход</value>
|
||||
</data>
|
||||
<data name="Export" xml:space="preserve">
|
||||
<value>Экспортировать</value>
|
||||
</data>
|
||||
|
|
@ -327,9 +318,6 @@
|
|||
<data name="French" xml:space="preserve">
|
||||
<value>Французкий</value>
|
||||
</data>
|
||||
<data name="FyiDetails" xml:space="preserve">
|
||||
<value>Выбранный язык будет использоваться во время создания иконок</value>
|
||||
</data>
|
||||
<data name="Games" xml:space="preserve">
|
||||
<value>Игры</value>
|
||||
</data>
|
||||
|
|
@ -420,9 +408,6 @@
|
|||
<data name="MB" xml:space="preserve">
|
||||
<value>MB</value>
|
||||
</data>
|
||||
<data name="Media" xml:space="preserve">
|
||||
<value>Медиафайлы</value>
|
||||
</data>
|
||||
<data name="Minimalist" xml:space="preserve">
|
||||
<value>Минималистичный</value>
|
||||
</data>
|
||||
|
|
@ -477,9 +462,6 @@
|
|||
<data name="PakFiles" xml:space="preserve">
|
||||
<value>Файлы паков</value>
|
||||
</data>
|
||||
<data name="PakFilesAutoDetected" xml:space="preserve">
|
||||
<value>Файлы паков Фортнайта автоматически найдены</value>
|
||||
</data>
|
||||
<data name="PathAutoDetected" xml:space="preserve">
|
||||
<value>.PAK файлы обнаружены автоматически</value>
|
||||
</data>
|
||||
|
|
@ -504,9 +486,6 @@
|
|||
<data name="ReloadAesKeysAtLaunch" xml:space="preserve">
|
||||
<value>Обновлять ключи AES во время запуска программы</value>
|
||||
</data>
|
||||
<data name="RememberGame" xml:space="preserve">
|
||||
<value>Запомнить игру</value>
|
||||
</data>
|
||||
<data name="Remove" xml:space="preserve">
|
||||
<value>Удалить</value>
|
||||
</data>
|
||||
|
|
@ -597,9 +576,6 @@
|
|||
<data name="Turkish" xml:space="preserve">
|
||||
<value>Турецкий</value>
|
||||
</data>
|
||||
<data name="Update" xml:space="preserve">
|
||||
<value>Обновить</value>
|
||||
</data>
|
||||
<data name="UpdateAvailable" xml:space="preserve">
|
||||
<value>Доступно обновление</value>
|
||||
</data>
|
||||
|
|
@ -645,9 +621,6 @@
|
|||
<data name="AboutToDownload" xml:space="preserve">
|
||||
<value>Вы собираетесь загрузить {0}, размер которого {1}</value>
|
||||
</data>
|
||||
<data name="AddSeparator" xml:space="preserve">
|
||||
<value>Добавить перегородку</value>
|
||||
</data>
|
||||
<data name="Analyzing" xml:space="preserve">
|
||||
<value>Анализ {0}</value>
|
||||
</data>
|
||||
|
|
@ -672,9 +645,6 @@
|
|||
<data name="ContributorsF" xml:space="preserve">
|
||||
<value>Помощники</value>
|
||||
</data>
|
||||
<data name="Difference" xml:space="preserve">
|
||||
<value>Отличающиеся</value>
|
||||
</data>
|
||||
<data name="DirectoryPath" xml:space="preserve">
|
||||
<value>Путь директории</value>
|
||||
</data>
|
||||
|
|
@ -687,9 +657,6 @@
|
|||
<data name="Extract" xml:space="preserve">
|
||||
<value>Извлечь</value>
|
||||
</data>
|
||||
<data name="ExtractDirectory" xml:space="preserve">
|
||||
<value>Открыть директорию</value>
|
||||
</data>
|
||||
<data name="Extraction" xml:space="preserve">
|
||||
<value>Извлечение</value>
|
||||
</data>
|
||||
|
|
@ -747,9 +714,6 @@
|
|||
<data name="PathChangedRestart" xml:space="preserve">
|
||||
<value>FModel требует перезапуска, потому что вы указали новый путь</value>
|
||||
</data>
|
||||
<data name="Popup" xml:space="preserve">
|
||||
<value>Всплывающее</value>
|
||||
</data>
|
||||
<data name="Processing" xml:space="preserve">
|
||||
<value>Обработка</value>
|
||||
</data>
|
||||
|
|
@ -774,18 +738,12 @@
|
|||
<data name="UseDiscordRpc" xml:space="preserve">
|
||||
<value>Использовать Discord RPC</value>
|
||||
</data>
|
||||
<data name="SaveDirectory" xml:space="preserve">
|
||||
<value>Сохранить дерикторию</value>
|
||||
</data>
|
||||
<data name="NoImageToCopy" xml:space="preserve">
|
||||
<value>Нет изображения для копирования</value>
|
||||
</data>
|
||||
<data name="CopyImage" xml:space="preserve">
|
||||
<value>Скопировать изображение</value>
|
||||
</data>
|
||||
<data name="FyiTitle" xml:space="preserve">
|
||||
<value>Для Вашей информации:</value>
|
||||
</data>
|
||||
<data name="UseFEnglish" xml:space="preserve">
|
||||
<value>Использовать FModel на Английском</value>
|
||||
</data>
|
||||
|
|
|
|||
24
FModel/Properties/Settings.Designer.cs
generated
24
FModel/Properties/Settings.Designer.cs
generated
|
|
@ -287,6 +287,18 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
public long ProgramLanguage {
|
||||
get {
|
||||
return ((long)(this["ProgramLanguage"]));
|
||||
}
|
||||
set {
|
||||
this["ProgramLanguage"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("0")]
|
||||
|
|
@ -323,18 +335,6 @@ namespace FModel.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool UseEnglish {
|
||||
get {
|
||||
return ((bool)(this["UseEnglish"]));
|
||||
}
|
||||
set {
|
||||
this["UseEnglish"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
|
|
|
|||
|
|
@ -68,6 +68,9 @@
|
|||
<Setting Name="CustomGoTos" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">[{"Header":"Cosmetics","DirectoryPath":"FortniteGame/Content/Athena/Items/Cosmetics/"},{"Header":"Challenges","DirectoryPath":"FortniteGame/Content/Athena/Items/ChallengeBundles/"},{"Header":"Emotes [Audio]","DirectoryPath":"FortniteGame/Content/Athena/Sounds/Emotes/"},{"Header":"Music Packs [Audio]","DirectoryPath":"FortniteGame/Content/Athena/Sounds/MusicPacks/"},{"Header":"Weapons","DirectoryPath":"FortniteGame/Content/Athena/Items/Weapons/"},{"Header":"Strings","DirectoryPath":"FortniteGame/Content/Localization/"}]</Value>
|
||||
</Setting>
|
||||
<Setting Name="ProgramLanguage" Type="System.Int64" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="AssetsLanguage" Type="System.Int64" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
|
|
@ -77,9 +80,6 @@
|
|||
<Setting Name="AssetsIconDesign" Type="System.Int64" Scope="User">
|
||||
<Value Profile="(Default)">0</Value>
|
||||
</Setting>
|
||||
<Setting Name="UseEnglish" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="UseGameColors" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ namespace FModel.Utils
|
|||
// Image Creator
|
||||
if (Globals.Game.ActualGame == EGame.Fortnite && TryDrawFortniteIcon(entry.Name, p.ExportTypes[0].String, p.Exports[0]))
|
||||
return p;
|
||||
else if (Globals.Game.ActualGame == EGame.Valorant && TryDrawValorantIcon(entry.Name, p.Exports.Length > 1 ? p.Exports[1] : p.Exports[0]))
|
||||
else if (Globals.Game.ActualGame == EGame.Valorant && TryDrawValorantIcon(entry.Name, p.ExportTypes.Length > 1 ? p.ExportTypes[1].String : p.ExportTypes[0].String, p.Exports.Length > 1 ? p.Exports[1] : p.Exports[0]))
|
||||
return p;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,8 +2,47 @@
|
|||
|
||||
namespace FModel.ViewModels.ComboBox
|
||||
{
|
||||
static class ProgramLang
|
||||
{
|
||||
private static readonly string _Default = "en-US";
|
||||
private static readonly string _French = "fr-FR";
|
||||
private static readonly string _German = "de-DE";
|
||||
private static readonly string _Italian = "it-IT";
|
||||
private static readonly string _Spanish = "es";
|
||||
private static readonly string _Arabic = "ar";
|
||||
private static readonly string _Japanese = "ja-JP";
|
||||
private static readonly string _Russian = "ru-RU";
|
||||
|
||||
public static string GetProgramLang()
|
||||
{
|
||||
return Properties.Settings.Default.ProgramLanguage switch
|
||||
{
|
||||
7 => _Russian,
|
||||
6 => _Japanese,
|
||||
5 => _Arabic,
|
||||
4 => _Spanish,
|
||||
3 => _Italian,
|
||||
2 => _German,
|
||||
1 => _French,
|
||||
_ => _Default
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
static class ComboBoxVm
|
||||
{
|
||||
public static ObservableCollection<ComboBoxViewModel> programLanguageCbViewModel = new ObservableCollection<ComboBoxViewModel>
|
||||
{
|
||||
new ComboBoxViewModel { Id = 0, Content = Properties.Resources.English },
|
||||
new ComboBoxViewModel { Id = 1, Content = Properties.Resources.French },
|
||||
new ComboBoxViewModel { Id = 2, Content = Properties.Resources.German },
|
||||
new ComboBoxViewModel { Id = 3, Content = Properties.Resources.Italian },
|
||||
new ComboBoxViewModel { Id = 4, Content = Properties.Resources.Spanish },
|
||||
new ComboBoxViewModel { Id = 5, Content = Properties.Resources.Arabic },
|
||||
new ComboBoxViewModel { Id = 6, Content = Properties.Resources.Japanese },
|
||||
new ComboBoxViewModel { Id = 7, Content = Properties.Resources.Russian }
|
||||
};
|
||||
|
||||
public static ObservableCollection<ComboBoxViewModel> languageCbViewModel = new ObservableCollection<ComboBoxViewModel>
|
||||
{
|
||||
new ComboBoxViewModel { Id = 0, Content = Properties.Resources.English, Property = ELanguage.English },
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
using FModel.Creator;
|
||||
using FModel.Creator.Bundles;
|
||||
using FModel.Creator.Bundles;
|
||||
using FModel.Creator.Fortnite;
|
||||
using FModel.Logger;
|
||||
using FModel.Utils;
|
||||
using FModel.Windows.ColorPicker;
|
||||
using Microsoft.Win32;
|
||||
using SkiaSharp;
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="10"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="10"/>
|
||||
|
|
@ -26,7 +27,42 @@
|
|||
<ColumnDefinition Width="10"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<GroupBox Header="{x:Static properties:Resources.PakFiles}" Grid.Row="1" Grid.Column="1" BorderBrush="#7F748198" VerticalAlignment="Top">
|
||||
<GroupBox Header="FModel" Grid.Row="1" Grid.Column="1" BorderBrush="#7F748198" VerticalAlignment="Top">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="5"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="5"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="10"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Grid.Row="1" Grid.Column="1"
|
||||
Content="{x:Static properties:Resources.Language}"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
||||
<ComboBox x:Name="FLanguages_CbBox" Grid.Row="1" Grid.Column="2"
|
||||
BorderBrush="#7F748198" Background="#FF333C46"
|
||||
Height="20" VerticalAlignment="Top" Margin="0,3,0,0"/>
|
||||
|
||||
<Grid Grid.Row="1" Grid.Column="4" Grid.RowSpan="3">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<CheckBox Grid.Row="0" Margin="5,7,5,5"
|
||||
Content="{x:Static properties:Resources.UseDiscordRpc}"
|
||||
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=UseDiscordRpc, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Header="{x:Static properties:Resources.PakFiles}" Grid.Row="2" Grid.Column="1" BorderBrush="#7F748198" VerticalAlignment="Top">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="5"/>
|
||||
|
|
@ -51,7 +87,7 @@
|
|||
</Grid>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Header="{x:Static properties:Resources.Extraction}" Grid.Row="2" Grid.Column="1" BorderBrush="#7F748198" VerticalAlignment="Top">
|
||||
<GroupBox Header="{x:Static properties:Resources.Extraction}" Grid.Row="3" Grid.Column="1" BorderBrush="#7F748198" VerticalAlignment="Top">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="5"/>
|
||||
|
|
@ -76,7 +112,7 @@
|
|||
</Grid>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Header="{x:Static properties:Resources.Assets}" Grid.Row="3" Grid.Column="1" BorderBrush="#7F748198" VerticalAlignment="Top">
|
||||
<GroupBox Header="{x:Static properties:Resources.Assets}" Grid.Row="4" Grid.Column="1" BorderBrush="#7F748198" VerticalAlignment="Top">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="5"/>
|
||||
|
|
@ -111,26 +147,19 @@
|
|||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<CheckBox Grid.Row="0" Margin="5"
|
||||
<CheckBox Grid.Row="0" Margin="5,6.5,5,5"
|
||||
Content="{x:Static properties:Resources.ReloadAesKeysAtLaunch}"
|
||||
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=ReloadAesKeys, Mode=TwoWay}"/>
|
||||
<CheckBox Grid.Row="1" Margin="5"
|
||||
<CheckBox Grid.Row="1" Margin="5,6.5,5,5"
|
||||
Content="{x:Static properties:Resources.AutoOpenSounds}"
|
||||
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=AutoOpenSounds, Mode=TwoWay}"/>
|
||||
<CheckBox Grid.Row="2" Margin="5" Content="{x:Static properties:Resources.UseFEnglish}"
|
||||
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=UseEnglish, Mode=TwoWay}"/>
|
||||
<CheckBox Grid.Row="3" Margin="5"
|
||||
Content="{x:Static properties:Resources.UseDiscordRpc}"
|
||||
IsChecked="{Binding Source={x:Static properties:Settings.Default}, Path=UseDiscordRpc, Mode=TwoWay}"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
|
||||
<Button Grid.Row="5" Grid.Column="1"
|
||||
<Button Grid.Row="6" Grid.Column="1"
|
||||
Content="{x:Static properties:Resources.OK}"
|
||||
HorizontalAlignment="Right" Width="80" Click="OnClick"/>
|
||||
</Grid>
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ namespace FModel.Windows.Settings
|
|||
private string _inputPath;
|
||||
private string _outputPath;
|
||||
private bool _useDiscordRpc;
|
||||
private bool _useEnglish;
|
||||
|
||||
public General()
|
||||
{
|
||||
|
|
@ -37,7 +36,8 @@ namespace FModel.Windows.Settings
|
|||
_inputPath = Properties.Settings.Default.PakPath;
|
||||
_outputPath = Properties.Settings.Default.OutputPath;
|
||||
_useDiscordRpc = Properties.Settings.Default.UseDiscordRpc;
|
||||
_useEnglish = Properties.Settings.Default.UseEnglish;
|
||||
FLanguages_CbBox.ItemsSource = ComboBoxVm.programLanguageCbViewModel;
|
||||
FLanguages_CbBox.SelectedItem = ComboBoxVm.programLanguageCbViewModel.Where(x => x.Id == Properties.Settings.Default.ProgramLanguage).FirstOrDefault();
|
||||
Languages_CbBox.ItemsSource = ComboBoxVm.languageCbViewModel;
|
||||
Languages_CbBox.SelectedItem = ComboBoxVm.languageCbViewModel.Where(x => x.Id == Properties.Settings.Default.AssetsLanguage).FirstOrDefault();
|
||||
Json_CbBox.ItemsSource = ComboBoxVm.jsonCbViewModel;
|
||||
|
|
@ -62,8 +62,9 @@ namespace FModel.Windows.Settings
|
|||
|
||||
if (!_inputPath.Equals(Properties.Settings.Default.PakPath) ||
|
||||
!_outputPath.Equals(Properties.Settings.Default.OutputPath) ||
|
||||
_useEnglish != Properties.Settings.Default.UseEnglish)
|
||||
Properties.Settings.Default.ProgramLanguage != FLanguages_CbBox.SelectedIndex)
|
||||
{
|
||||
Properties.Settings.Default.ProgramLanguage = FLanguages_CbBox.SelectedIndex;
|
||||
DarkMessageBoxHelper.Show(Properties.Resources.PathChangedRestart, Properties.Resources.PathChanged, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
DebugHelper.WriteLine("{0} {1} {2}", "[FModel]", "[Restarting]", "Path(s) changed");
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user