diff --git a/FModel/Forms/AESManager.cs b/FModel/Forms/AESManager.cs
index ed0c2559..0d8a36ce 100644
--- a/FModel/Forms/AESManager.cs
+++ b/FModel/Forms/AESManager.cs
@@ -72,6 +72,10 @@ namespace FModel.Forms
{
DynamicKeysManager.serialize(txtBox.Text.Substring(2).ToUpper(), dCurrentUsedPak);
}
+ else
+ {
+ DynamicKeysManager.serialize("", dCurrentUsedPak);
+ }
}
}
}
diff --git a/FModel/Forms/Settings.cs b/FModel/Forms/Settings.cs
index 29e88b0c..738889ea 100644
--- a/FModel/Forms/Settings.cs
+++ b/FModel/Forms/Settings.cs
@@ -115,14 +115,11 @@ namespace FModel.Forms
if (checkBox8.Checked == false)
Properties.Settings.Default.loadFeaturedImage = false;
+ //LOCRES
Properties.Settings.Default.IconLanguage = comboBox1.SelectedItem.ToString();
+ LoadLocRes.LoadMySelectedLocRes(Properties.Settings.Default.IconLanguage);
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 8d6f051b..ef4e80bc 100644
--- a/FModel/MainWindow.cs
+++ b/FModel/MainWindow.cs
@@ -91,11 +91,11 @@ namespace FModel
///
///
///
- private void AddPaKs(IEnumerable thePaks, int index)
+ private void AddPaKs(string thePak)
{
Invoke(new Action(() =>
{
- loadOneToolStripMenuItem.DropDownItems.Add(Path.GetFileName(thePaks.ElementAt(index)));
+ loadOneToolStripMenuItem.DropDownItems.Add(thePak);
}));
}
@@ -118,19 +118,23 @@ namespace FModel
IEnumerable yourPaKs = Directory.GetFiles(Settings.Default.PAKsPath).Where(x => x.EndsWith(".pak"));
for (int i = 0; i < yourPaKs.Count(); i++)
{
- AddPaKs(yourPaKs, i); //add to toolstrip
-
string arCurrentUsedPak = yourPaKs.ElementAt(i); //SET CURRENT PAK
- string arCurrentUsedPakGuid = ThePak.ReadPakGuid(Settings.Default.PAKsPath + "\\" + Path.GetFileName(arCurrentUsedPak)); //SET CURRENT PAK GUID
+ if (!Utilities.IsFileLocked(new System.IO.FileInfo(arCurrentUsedPak)))
+ {
+ string arCurrentUsedPakGuid = ThePak.ReadPakGuid(Settings.Default.PAKsPath + "\\" + Path.GetFileName(arCurrentUsedPak)); //SET CURRENT PAK GUID
- if (arCurrentUsedPakGuid == "0-0-0-0")
- {
- ThePak.mainPaksList.Add(new PaksEntry(Path.GetFileName(arCurrentUsedPak), arCurrentUsedPakGuid));
- }
- if (arCurrentUsedPakGuid != "0-0-0-0")
- {
- ThePak.dynamicPaksList.Add(new PaksEntry(Path.GetFileName(arCurrentUsedPak), arCurrentUsedPakGuid));
+ if (arCurrentUsedPakGuid == "0-0-0-0")
+ {
+ ThePak.mainPaksList.Add(new PaksEntry(Path.GetFileName(arCurrentUsedPak), arCurrentUsedPakGuid));
+ AddPaKs(Path.GetFileName(arCurrentUsedPak)); //add to toolstrip
+ }
+ if (arCurrentUsedPakGuid != "0-0-0-0")
+ {
+ ThePak.dynamicPaksList.Add(new PaksEntry(Path.GetFileName(arCurrentUsedPak), arCurrentUsedPakGuid));
+ AddPaKs(Path.GetFileName(arCurrentUsedPak)); //add to toolstrip
+ }
}
+ else { AppendText(Path.GetFileName(arCurrentUsedPak) + " is locked by another process.", Color.Red, true); }
}
}
}
@@ -273,6 +277,9 @@ namespace FModel
private void RegisterPaKsinDict(ToolStripItemClickedEventArgs theSinglePak = null, bool loadAllPaKs = false)
{
StringBuilder sb = new StringBuilder();
+ ThePak.CurrentUsedPak = null;
+ ThePak.CurrentUsedPakGuid = null;
+ bool bMainKeyWorking = false;
for (int i = 0; i < ThePak.mainPaksList.Count; i++)
{
@@ -292,6 +299,8 @@ namespace FModel
string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
if (CurrentUsedPakLines != null)
{
+ bMainKeyWorking = true;
+
JohnWick.MyKey = Settings.Default.AESKey;
string mountPoint = JohnWick.MyExtractor.GetMountPoint();
ThePak.PaksMountPoint.Add(ThePak.mainPaksList[i].thePak, mountPoint.Substring(9));
@@ -326,6 +335,8 @@ namespace FModel
if (theSinglePak != null && ThePak.mainPaksList[i].thePak == theSinglePak.ClickedItem.Text) { PakAsTxt = CurrentUsedPakLines; }
}
}
+ if (bMainKeyWorking) { LoadLocRes.LoadMySelectedLocRes(Settings.Default.IconLanguage); }
+
if (theSinglePak != null) //IMPORTANT: IT STILLS LOAD THE DICTIONARY -> IT'S GONNA BE USEFUL FOR TRANSLATIONS
{
ThePak.CurrentUsedPak = theSinglePak.ClickedItem.Text;
@@ -337,7 +348,7 @@ namespace FModel
{
foreach (AESEntry s in DynamicKeysManager.AESEntries)
{
- if (s.thePak == ThePak.CurrentUsedPak)
+ if (s.thePak == ThePak.CurrentUsedPak && s.theKey.Length > 2)
{
try
{
@@ -358,7 +369,7 @@ namespace FModel
}
catch (Exception)
{
- //do not crash
+ return;
}
}
}
@@ -368,11 +379,8 @@ namespace FModel
if (loadAllPaKs)
{
File.WriteAllText(App.DefaultOutputPath + "\\FortnitePAKs.txt", sb.ToString()); //File will always exist
-
- 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
diff --git a/FModel/Methods/IconGenerator/ItemIcon.cs b/FModel/Methods/IconGenerator/ItemIcon.cs
index 41b23be5..1999fab0 100644
--- a/FModel/Methods/IconGenerator/ItemIcon.cs
+++ b/FModel/Methods/IconGenerator/ItemIcon.cs
@@ -209,11 +209,11 @@ namespace FModel
///
private static void GetFeaturedItemIcon(ItemsIdParser theItem, string catName)
{
- ThePak.CurrentUsedItem = catName;
-
- string catalogFilePath;
- try
+ if (ThePak.AllpaksDictionary.ContainsKey(catName))
{
+ ThePak.CurrentUsedItem = catName;
+
+ string catalogFilePath;
if (ThePak.CurrentUsedPakGuid != null && ThePak.CurrentUsedPakGuid != "0-0-0-0")
{
catalogFilePath = JohnWick.ExtractAsset(ThePak.CurrentUsedPak, catName);
@@ -263,13 +263,9 @@ namespace FModel
//do not crash when JsonSerialization does weird stuff
}
}
- else { GetItemIcon(theItem); } //Trails_ID_059_Sony2 smh :thinking:
}
}
- catch (KeyNotFoundException)
- {
- GetItemIcon(theItem);
- }
+ else { GetItemIcon(theItem); }
}
///
diff --git a/FModel/Methods/IconGenerator/Translations/LoadLocRes.cs b/FModel/Methods/IconGenerator/Translations/LoadLocRes.cs
index 00a500fc..ebdd5dc9 100644
--- a/FModel/Methods/IconGenerator/Translations/LoadLocRes.cs
+++ b/FModel/Methods/IconGenerator/Translations/LoadLocRes.cs
@@ -1,3 +1,5 @@
+using System;
+
namespace FModel
{
static class LoadLocRes
@@ -30,12 +32,16 @@ namespace FModel
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;
+ if (ThePak.AllpaksDictionary != null)
+ {
+ 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));
+ return LocResSerializer.StringFinder(locResPath.Replace("zh-Hant", selectedLanguage));
+ }
+ else { return ""; }
}
}
}
diff --git a/FModel/Methods/Utilities/Utilities.cs b/FModel/Methods/Utilities/Utilities.cs
index a1a9b1df..8be8a017 100644
--- a/FModel/Methods/Utilities/Utilities.cs
+++ b/FModel/Methods/Utilities/Utilities.cs
@@ -86,5 +86,35 @@ namespace FModel
File.Delete(App.DefaultOutputPath + "\\john-wick-parse_custom.exe");
}
}
+
+ ///
+ /// this should tell me if i can read the file, to avoid crash when a pak is being written by the launcher
+ ///
+ ///
+ ///
+ public static bool IsFileLocked(FileInfo file)
+ {
+ FileStream stream = null;
+ try
+ {
+ stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None);
+ }
+ catch (IOException)
+ {
+ //the file is unavailable because it is:
+ //still being written to
+ //or being processed by another thread
+ //or does not exist (has already been processed)
+ return true;
+ }
+ finally
+ {
+ if (stream != null)
+ stream.Close();
+ }
+
+ //file is not locked
+ return false;
+ }
}
}