diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj
index 73c200c7..9c5804a3 100644
--- a/FModel/FModel.csproj
+++ b/FModel/FModel.csproj
@@ -136,7 +136,6 @@
-
@@ -242,10 +241,10 @@
-
+
Always
-
+
Always
diff --git a/FModel/Forms/Settings.cs b/FModel/Forms/Settings.cs
index cbacdf86..29e88b0c 100644
--- a/FModel/Forms/Settings.cs
+++ b/FModel/Forms/Settings.cs
@@ -118,6 +118,11 @@ namespace FModel.Forms
Properties.Settings.Default.IconLanguage = comboBox1.SelectedItem.ToString();
Properties.Settings.Default.Save(); //SAVE
+
+ if (ThePak.AllpaksDictionary != null)
+ {
+ LoadLocRes.LoadMySelectedLocRes(Properties.Settings.Default.IconLanguage);
+ }
Close();
}
diff --git a/FModel/MainWindow.cs b/FModel/MainWindow.cs
index 62c4cca0..b4cb252f 100644
--- a/FModel/MainWindow.cs
+++ b/FModel/MainWindow.cs
@@ -372,6 +372,7 @@ namespace FModel
ThePak.CurrentUsedPak = null;
ThePak.CurrentUsedPakGuid = null;
}
+ LoadLocRes.LoadMySelectedLocRes(Settings.Default.IconLanguage);
UpdateConsole("Building tree, please wait...", Color.FromArgb(255, 244, 132, 66), "Loading");
}
private void TreeParsePath(TreeNodeCollection nodeList, string path) //https://social.msdn.microsoft.com/Forums/en-US/c75c1804-6933-40ba-b17a-0e36ae8bcbb5/how-to-create-a-tree-view-with-full-paths?forum=csharplanguage
@@ -1266,7 +1267,7 @@ namespace FModel
DrawText.DrawTexts(theItem, g, specialMode);
- UpdateConsole(theItem.DisplayName, Color.FromArgb(255, 66, 244, 66), "Success");
+ UpdateConsole(theItem.DisplayName.SourceString, Color.FromArgb(255, 66, 244, 66), "Success");
if (autoSaveImagesToolStripMenuItem.Checked || updateModeToolStripMenuItem.Checked)
{
bmp.Save(App.DefaultOutputPath + "\\Icons\\" + ThePak.CurrentUsedItem + ".png", ImageFormat.Png);
@@ -1354,7 +1355,7 @@ namespace FModel
}
}
- UpdateConsole(theItem.DisplayName, Color.FromArgb(255, 66, 244, 66), "Success");
+ UpdateConsole(theItem.DisplayName.SourceString, Color.FromArgb(255, 66, 244, 66), "Success");
if (autoSaveImagesToolStripMenuItem.Checked || updateModeToolStripMenuItem.Checked)
{
Invoke(new Action(() =>
diff --git a/FModel/Methods/ChallengeGenerator/BundleDesign.cs b/FModel/Methods/ChallengeGenerator/BundleDesign.cs
index b7c0d5cf..284d5b6b 100644
--- a/FModel/Methods/ChallengeGenerator/BundleDesign.cs
+++ b/FModel/Methods/ChallengeGenerator/BundleDesign.cs
@@ -154,13 +154,49 @@ namespace FModel
}
private static void drawCompletionText(string count)
{
+ string all = string.Empty;
+ string any = string.Empty;
+ switch (Settings.Default.IconLanguage)
+ {
+ case "English":
+ all = "Complete ALL CHALLENGES to earn the reward item";
+ any = "Complete ANY " + count + " CHALLENGES to earn the reward item";
+ goto default;
+ case "French":
+ all = "Terminez CHACUN DES DÉFIS pour gagner la récompense";
+ any = "Terminez " + count + " DES DÉFIS pour gagner la récompense";
+ goto default;
+ case "German":
+ all = "Schließe ALLE HERAUSFORDERUNGEN ab, um die Belohnung zu verdienen";
+ any = "Schließe " + count + " HERAUSFORDERUNGEN ab, um die Belohnung zu verdienen";
+ goto default;
+ case "Italian":
+ all = "Completa TUTTE LE SFIDE per ottenere l'oggetto in ricompensa";
+ any = "Completa " + count + " SFIDE QUALSIASI per ottenere l'oggetto ricompensa";
+ goto default;
+ case "Spanish":
+ all = "Completa LOS DESAFÍOS para conseguir el objeto de recompensa";
+ any = "Completa " + count + " DE LOS DESAFÍOS para conseguir el objeto de recompensa";
+ goto default;
+ default:
+ if (count == "-1")
+ {
+ toDrawOn.DrawString(all, new Font(FontUtilities.pfc.Families[1], 50), new SolidBrush(Color.White), new Point(100, theY + 22));
+ }
+ else
+ {
+ toDrawOn.DrawString(any, new Font(FontUtilities.pfc.Families[1], 50), new SolidBrush(Color.White), new Point(100, theY + 22));
+ }
+ break;
+ }
+
if (count == "-1")
{
- toDrawOn.DrawString("Complete ALL CHALLENGES to earn the reward item", new Font(FontUtilities.pfc.Families[1], 50), new SolidBrush(Color.White), new Point(100, theY + 22));
+ toDrawOn.DrawString(all, new Font(FontUtilities.pfc.Families[1], 50), new SolidBrush(Color.White), new Point(100, theY + 22));
}
else
{
- toDrawOn.DrawString("Complete ANY " + count + " CHALLENGES to earn the reward item", new Font(FontUtilities.pfc.Families[1], 50), new SolidBrush(Color.White), new Point(100, theY + 22));
+ toDrawOn.DrawString(any, new Font(FontUtilities.pfc.Families[1], 50), new SolidBrush(Color.White), new Point(100, theY + 22));
}
}
@@ -170,8 +206,25 @@ namespace FModel
///
public static void drawWatermark(Bitmap myBitmap)
{
- toDrawOn.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 0, 0)), new Rectangle(0, theY + 240, myBitmap.Width, 40));
- toDrawOn.DrawString(myItem.DisplayName + " Generated using FModel & JohnWickParse - " + DateTime.Now.ToString("dd/MM/yyyy"), new Font(FontUtilities.pfc.Families[0], 20), new SolidBrush(Color.FromArgb(150, 255, 255, 255)), new Point(myBitmap.Width / 2, theY + 250), FontUtilities.centeredString);
+ if (LoadLocRes.myLocRes != null && Settings.Default.IconLanguage != "English")
+ {
+ string text = SearchResource.getTranslatedText(myItem.DisplayName.Key);
+ if (!string.IsNullOrEmpty(text))
+ {
+ toDrawOn.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 0, 0)), new Rectangle(0, theY + 240, myBitmap.Width, 40));
+ toDrawOn.DrawString(text + " Generated using FModel & JohnWickParse - " + DateTime.Now.ToString("dd/MM/yyyy"), new Font(FontUtilities.pfc.Families[0], 20), new SolidBrush(Color.FromArgb(150, 255, 255, 255)), new Point(myBitmap.Width / 2, theY + 250), FontUtilities.centeredString);
+ }
+ else
+ {
+ toDrawOn.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 0, 0)), new Rectangle(0, theY + 240, myBitmap.Width, 40));
+ toDrawOn.DrawString(myItem.DisplayName.SourceString + " Generated using FModel & JohnWickParse - " + DateTime.Now.ToString("dd/MM/yyyy"), new Font(FontUtilities.pfc.Families[0], 20), new SolidBrush(Color.FromArgb(150, 255, 255, 255)), new Point(myBitmap.Width / 2, theY + 250), FontUtilities.centeredString);
+ }
+ }
+ else
+ {
+ toDrawOn.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 0, 0)), new Rectangle(0, theY + 240, myBitmap.Width, 40));
+ toDrawOn.DrawString(myItem.DisplayName.SourceString + " Generated using FModel & JohnWickParse - " + DateTime.Now.ToString("dd/MM/yyyy"), new Font(FontUtilities.pfc.Families[0], 20), new SolidBrush(Color.FromArgb(150, 255, 255, 255)), new Point(myBitmap.Width / 2, theY + 250), FontUtilities.centeredString);
+ }
}
private static void drawForbyteReward()
diff --git a/FModel/Methods/ChallengeGenerator/BundleInfos.cs b/FModel/Methods/ChallengeGenerator/BundleInfos.cs
index 930984eb..37e7eed7 100644
--- a/FModel/Methods/ChallengeGenerator/BundleInfos.cs
+++ b/FModel/Methods/ChallengeGenerator/BundleInfos.cs
@@ -34,7 +34,16 @@ namespace FModel
}
public static string getBundleDisplayName(ItemsIdParser theItem)
{
- return theItem.DisplayName.ToUpper();
+ if (LoadLocRes.myLocRes != null && Properties.Settings.Default.IconLanguage != "English")
+ {
+ string text = SearchResource.getTranslatedText(theItem.DisplayName.Key);
+ if (!string.IsNullOrEmpty(text))
+ {
+ return text.ToUpper();
+ }
+ else { return theItem.DisplayName.SourceString.ToUpper(); }
+ }
+ else { return theItem.DisplayName.SourceString.ToUpper(); }
}
public static string getLastFolder(string pathToExtractedBundle)
{
@@ -93,11 +102,18 @@ namespace FModel
long oldCount = 0;
for (int p = 0; p < questParser[x].Objectives.Length; p++)
{
- string newQuest = questParser[x].Objectives[p].Description;
+ string newQuest;
+ if (LoadLocRes.myLocRes != null && Properties.Settings.Default.IconLanguage != "English")
+ {
+ newQuest = SearchResource.getTranslatedText(questParser[x].Objectives[p].Description.Key);
+ }
+ else { newQuest = questParser[x].Objectives[p].Description.SourceString; }
long newCount = questParser[x].Objectives[p].Count;
- if (questParser[x].BAthenaMustCompleteInSingleMatch != false && questParser[x].ObjectiveCompletionCount > 0)
+ if (questParser[x].BAthenaMustCompleteInSingleMatch && questParser[x].ObjectiveCompletionCount > 0)
+ {
newCount = questParser[x].ObjectiveCompletionCount;
+ }
if (newQuest != oldQuest && newCount != oldCount)
{
diff --git a/FModel/Methods/IconGenerator/DrawText.cs b/FModel/Methods/IconGenerator/DrawText.cs
index 43ef3b6c..7ed9b2b0 100644
--- a/FModel/Methods/IconGenerator/DrawText.cs
+++ b/FModel/Methods/IconGenerator/DrawText.cs
@@ -84,7 +84,19 @@ namespace FModel
try
{
- ShortDescription = theItem.ShortDescription;
+ switch (Settings.Default.IconLanguage)
+ {
+ case "French":
+ case "German":
+ case "Italian":
+ case "Spanish":
+ ShortDescription = SearchResource.getTranslatedText(theItem.ShortDescription.Key);
+ if (string.IsNullOrEmpty(ShortDescription)) { ShortDescription = theItem.ShortDescription.SourceString; }
+ break;
+ default:
+ ShortDescription = theItem.ShortDescription.SourceString;
+ break;
+ }
}
catch (Exception)
{
@@ -219,7 +231,22 @@ namespace FModel
{
if (theItem.DisplayName != null)
{
- myGraphic.DrawString(theItem.DisplayName, new Font(FontUtilities.pfc.Families[0], 35), new SolidBrush(Color.White), new Point(522 / 2, 395), FontUtilities.centeredString);
+ if (LoadLocRes.myLocRes != null && Settings.Default.IconLanguage != "English")
+ {
+ string text = SearchResource.getTranslatedText(theItem.DisplayName.Key);
+ if (!string.IsNullOrEmpty(text))
+ {
+ myGraphic.DrawString(text, new Font(FontUtilities.pfc.Families[0], 35), new SolidBrush(Color.White), new Point(522 / 2, 395), FontUtilities.centeredString);
+ }
+ else
+ {
+ myGraphic.DrawString(theItem.DisplayName.SourceString, new Font(FontUtilities.pfc.Families[0], 35), new SolidBrush(Color.White), new Point(522 / 2, 395), FontUtilities.centeredString);
+ }
+ }
+ else
+ {
+ myGraphic.DrawString(theItem.DisplayName.SourceString, new Font(FontUtilities.pfc.Families[0], 35), new SolidBrush(Color.White), new Point(522 / 2, 395), FontUtilities.centeredString);
+ }
}
}
@@ -232,7 +259,22 @@ namespace FModel
{
if (theItem.Description != null)
{
- myGraphic.DrawString(theItem.Description, new Font("Arial", 10), new SolidBrush(Color.White), new RectangleF(5, 441, 512, 49), FontUtilities.centeredStringLine);
+ if (LoadLocRes.myLocRes != null && Settings.Default.IconLanguage != "English")
+ {
+ string text = SearchResource.getTranslatedText(theItem.Description.Key);
+ if (!string.IsNullOrEmpty(text))
+ {
+ myGraphic.DrawString(text, new Font("Arial", 10), new SolidBrush(Color.White), new RectangleF(5, 441, 512, 49), FontUtilities.centeredStringLine);
+ }
+ else
+ {
+ myGraphic.DrawString(theItem.Description.SourceString, new Font("Arial", 10), new SolidBrush(Color.White), new RectangleF(5, 441, 512, 49), FontUtilities.centeredStringLine);
+ }
+ }
+ else
+ {
+ myGraphic.DrawString(theItem.Description.SourceString, new Font("Arial", 10), new SolidBrush(Color.White), new RectangleF(5, 441, 512, 49), FontUtilities.centeredStringLine);
+ }
}
}
diff --git a/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs b/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
deleted file mode 100644
index 594c3cbc..00000000
--- a/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-
-namespace FModel
-{
- static class AssetNameMap
- {
- public static List myNamespacesList { get; set; }
- public static void searchStringsInUexp(string filepath)
- {
- myNamespacesList = new List();
-
- if (File.Exists(filepath))
- {
- List weirdStrings = new List();
- List listBeforeData = new List();
- bool previousByteWasValid = false;
-
- byte[] bytes = File.ReadAllBytes(filepath);
-
- string pattern = @"^[a-zA-Z0-9()'\-.&!+, ]";
- Regex regex = new Regex(pattern);
-
- foreach (byte b in bytes) // Iterate throught all the bytes of the file
- {
- string byteString = Encoding.UTF8.GetString(new[] { b }); // Generate string for single byte
-
- bool valid = regex.IsMatch(byteString);
-
- if (valid)
- {
- if (previousByteWasValid) weirdStrings[weirdStrings.Count - 1] += byteString;
- else weirdStrings.Add(byteString);
- }
- previousByteWasValid = valid;
- }
-
- bool found = false;
- foreach (string str in weirdStrings)
- {
- if (str.Length >= 2)
- {
- if (found) { myNamespacesList.Add(str); break; }
-
- listBeforeData.Add(str);
-
- if (str == "Outfit"
- || str == "Back Bling"
- || str == "Pet"
- || str == "Harvesting Tool"
- || str == "Glider"
- || str == "Contrail"
- || str == "Emote"
- || str == "Emoticon"
- || str == "Toy"
- || str == "Music")
- {
- int index = listBeforeData.IndexOf(str);
-
- //Console.WriteLine("DName: " + listBeforeData[index - 3]);
- //Console.WriteLine("Description: " + listBeforeData[index - 1]);
-
- myNamespacesList.Add(listBeforeData[index - 3]);
- myNamespacesList.Add(listBeforeData[index - 1]);
-
- found = true;
- }
- }
- }
- }
- }
-
- public static void getNameMap(string filepath)
- {
- Console.Clear();
-
- using (BinaryReader reader = new BinaryReader(File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.GetEncoding(1252)))
- {
- reader.ReadBytes(24);
-
- int AssetLength = reader.ReadInt32();
- //Console.WriteLine(AssetLength);
-
- reader.ReadBytes(13);
- int NamespaceCount = reader.ReadInt32();
-
- long LocalizedStringArrayOffset = -1;
- LocalizedStringArrayOffset = reader.ReadInt64();
- if (LocalizedStringArrayOffset != -1)
- {
- long newOffset = LocalizedStringArrayOffset - 4;
- reader.BaseStream.Seek(newOffset, SeekOrigin.Begin);
-
- string[] LocalizedStringArray = new string[NamespaceCount];
- for (int i = 0; i < LocalizedStringArray.Length; i++)
- {
- string tag = AssetReader.readCleanString(reader);
- if (tag != "None") { LocalizedStringArray[i] = tag; Console.WriteLine(LocalizedStringArray[i]); }
- }
- }
- }
- }
- }
-}
diff --git a/FModel/Methods/IconGenerator/Translations/LoadLocRes.cs b/FModel/Methods/IconGenerator/Translations/LoadLocRes.cs
index dcbf7342..f4495fb5 100644
--- a/FModel/Methods/IconGenerator/Translations/LoadLocRes.cs
+++ b/FModel/Methods/IconGenerator/Translations/LoadLocRes.cs
@@ -27,7 +27,11 @@
private static string getMyLocRes(string selectedLanguage)
{
+ string oldKey = JohnWick.MyKey;
+ JohnWick.MyKey = Properties.Settings.Default.AESKey;
string locResPath = JohnWick.ExtractAsset(ThePak.AllpaksDictionary["Game_BR.locres"], "Game_BR.locres");
+ JohnWick.MyKey = oldKey;
+
return LocResSerializer.StringFinder(locResPath.Replace("zh-Hant", selectedLanguage));
}
}
diff --git a/FModel/Methods/IconGenerator/Translations/SearchResource.cs b/FModel/Methods/IconGenerator/Translations/SearchResource.cs
index 40c9ef7a..4818606a 100644
--- a/FModel/Methods/IconGenerator/Translations/SearchResource.cs
+++ b/FModel/Methods/IconGenerator/Translations/SearchResource.cs
@@ -6,17 +6,19 @@ namespace FModel
static class SearchResource
{
private static string parsedJsonToCheck { get; set; }
+ private static JObject jo { get; set; }
+ private static string oldLanguage = Properties.Settings.Default.IconLanguage;
public static string getTranslatedText(string theNamespace)
{
string toReturn = string.Empty;
- string myParsedJson = string.Empty;
+ string newLanguage = Properties.Settings.Default.IconLanguage;
- if (myParsedJson != parsedJsonToCheck)
+ if (parsedJsonToCheck == null || newLanguage != oldLanguage)
{
- myParsedJson = JToken.Parse(LoadLocRes.myLocRes).ToString().TrimStart('[').TrimEnd(']');
+ parsedJsonToCheck = JToken.Parse(LoadLocRes.myLocRes).ToString().TrimStart('[').TrimEnd(']');
+ jo = JObject.Parse(parsedJsonToCheck);
}
- JObject jo = JObject.Parse(myParsedJson);
foreach (JToken token in jo.FindTokens(theNamespace))
{
LocResParser LocResParse = LocResParser.FromJson(token.ToString());
@@ -24,13 +26,9 @@ namespace FModel
{
toReturn = LocResParse.LocResText;
}
- else if (LocResParse.WorkerSetBonusTraitPattern != null)
- {
- toReturn = LocResParse.WorkerSetBonusTraitPattern;
- }
}
+ oldLanguage = newLanguage;
- parsedJsonToCheck = myParsedJson;
return toReturn;
}
}
diff --git a/FModel/Methods/JohnWick/JohnWick.cs b/FModel/Methods/JohnWick/JohnWick.cs
index 95635c79..d38e0ed5 100644
--- a/FModel/Methods/JohnWick/JohnWick.cs
+++ b/FModel/Methods/JohnWick/JohnWick.cs
@@ -99,18 +99,6 @@ namespace FModel
}
currentPakToCheck = currentPak;
- /*if (AssetPath.Contains("Athena\\Items\\") && File.Exists(AssetPath.Substring(0, AssetPath.LastIndexOf(".")) + ".uexp")) //TEST
- {
- try
- {
- AssetNameMap.searchStringsInUexp(AssetPath.Substring(0, AssetPath.LastIndexOf(".")) + ".uexp");
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }*/
-
return AssetPath;
}
diff --git a/FModel/Parser/Banners/BannersParser.cs b/FModel/Parser/Banners/BannersParser.cs
index 50aeaf7d..2ebe9d70 100644
--- a/FModel/Parser/Banners/BannersParser.cs
+++ b/FModel/Parser/Banners/BannersParser.cs
@@ -27,15 +27,24 @@ namespace FModel.Parser.Banners
public string CategoryRowName { get; set; }
[JsonProperty("DisplayName")]
- public string DisplayName { get; set; }
+ public FTextInfos DisplayName { get; set; }
[JsonProperty("DisplayDescription")]
- public string DisplayDescription { get; set; }
+ public FTextInfos DisplayDescription { get; set; }
[JsonProperty("bFullUsageRights")]
public bool BFullUsageRights { get; set; }
}
+ public partial class FTextInfos
+ {
+ [JsonProperty("key")]
+ public string Key { get; set; }
+
+ [JsonProperty("source_string")]
+ public string SourceString { get; set; }
+ }
+
public class Image
{
[JsonProperty("asset_path_name")]
diff --git a/FModel/Parser/Challenges/ChallengeBundleIdParser.cs b/FModel/Parser/Challenges/ChallengeBundleIdParser.cs
index 23c2b7f0..1c804381 100644
--- a/FModel/Parser/Challenges/ChallengeBundleIdParser.cs
+++ b/FModel/Parser/Challenges/ChallengeBundleIdParser.cs
@@ -19,7 +19,7 @@ namespace FModel.Parser.Challenges
public DisplayStyle DisplayStyle { get; set; }
[JsonProperty("DisplayName")]
- public string DisplayName { get; set; }
+ public DisplayName DisplayName { get; set; }
[JsonProperty("SmallPreviewImage")]
public LargePreviewImage SmallPreviewImage { get; set; }
@@ -28,6 +28,15 @@ namespace FModel.Parser.Challenges
public LargePreviewImage LargePreviewImage { get; set; }
}
+ public partial class DisplayName
+ {
+ [JsonProperty("key")]
+ public string Key { get; set; }
+
+ [JsonProperty("source_string")]
+ public string SourceString { get; set; }
+ }
+
public class BundleCompletionReward
{
[JsonProperty("CompletionCount")]
diff --git a/FModel/Parser/Items/ItemIDParser.cs b/FModel/Parser/Items/ItemIDParser.cs
index b3227b84..5179f1cb 100644
--- a/FModel/Parser/Items/ItemIDParser.cs
+++ b/FModel/Parser/Items/ItemIDParser.cs
@@ -28,13 +28,13 @@ namespace FModel.Parser.Items
public string Series { get; set; }
[JsonProperty("DisplayName")]
- public string DisplayName { get; set; }
+ public FTextInfos DisplayName { get; set; }
[JsonProperty("ShortDescription")]
- public string ShortDescription { get; set; }
+ public FTextInfos ShortDescription { get; set; }
[JsonProperty("Description")]
- public string Description { get; set; }
+ public FTextInfos Description { get; set; }
[JsonProperty("GameplayTags")]
public GameplayTags GameplayTags { get; set; }
@@ -67,6 +67,15 @@ namespace FModel.Parser.Items
public WeaponStatHandle WeaponStatHandle { get; set; }
}
+ public partial class FTextInfos
+ {
+ [JsonProperty("key")]
+ public string Key { get; set; }
+
+ [JsonProperty("source_string")]
+ public string SourceString { get; set; }
+ }
+
public class GameplayTags
{
[JsonProperty("gameplay_tags")]
diff --git a/FModel/Parser/Quests/QuestParser.cs b/FModel/Parser/Quests/QuestParser.cs
index de411b0c..7e2650ce 100644
--- a/FModel/Parser/Quests/QuestParser.cs
+++ b/FModel/Parser/Quests/QuestParser.cs
@@ -31,16 +31,16 @@ namespace FModel.Parser.Quests
public Objective[] Objectives { get; set; }
[JsonProperty("CompletionText")]
- public string CompletionText { get; set; }
+ public FTextInfos CompletionText { get; set; }
[JsonProperty("GrantToProfileType")]
public string GrantToProfileType { get; set; }
[JsonProperty("DisplayName")]
- public string DisplayName { get; set; }
+ public FTextInfos DisplayName { get; set; }
[JsonProperty("Description")]
- public string Description { get; set; }
+ public FTextInfos Description { get; set; }
[JsonProperty("GameplayTags")]
public GameplayTags GameplayTags { get; set; }
@@ -52,6 +52,15 @@ namespace FModel.Parser.Quests
public LargePreviewImage LargePreviewImage { get; set; }
}
+ public partial class FTextInfos
+ {
+ [JsonProperty("key")]
+ public string Key { get; set; }
+
+ [JsonProperty("source_string")]
+ public string SourceString { get; set; }
+ }
+
public class GameplayTags
{
[JsonProperty("gameplay_tags")]
@@ -115,10 +124,10 @@ namespace FModel.Parser.Quests
public long LinkSquadIndex { get; set; }
[JsonProperty("Description")]
- public string Description { get; set; }
+ public FTextInfos Description { get; set; }
[JsonProperty("HudShortDescription")]
- public string HudShortDescription { get; set; }
+ public FTextInfos HudShortDescription { get; set; }
[JsonProperty("HudIcon")]
public LargePreviewImage HudIcon { get; set; }
diff --git a/FModel/Properties/AssemblyInfo.cs b/FModel/Properties/AssemblyInfo.cs
index 13d72f84..fc4bcbb3 100644
--- a/FModel/Properties/AssemblyInfo.cs
+++ b/FModel/Properties/AssemblyInfo.cs
@@ -33,7 +33,7 @@ using System.Runtime.InteropServices;
// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut
// en utilisant '*', comme indiqué ci-dessous :
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.3.3.0")]
-[assembly: AssemblyFileVersion("2.3.3.0")]
+[assembly: AssemblyVersion("2.4.0.0")]
+[assembly: AssemblyFileVersion("2.4.0.0")]
[assembly: NeutralResourcesLanguage("en")]
diff --git a/FModel/csharp_wick.dll b/FModel/csharp_wick.dll
index 9b398057..3342f7a2 100644
Binary files a/FModel/csharp_wick.dll and b/FModel/csharp_wick.dll differ
diff --git a/README.md b/README.md
index 3c2a82af..bc93da00 100644
--- a/README.md
+++ b/README.md
@@ -10,12 +10,12 @@
### Prerequisites
[.NET Framework 4.7.1](https://dotnet.microsoft.com/download/dotnet-framework/net471)
### Download
-[](https://github.com/iAmAsval/FModel/releases/tag/2.3.3)
+[](https://github.com/iAmAsval/FModel/releases/tag/2.4.0)
### How does it works
**1.** Once you start the executable, you'll be asked to set your path to your Fortnite .PAK files. Meanwhile a `FModel` subfolder will be created in your `Documents` folder.

-**2.** Restart the executable, enter the AES Key, click **Load** and select your .PAK file
+**2.** Restart the executable, go to the AES Manager and add you AES Keys, click **Load** and select your .PAK file
- It will parse all Assets contained in the selected .PAK file with their respective path
**3.** Navigate through the tree to find the Asset you want
@@ -84,10 +84,10 @@ I'd highly suggest you to use [UModel](https://github.com/gildor2/UModel) instea
## TODO
- [ ] Code refactoring
- - [ ] Icons translation
- [ ] 2FA support
- [ ] Export Queue
- [ ] Nintendo Switch sound files
+ - [x] Translation support
- [x] AES Manager
- [x] Display support for .locres files
- [x] Nintendo Switch PAKs