diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj
index d35b37e8..bdceed75 100644
--- a/FModel/FModel.csproj
+++ b/FModel/FModel.csproj
@@ -130,10 +130,11 @@
-
+
-
+
+
diff --git a/FModel/MainWindow.Designer.cs b/FModel/MainWindow.Designer.cs
index 12bdb4e4..6225f401 100644
--- a/FModel/MainWindow.Designer.cs
+++ b/FModel/MainWindow.Designer.cs
@@ -54,6 +54,7 @@
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.aboutFModelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.panel1 = new System.Windows.Forms.Panel();
+ this.AESKeyComboBox = new System.Windows.Forms.ComboBox();
this.StopButton = new System.Windows.Forms.Button();
this.OpenImageButton = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
@@ -70,7 +71,6 @@
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.backgroundWorker2 = new System.ComponentModel.BackgroundWorker();
- this.AESKeyComboBox = new System.Windows.Forms.ComboBox();
this.statusStrip1.SuspendLayout();
this.menuStrip1.SuspendLayout();
this.panel1.SuspendLayout();
@@ -284,6 +284,15 @@
this.panel1.Size = new System.Drawing.Size(1191, 26);
this.panel1.TabIndex = 2;
//
+ // AESKeyComboBox
+ //
+ this.AESKeyComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.AESKeyComboBox.FormattingEnabled = true;
+ this.AESKeyComboBox.Location = new System.Drawing.Point(482, 4);
+ this.AESKeyComboBox.Name = "AESKeyComboBox";
+ this.AESKeyComboBox.Size = new System.Drawing.Size(454, 21);
+ this.AESKeyComboBox.TabIndex = 7;
+ //
// StopButton
//
this.StopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
@@ -460,15 +469,6 @@
this.backgroundWorker2.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker2_DoWork);
this.backgroundWorker2.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker2_RunWorkerCompleted);
//
- // AESKeyComboBox
- //
- this.AESKeyComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.AESKeyComboBox.FormattingEnabled = true;
- this.AESKeyComboBox.Location = new System.Drawing.Point(482, 4);
- this.AESKeyComboBox.Name = "AESKeyComboBox";
- this.AESKeyComboBox.Size = new System.Drawing.Size(454, 21);
- this.AESKeyComboBox.TabIndex = 7;
- //
// MainWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
diff --git a/FModel/MainWindow.cs b/FModel/MainWindow.cs
index bcd5f929..fbcd93b4 100644
--- a/FModel/MainWindow.cs
+++ b/FModel/MainWindow.cs
@@ -279,20 +279,15 @@ namespace FModel
break;
}
- if (JohnWick.MyExtractor.GetFileList() != null)
+ string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
+ if (CurrentUsedPakLines != null)
{
- ThePak.PaksMountPoint.Add(arCurrentUsedPak, JohnWick.MyExtractor.GetMountPoint().Substring(9));
+ string mountPoint = JohnWick.MyExtractor.GetMountPoint();
+ ThePak.PaksMountPoint.Add(arCurrentUsedPak, mountPoint.Substring(9));
- string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
for (int ii = 0; ii < CurrentUsedPakLines.Length; ii++)
{
- CurrentUsedPakLines[ii] = JohnWick.MyExtractor.GetMountPoint().Substring(6) + CurrentUsedPakLines[ii];
-
- if (loadAllPaKs)
- {
- sb.Append(CurrentUsedPakLines[ii]);
- sb.AppendLine();
- }
+ CurrentUsedPakLines[ii] = mountPoint.Substring(6) + CurrentUsedPakLines[ii];
string CurrentUsedPakFileName = CurrentUsedPakLines[ii].Substring(CurrentUsedPakLines[ii].LastIndexOf("/", StringComparison.Ordinal) + 1);
if (CurrentUsedPakFileName.Contains(".uasset") || CurrentUsedPakFileName.Contains(".uexp") || CurrentUsedPakFileName.Contains(".ubulk"))
@@ -309,47 +304,53 @@ namespace FModel
ThePak.AllpaksDictionary.Add(CurrentUsedPakFileName, arCurrentUsedPak);
}
}
- }
- if (loadAllPaKs)
- {
- UpdateConsole(".PAK mount point: " + JohnWick.MyExtractor.GetMountPoint().Substring(9), Color.FromArgb(255, 244, 132, 66), "Waiting");
- File.WriteAllText(App.DefaultOutputPath + "\\FortnitePAKs.txt", sb.ToString());
-
- ThePak.CurrentUsedPak = null;
- ThePak.CurrentUsedPakGuid = null;
+ if (loadAllPaKs)
+ {
+ sb.Append(CurrentUsedPakLines[ii] + "\n");
+ }
}
+
+ if (loadAllPaKs) { UpdateConsole(".PAK mount point: " + mountPoint.Substring(9), Color.FromArgb(255, 244, 132, 66), "Waiting"); }
+ if (theSinglePak != null && arCurrentUsedPak == theSinglePak.ClickedItem.Text) { PakAsTxt = CurrentUsedPakLines; }
}
}
-
- if (theSinglePak != null)
- {
- ThePak.CurrentUsedPak = theSinglePak.ClickedItem.Text;
- ThePak.CurrentUsedPakGuid = ThePak.ReadPakGuid(Settings.Default.PAKsPath + "\\" + ThePak.CurrentUsedPak);
-
- if (arCurrentUsedPak == theSinglePak.ClickedItem.Text && JohnWick.MyExtractor.GetFileList() != null)
- PakAsTxt = JohnWick.MyExtractor.GetFileList().ToArray();
- }
}
- if (theSinglePak != null && ThePak.ReadPakGuid(Settings.Default.PAKsPath + "\\" + theSinglePak.ClickedItem.Text) != "0-0-0-0") //LOADING DYNAMIC PAK
+ if (theSinglePak != null)
{
ThePak.CurrentUsedPak = theSinglePak.ClickedItem.Text;
ThePak.CurrentUsedPakGuid = ThePak.ReadPakGuid(Settings.Default.PAKsPath + "\\" + ThePak.CurrentUsedPak);
- try
+ if (ThePak.CurrentUsedPakGuid != "0-0-0-0") //LOADING DYNAMIC PAK
{
- JohnWick.MyExtractor = new PakExtractor(Settings.Default.PAKsPath + "\\" + theSinglePak.ClickedItem.Text, Settings.Default.AESKey);
-
- if (JohnWick.MyExtractor.GetFileList() != null)
+ try
{
- ThePak.PaksMountPoint.Add(theSinglePak.ClickedItem.Text, JohnWick.MyExtractor.GetMountPoint().Substring(9));
+ JohnWick.MyExtractor = new PakExtractor(Settings.Default.PAKsPath + "\\" + ThePak.CurrentUsedPak, Settings.Default.AESKey);
+
PakAsTxt = JohnWick.MyExtractor.GetFileList().ToArray();
+ if (PakAsTxt != null)
+ {
+ string mountPoint = JohnWick.MyExtractor.GetMountPoint();
+ ThePak.PaksMountPoint.Add(ThePak.CurrentUsedPak, mountPoint.Substring(9));
+
+ for (int i = 0; i < PakAsTxt.Length; i++)
+ {
+ PakAsTxt[i] = mountPoint.Substring(6) + PakAsTxt[i];
+ }
+ }
+ }
+ catch (Exception)
+ {
+ UpdateConsole("Can't read " + ThePak.CurrentUsedPak + " with this key", Color.FromArgb(255, 244, 66, 66), "Error");
}
}
- catch (Exception)
- {
- UpdateConsole("Can't read " + theSinglePak.ClickedItem.Text + " with this key", Color.FromArgb(255, 244, 66, 66), "Error");
- }
+ }
+ if (loadAllPaKs)
+ {
+ File.WriteAllText(App.DefaultOutputPath + "\\FortnitePAKs.txt", sb.ToString()); //File will always exist
+
+ ThePak.CurrentUsedPak = null;
+ ThePak.CurrentUsedPakGuid = null;
}
UpdateConsole("Building tree, please wait...", Color.FromArgb(255, 244, 132, 66), "Loading");
}
@@ -448,6 +449,7 @@ namespace FModel
ThePak.AllpaksDictionary = new Dictionary();
_diffToExtract = new Dictionary();
ThePak.PaksMountPoint = new Dictionary();
+ PakAsTxt = null;
Invoke(new Action(() =>
{
@@ -485,8 +487,9 @@ namespace FModel
//ADD TO DICTIONNARY
RegisterPaKsinDict(_paksArray, null, true);
- if (!File.Exists(App.DefaultOutputPath + "\\FortnitePAKs.txt"))
+ if (new System.IO.FileInfo(App.DefaultOutputPath + "\\FortnitePAKs.txt").Length <= 0) //File will always exist so we check the file size instead
{
+ File.Delete(App.DefaultOutputPath + "\\FortnitePAKs.txt");
UpdateConsole("Can't read .PAK files with this key", Color.FromArgb(255, 244, 66, 66), "Error");
}
else
@@ -582,18 +585,14 @@ namespace FModel
break;
}
- if (JohnWick.MyExtractor.GetFileList() != null)
+ string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
+ if (CurrentUsedPakLines != null)
{
- if (!File.Exists(App.DefaultOutputPath + "\\Backup" + _backupFileName))
- File.Create(App.DefaultOutputPath + "\\Backup" + _backupFileName).Dispose();
-
- string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
for (int ii = 0; ii < CurrentUsedPakLines.Length; ii++)
{
CurrentUsedPakLines[ii] = JohnWick.MyExtractor.GetMountPoint().Substring(6) + CurrentUsedPakLines[ii];
- sb.Append(CurrentUsedPakLines[ii]);
- sb.AppendLine();
+ sb.Append(CurrentUsedPakLines[ii] + "\n");
}
UpdateConsole(".PAK mount point: " + JohnWick.MyExtractor.GetMountPoint().Substring(9), Color.FromArgb(255, 244, 132, 66), "Waiting");
}
@@ -626,15 +625,14 @@ namespace FModel
continue;
}
- if (JohnWick.MyExtractor.GetFileList() != null)
+ string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
+ if (CurrentUsedPakLines != null)
{
- string[] CurrentUsedPakLines = JohnWick.MyExtractor.GetFileList().ToArray();
for (int ii = 0; ii < CurrentUsedPakLines.Length; ii++)
{
CurrentUsedPakLines[ii] = JohnWick.MyExtractor.GetMountPoint().Substring(6) + CurrentUsedPakLines[ii];
- sb.Append(CurrentUsedPakLines[ii]);
- sb.AppendLine();
+ sb.Append(CurrentUsedPakLines[ii] + "\n");
}
AppendText("Backing up ", Color.Black);
AppendText(arCurrentUsedPak, Color.DarkRed, true);
@@ -643,12 +641,17 @@ namespace FModel
}
}
}
- File.WriteAllText(App.DefaultOutputPath + "\\Backup" + _backupFileName, sb.ToString());
- if (File.Exists(App.DefaultOutputPath + "\\Backup" + _backupFileName))
+ File.WriteAllText(App.DefaultOutputPath + "\\Backup" + _backupFileName, sb.ToString()); //File will always exist so we check the file size instead
+ if (new System.IO.FileInfo(App.DefaultOutputPath + "\\Backup" + _backupFileName).Length > 0)
+ {
UpdateConsole("\\Backup" + _backupFileName + " successfully created", Color.FromArgb(255, 66, 244, 66), "Success");
+ }
else
+ {
+ File.Delete(App.DefaultOutputPath + "\\Backup" + _backupFileName);
UpdateConsole("Can't create " + _backupFileName.Substring(1), Color.FromArgb(255, 244, 66, 66), "Error");
+ }
}
private void UpdateModeExtractSave()
{
diff --git a/FModel/MainWindow.resx b/FModel/MainWindow.resx
index 9dbdb166..00d7fd36 100644
--- a/FModel/MainWindow.resx
+++ b/FModel/MainWindow.resx
@@ -131,7 +131,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABa
- CAAAAk1TRnQBSQFMAgEBAgEAAQgBAQEIAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+ CAAAAk1TRnQBSQFMAgEBAgEAARABAQEQAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
diff --git a/FModel/Methods/IconGenerator/Translations/SearchNamespaces.cs b/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
similarity index 63%
rename from FModel/Methods/IconGenerator/Translations/SearchNamespaces.cs
rename to FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
index b4ff1cde..5d26f8fa 100644
--- a/FModel/Methods/IconGenerator/Translations/SearchNamespaces.cs
+++ b/FModel/Methods/IconGenerator/Translations/AssetNameMap.cs
@@ -1,4 +1,5 @@
-using System;
+using Newtonsoft.Json;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -7,10 +8,10 @@ using System.Text.RegularExpressions;
namespace FModel
{
- static class SearchNamespaces
+ static class AssetNameMap
{
public static List myNamespacesList { get; set; }
- public static void searchNamespacesInUexp(string filepath)
+ public static void searchStringsInUexp(string filepath)
{
myNamespacesList = new List();
@@ -72,5 +73,38 @@ namespace FModel
}
}
}
+
+ 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 fileLength = reader.ReadInt32();
+ Console.WriteLine(fileLength);
+
+ 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/JohnWick/JohnWick.cs b/FModel/Methods/JohnWick/JohnWick.cs
index 1aa142f1..e08aefed 100644
--- a/FModel/Methods/JohnWick/JohnWick.cs
+++ b/FModel/Methods/JohnWick/JohnWick.cs
@@ -61,7 +61,7 @@ namespace FModel
}
///
- /// We get the file list of currentPak, we find all files that matched our currentItem, for each result we get its indexes (it's used to get its data)
+ /// We get the file list of currentPak, we find all files that matched our currentItem, for each result we get its index (it's used to get its data)
/// Then we can use WriteFile to write each results with its data
/// If currentPak is the same twice in a row, we do not try to get a new file list
///
@@ -98,6 +98,11 @@ namespace FModel
}
currentPakToCheck = currentPak;
+ /*if (File.Exists(AssetPath.Substring(0, AssetPath.LastIndexOf(".")) + ".uasset")) //TEST
+ {
+ AssetNameMap.getNameMap(AssetPath.Substring(0, AssetPath.LastIndexOf(".")) + ".uasset");
+ }*/
+
return AssetPath;
}
diff --git a/FModel/Methods/Serializer/AssetReader.cs b/FModel/Methods/Serializer/AssetReader.cs
new file mode 100644
index 00000000..3ecb9ede
--- /dev/null
+++ b/FModel/Methods/Serializer/AssetReader.cs
@@ -0,0 +1,30 @@
+using System;
+using System.IO;
+using System.Text;
+
+namespace FModel
+{
+ class AssetReader
+ {
+ public static string readCleanString(BinaryReader reader)
+ {
+ reader.ReadInt32();
+ int stringLength = reader.ReadInt32();
+
+ if (stringLength < 0)
+ {
+ byte[] data = reader.ReadBytes((-1 - stringLength) * 2);
+ reader.ReadBytes(2);
+ return Encoding.Unicode.GetString(data);
+ }
+ else if (stringLength == 0)
+ {
+ return "";
+ }
+ else
+ {
+ return Encoding.GetEncoding(1252).GetString(reader.ReadBytes(stringLength)).TrimEnd('\0');
+ }
+ }
+ }
+}
diff --git a/FModel/Methods/LocRes/LocResSerializer.cs b/FModel/Methods/Serializer/LocRes/LocResSerializer.cs
similarity index 65%
rename from FModel/Methods/LocRes/LocResSerializer.cs
rename to FModel/Methods/Serializer/LocRes/LocResSerializer.cs
index 6afba453..12781937 100644
--- a/FModel/Methods/LocRes/LocResSerializer.cs
+++ b/FModel/Methods/Serializer/LocRes/LocResSerializer.cs
@@ -5,19 +5,25 @@ using System.Text;
namespace FModel
{
+ /*
+ * Author: Asval
+ * pretty sure it can be refactored
+ *
+ * */
static class LocResSerializer
{
- //TODO: refactor
private static long LocalizedStringArrayOffset { get; set; }
private static string[] LocalizedStringArray { get; set; }
- private static int stringIndex { get; set; }
private static string NamespacesString { get; set; }
- private static string myKey = "LocResText";
+ private static string myKey { get; set; }
private static Dictionary> LocResDict { get; set; }
public static string StringFinder(string filepath)
{
LocResDict = new Dictionary>();
+ myKey = "LocResText";
+ NamespacesString = "";
+ LocalizedStringArrayOffset = -1;
using (BinaryReader reader = new BinaryReader(File.Open(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.GetEncoding(1252)))
{
@@ -25,7 +31,6 @@ namespace FModel
byte VersionNumber = reader.ReadByte();
- LocalizedStringArrayOffset = -1;
LocalizedStringArrayOffset = reader.ReadInt64();
if (LocalizedStringArrayOffset != -1)
{
@@ -39,7 +44,7 @@ namespace FModel
LocalizedStringArray = new string[arrayLength];
for (int i = 0; i < LocalizedStringArray.Length; i++)
{
- LocalizedStringArray[i] = readCleanString(reader);
+ LocalizedStringArray[i] = AssetReader.readCleanString(reader);
}
reader.BaseStream.Seek(CurrentFileOffset, SeekOrigin.Begin);
@@ -58,31 +63,6 @@ namespace FModel
return JsonConvert.SerializeObject(LocResDict, Formatting.Indented);
}
- private static string readCleanString(BinaryReader reader)
- {
- reader.ReadInt32();
- int stringLength = 0;
- if (reader.BaseStream.Position != reader.BaseStream.Length)
- {
- stringLength = reader.ReadInt32();
- }
-
- if (stringLength < 0)
- {
- byte[] data = reader.ReadBytes((-1 - stringLength) * 2);
- reader.ReadBytes(2);
- return Encoding.Unicode.GetString(data);
- }
- else if (stringLength == 0)
- {
- return "";
- }
- else
- {
- return Encoding.GetEncoding(1252).GetString(reader.ReadBytes(stringLength)).TrimEnd('\0');
- }
- }
-
private static void readNamespaces(BinaryReader br)
{
if (br.BaseStream.Position > LocalizedStringArrayOffset) { return; }
@@ -104,7 +84,7 @@ namespace FModel
}
br.ReadInt32();
- stringIndex = br.ReadInt32();
+ int stringIndex = br.ReadInt32();
if (stringIndex > LocalizedStringArray.Length || stringIndex < 0)
{
if (!LocResDict.ContainsKey(NamespacesString))
@@ -118,7 +98,12 @@ namespace FModel
int KeyCount = br.ReadInt32();
for (int i = 0; i < KeyCount; i++)
{
- readNpKeys(br);
+ myKey = AssetReader.readCleanString(br);
+
+ br.ReadInt32();
+ stringIndex = br.ReadInt32();
+
+ LocResDict[NamespacesString][myKey] = LocalizedStringArray[stringIndex];
}
}
else
@@ -130,31 +115,5 @@ namespace FModel
}
}
}
-
- private static void readNpKeys(BinaryReader reader)
- {
- reader.ReadInt32();
- int stringLength = reader.ReadInt32();
-
- if (stringLength < 0)
- {
- byte[] data = reader.ReadBytes((-1 - stringLength) * 2);
- reader.ReadBytes(2);
- myKey = Encoding.Unicode.GetString(data);
- }
- else if (stringLength == 0)
- {
- myKey = "";
- }
- else
- {
- myKey = Encoding.GetEncoding(1252).GetString(reader.ReadBytes(stringLength)).TrimEnd('\0');
- }
-
- reader.ReadInt32();
- stringIndex = reader.ReadInt32();
-
- LocResDict[NamespacesString][myKey] = LocalizedStringArray[stringIndex];
- }
}
}