diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index bcdb84da..ccf46d94 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -5,7 +5,7 @@ Debug AnyCPU {71A31C47-30BC-4CB5-AD89-81E5008F4BEB} - WinExe + Exe FModel FModel v4.6.1 @@ -181,4 +181,8 @@ + + + + \ No newline at end of file diff --git a/FModel/PAKWindow.Designer.cs b/FModel/PAKWindow.Designer.cs index 90fe0ff5..23accc06 100644 --- a/FModel/PAKWindow.Designer.cs +++ b/FModel/PAKWindow.Designer.cs @@ -55,6 +55,8 @@ this.ConsoleRichTextBox = new System.Windows.Forms.RichTextBox(); this.FilterLabel = new System.Windows.Forms.Label(); this.FilterTextBox = new System.Windows.Forms.TextBox(); + this.loadAllPAKsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.groupBox1.SuspendLayout(); this.LoadContext.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.ItemIconPictureBox)).BeginInit(); @@ -92,14 +94,16 @@ // this.LoadContext.ImageScalingSize = new System.Drawing.Size(18, 18); this.LoadContext.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.loadAllPAKsToolStripMenuItem, + this.toolStripSeparator2, this.optionsToolStripMenuItem}); this.LoadContext.Name = "LoadContext"; - this.LoadContext.Size = new System.Drawing.Size(117, 26); + this.LoadContext.Size = new System.Drawing.Size(181, 76); // // optionsToolStripMenuItem // this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; - this.optionsToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + this.optionsToolStripMenuItem.Size = new System.Drawing.Size(151, 22); this.optionsToolStripMenuItem.Text = "Options"; this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click); // @@ -300,6 +304,18 @@ this.FilterTextBox.TabIndex = 5; this.FilterTextBox.TextChanged += new System.EventHandler(this.FilterTextBox_TextChanged); // + // loadAllPAKsToolStripMenuItem + // + this.loadAllPAKsToolStripMenuItem.Name = "loadAllPAKsToolStripMenuItem"; + this.loadAllPAKsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.loadAllPAKsToolStripMenuItem.Text = "Load Them All"; + this.loadAllPAKsToolStripMenuItem.Click += new System.EventHandler(this.loadAllPAKsToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(148, 6); + // // PAKWindow // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -358,6 +374,8 @@ private System.Windows.Forms.ToolStripMenuItem mergeGeneratedImagesToolStripMenuItem; private System.Windows.Forms.ImageList TreeViewImageList; private ScintillaNET.Scintilla scintilla1; + private System.Windows.Forms.ToolStripMenuItem loadAllPAKsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; } } diff --git a/FModel/PAKWindow.cs b/FModel/PAKWindow.cs index 1ed61191..2b1c1078 100644 --- a/FModel/PAKWindow.cs +++ b/FModel/PAKWindow.cs @@ -20,6 +20,7 @@ using System.Threading.Tasks; using System.Windows.Forms; using System.Threading; using System.Text.RegularExpressions; +using System.Text; namespace FModel { @@ -27,10 +28,13 @@ namespace FModel { public static string docPath; private static string[] PAKFileAsTXT; + private static string[] AllPAKs; + private static bool isAllPAKs; private static string ItemName; private static List afterItems; public static string[] SelectedArray; public static string[] challengesArray; + public static Dictionary AllPAKsDict; public static Dictionary questStageDict; public static Dictionary questDictFinal; @@ -127,9 +131,11 @@ namespace FModel else { IEnumerable yourPAKs = Directory.GetFiles(Properties.Settings.Default.FortnitePAKs).Where(x => x.EndsWith(".pak")); + AllPAKs = new string[yourPAKs.Count()]; for (int i = 0; i < yourPAKs.Count(); i++) { PAKsComboBox.Items.Add(Path.GetFileName(yourPAKs.ElementAt(i))); + AllPAKs[i] = Path.GetFileName(yourPAKs.ElementAt(i)); } } @@ -289,6 +295,7 @@ namespace FModel private static string currentGUID; private async void LoadButton_Click(object sender, EventArgs e) { + isAllPAKs = false; if (PAKsComboBox.SelectedItem == null) { AppendText("Please, select one of your ", Color.Black); @@ -328,6 +335,176 @@ namespace FModel } } } + private async void loadAllPAKsToolStripMenuItem_Click(object sender, EventArgs e) + { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + + isAllPAKs = true; + AllPAKsDict = new Dictionary(); + PAKTreeView.Nodes.Clear(); + ItemsListBox.Items.Clear(); + File.WriteAllText("key.txt", AESKeyTextBox.Text.Substring(2)); + + LoadButton.Enabled = false; + for (int i = 0; i < AllPAKs.Count(); i++) + { + currentPAK = AllPAKs[i]; + currentGUID = readPAKGuid(Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK); + if (currentGUID == "0-0-0-0") + { + AppendText("✔ ", Color.Green); + AppendText("Loading ", Color.Black); + AppendText(currentPAK, Color.DarkRed, true); + await Task.Run(() => { + jwpmProcess("filelist \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + docPath + "\""); + }); + if (!File.Exists(docPath + "\\" + currentPAK + ".txt")) + { + AppendText("✗ ", Color.Red); + AppendText(" Can't read ", Color.Black); + AppendText(currentPAK, Color.SteelBlue); + AppendText(" with this key", Color.Black, true); + } + else + { + if (!File.Exists(docPath + "\\FortnitePAKs_Temp.txt")) + { + File.Create(docPath + "\\FortnitePAKs_Temp.txt").Dispose(); + } + + string[] arr = File.ReadAllLines(docPath + "\\" + currentPAK + ".txt"); + for (int ii = 0; ii < arr.Length; ii++) + { + string filename = arr[ii].Substring(arr[ii].LastIndexOf("/") + 1); + if (filename.Contains(".uasset") || filename.Contains(".uexp") || filename.Contains(".ubulk")) + { + if (!AllPAKsDict.ContainsKey(filename.Substring(0, filename.LastIndexOf(".")))) + { + AllPAKsDict.Add(filename.Substring(0, filename.LastIndexOf(".")), currentPAK); + } + } + else + { + if (!AllPAKsDict.ContainsKey(filename)) + { + AllPAKsDict.Add(filename, currentPAK); + } + } + } + File.AppendAllText(docPath + "\\FortnitePAKs_Temp.txt", File.ReadAllText(docPath + "\\" + currentPAK + ".txt")); + File.Delete(docPath + "\\" + currentPAK + ".txt"); + } + } + } + if (File.Exists(docPath + "\\FortnitePAKs_Temp.txt")) + { + string[] arr = File.ReadAllLines(docPath + "\\FortnitePAKs_Temp.txt"); + File.Delete(docPath + "\\FortnitePAKs_Temp.txt"); + AppendText("Fixing paths... Please wait ", Color.Black, true); + await Task.Run(() => { + for (int i = 0; i < arr.Length; i++) + { + if (arr[i].StartsWith("Athena") || + arr[i].StartsWith("Balance") || + arr[i].StartsWith("Characters") || + arr[i].StartsWith("Banners") || + arr[i].StartsWith("Building") || + arr[i].StartsWith("Blueprints") || + arr[i].StartsWith("ArtTools") || + arr[i].StartsWith("Catalog") || + arr[i].StartsWith("Animation") || + arr[i].StartsWith("Effects") || + arr[i].StartsWith("Environments") || + arr[i].StartsWith("Characters") || + arr[i].StartsWith("CharClasses") || + arr[i].StartsWith("ContentCreationTools") || + arr[i].StartsWith("DeathPenalty") || + arr[i].StartsWith("CollectionBook") || + arr[i].StartsWith("CommandConsole") || + arr[i].StartsWith("Creative") || + arr[i].StartsWith("DeployableBases") || + arr[i].StartsWith("GameplayCueNotifies") || + arr[i].StartsWith("Items") || + arr[i].StartsWith("Missions") || + arr[i].StartsWith("GameplayEffectTemplates") || + arr[i].StartsWith("Heroes") || + arr[i].StartsWith("GameplayCurves") || + arr[i].StartsWith("Packages") || + arr[i].StartsWith("FortressPhysicalMaterials") || + arr[i].StartsWith("Expeditions") || + arr[i].StartsWith("Gamepad") || + arr[i].StartsWith("Gadgets") || + arr[i].StartsWith("Macros") || + arr[i].StartsWith("Maps") || + arr[i].StartsWith("Frontend") || + arr[i].StartsWith("Playgrounds") || + arr[i].StartsWith("Playsets") || + arr[i].StartsWith("Movies") || + arr[i].StartsWith("L10N") || + arr[i].StartsWith("ImpostorBaker") || + arr[i].StartsWith("Marketing") || + arr[i].StartsWith("Marketing_Screenshots") || + arr[i].StartsWith("Sounds") || + arr[i].StartsWith("UI") || + arr[i].StartsWith("Quests") || + arr[i].StartsWith("VisualThreatManager") || + arr[i].StartsWith("Weapons") || + arr[i].StartsWith("WaterAndWind") || + arr[i].StartsWith("Tools") || + arr[i].StartsWith("Vehicles") || + arr[i].StartsWith("PvP") || + arr[i].StartsWith("Spectating") || + arr[i].StartsWith("TheOutpost") || + arr[i].StartsWith("TimeOfDay") || + arr[i].StartsWith("Research") || + arr[i].StartsWith("Relics") || + arr[i].StartsWith("Slate") || + arr[i].StartsWith("TheKeep") || + arr[i].StartsWith("FrontEnd") || + arr[i].StartsWith("AIDirector") || + arr[i].StartsWith("AI") || + arr[i].StartsWith("Abilities") || + arr[i].StartsWith("Accessories") || + arr[i].StartsWith("WorldTiles") || + arr[i].StartsWith("Widgets")) + { + arr[i] = "FortniteGame/Content/" + arr[i]; + } + if (arr[i].StartsWith("Content") || arr[i].StartsWith("Plugins")) + { + arr[i] = "FortniteGame/" + arr[i]; + } + if (arr[i].StartsWith("Female") || arr[i].StartsWith("Male")) + { + arr[i] = "FortniteGame/Content/Characters/Player/" + arr[i]; + } + if (arr[i].StartsWith("Male_Avg_Base") || arr[i].StartsWith("Medium") || arr[i].StartsWith("LegacyAssets") || arr[i].StartsWith("Large")) + { + arr[i] = "FortniteGame/Content/Characters/Player/Male/" + arr[i]; + } + if (arr[i].StartsWith("Props") || arr[i].StartsWith("Sets") || arr[i].StartsWith("Prototype")) + { + arr[i] = "FortniteGame/Content/Environments/" + arr[i]; + } + } + }); + File.WriteAllLines(docPath + "\\FortnitePAKs.txt", arr); + PAKFileAsTXT = File.ReadAllLines(docPath + "\\FortnitePAKs.txt"); + File.Delete(docPath + "\\FortnitePAKs.txt"); + + for (int ii = 0; ii < PAKFileAsTXT.Length; ii++) + { + CreatePath(PAKTreeView.Nodes, PAKFileAsTXT[ii].Replace(PAKFileAsTXT[ii].Split('/').Last(), "")); + } + } + LoadButton.Enabled = true; + + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); + AppendText("\nTime elapsed: " + elapsedTime, Color.Green, true, HorizontalAlignment.Right); + } public static IEnumerable GetAncestors(TItem item, Func getParentFunc) { @@ -663,7 +840,14 @@ namespace FModel var filesPath = Directory.GetFiles(docPath + "\\Extracted", qAssetName + ".*", SearchOption.AllDirectories).Where(x => !x.EndsWith(".png")).FirstOrDefault(); if (!File.Exists(filesPath)) { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + qAssetName + "\" \"" + docPath + "\""); + if (isAllPAKs == false) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + qAssetName + "\" \"" + docPath + "\""); + } + if (isAllPAKs == true) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[qAssetName] + "\" \"" + qAssetName + "\" \"" + docPath + "\""); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", qAssetName + ".*", SearchOption.AllDirectories).Where(x => !x.EndsWith(".png")).FirstOrDefault(); } try @@ -748,9 +932,18 @@ namespace FModel var files = Directory.GetFiles(docPath + "\\Extracted", currentItem + ".*", SearchOption.AllDirectories).Where(x => !x.EndsWith(".png")).FirstOrDefault(); if (!File.Exists(files)) { - await Task.Run(() => { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + currentItem + "\" \"" + docPath + "\""); - }); + if (isAllPAKs == false) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + currentItem + "\" \"" + docPath + "\""); + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[currentItem] + "\" \"" + currentItem + "\" \"" + docPath + "\""); + }); + } files = Directory.GetFiles(docPath + "\\Extracted", currentItem + ".*", SearchOption.AllDirectories).Where(x => !x.EndsWith(".png")).FirstOrDefault(); } if (files != null) @@ -825,10 +1018,19 @@ namespace FModel AppendText("Extracting ", Color.Black); AppendText(IDParser[iii].HeroDefinition, Color.DarkRed, true); - await Task.Run(() => + if (isAllPAKs == false) { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + IDParser[iii].HeroDefinition + "\" \"" + docPath + "\""); - }); + await Task.Run(() => + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + IDParser[iii].HeroDefinition + "\" \"" + docPath + "\""); + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[IDParser[iii].HeroDefinition] + "\" \"" + IDParser[iii].HeroDefinition + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", IDParser[iii].HeroDefinition + ".*", SearchOption.AllDirectories).FirstOrDefault(); } try @@ -876,10 +1078,19 @@ namespace FModel } else { - await Task.Run(() => + if (isAllPAKs == false) { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - }); + await Task.Run(() => + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath2 = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -943,10 +1154,19 @@ namespace FModel AppendText("Extracting ", Color.Black); AppendText(IDParser[iii].WeaponDefinition, Color.DarkRed, true); - await Task.Run(() => + if (isAllPAKs == false) { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + IDParser[iii].WeaponDefinition + "\" \"" + docPath + "\""); - }); + await Task.Run(() => + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + IDParser[iii].WeaponDefinition + "\" \"" + docPath + "\""); + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[IDParser[iii].WeaponDefinition] + "\" \"" + IDParser[iii].WeaponDefinition + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", IDParser[iii].WeaponDefinition + ".*", SearchOption.AllDirectories).FirstOrDefault(); } try @@ -994,10 +1214,19 @@ namespace FModel } else { - await Task.Run(() => + if (isAllPAKs == false) { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - }); + await Task.Run(() => + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath2 = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -1073,21 +1302,30 @@ namespace FModel } else //NORMAL PAK { - await Task.Run(() => + if (isAllPAKs == false) { - if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + await Task.Run(() => { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - }); + if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -1146,21 +1384,30 @@ namespace FModel } else { - await Task.Run(() => + if (isAllPAKs == false) { - if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + await Task.Run(() => { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - }); + if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -1272,12 +1519,12 @@ namespace FModel { AppendText("Auto saving icons set to ", Color.Black); AppendText("True", Color.Green, true); - ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + ItemName + ".png", ImageFormat.Png); + ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + currentItem + ".png", ImageFormat.Png); AppendText("✔ ", Color.Green); - AppendText(ItemName, Color.DarkRed); + AppendText(currentItem, Color.DarkRed); AppendText(" successfully saved to ", Color.Black); - AppendText(docPath + "\\Generated Icons\\" + ItemName + ".png", Color.SteelBlue, true); + AppendText(docPath + "\\Generated Icons\\" + currentItem + ".png", Color.SteelBlue, true); } } //Cosmetics if (Properties.Settings.Default.createIconForConsumablesWeapons == true && (IDParser[iii].ExportType.Contains("FortWeaponRangedItemDefinition") || IDParser[iii].ExportType.Contains("FortWeaponMeleeItemDefinition"))) @@ -1318,21 +1565,30 @@ namespace FModel } else //NORMAL PAK { - await Task.Run(() => + if (isAllPAKs == false) { - if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + await Task.Run(() => { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - }); + if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -1391,21 +1647,30 @@ namespace FModel } else { - await Task.Run(() => + if (isAllPAKs == false) { - if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + await Task.Run(() => { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - }); + if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -1522,12 +1787,12 @@ namespace FModel { AppendText("Auto saving icons set to ", Color.Black); AppendText("True", Color.Green, true); - ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + ItemName + ".png", ImageFormat.Png); + ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + currentItem + ".png", ImageFormat.Png); AppendText("✔ ", Color.Green); - AppendText(ItemName, Color.DarkRed); + AppendText(currentItem, Color.DarkRed); AppendText(" successfully saved to ", Color.Black); - AppendText(docPath + "\\Generated Icons\\" + ItemName + ".png", Color.SteelBlue, true); + AppendText(docPath + "\\Generated Icons\\" + currentItem + ".png", Color.SteelBlue, true); } } //Consumables & Weapons if (Properties.Settings.Default.createIconForTraps == true && (IDParser[iii].ExportType.Contains("FortTrapItemDefinition") || IDParser[iii].ExportType.Contains("FortContextTrapItemDefinition"))) @@ -1568,21 +1833,30 @@ namespace FModel } else //NORMAL PAK { - await Task.Run(() => + if (isAllPAKs == false) { - if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + await Task.Run(() => { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - }); + if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -1641,21 +1915,30 @@ namespace FModel } else { - await Task.Run(() => + if (isAllPAKs == false) { - if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + await Task.Run(() => { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - }); + if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -1736,12 +2019,12 @@ namespace FModel { AppendText("Auto saving icons set to ", Color.Black); AppendText("True", Color.Green, true); - ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + ItemName + ".png", ImageFormat.Png); + ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + currentItem + ".png", ImageFormat.Png); AppendText("✔ ", Color.Green); - AppendText(ItemName, Color.DarkRed); + AppendText(currentItem, Color.DarkRed); AppendText(" successfully saved to ", Color.Black); - AppendText(docPath + "\\Generated Icons\\" + ItemName + ".png", Color.SteelBlue, true); + AppendText(docPath + "\\Generated Icons\\" + currentItem + ".png", Color.SteelBlue, true); } } //Traps if (Properties.Settings.Default.createIconForVariants == true && (IDParser[iii].ExportType == "FortVariantTokenType")) @@ -1782,21 +2065,30 @@ namespace FModel } else //NORMAL PAK { - await Task.Run(() => + if (isAllPAKs == false) { - if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + await Task.Run(() => { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - }); + if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else if (IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -1855,21 +2147,30 @@ namespace FModel } else { - await Task.Run(() => + if (isAllPAKs == false) { - if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + await Task.Run(() => { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - else - { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); - } - }); + if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/2dAssets/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else if (IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/TestAssets/") || IDParser[iii].SmallPreviewImage.AssetPathName.Contains("/Game/Athena/Prototype/") || IDParser[iii].LargePreviewImage.AssetPathName.Contains("/Game/Athena/Items/")) + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + else + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\pakchunk0_s7-WindowsClient.pak" + "\" \"" + textureFile + "\" \"" + docPath + "\""); + } + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[textureFile] + "\" \"" + textureFile + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", textureFile + ".*", SearchOption.AllDirectories).FirstOrDefault(); } } @@ -1972,12 +2273,12 @@ namespace FModel { AppendText("Auto saving icons set to ", Color.Black); AppendText("True", Color.Green, true); - ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + ItemName + ".png", ImageFormat.Png); + ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + currentItem + ".png", ImageFormat.Png); AppendText("✔ ", Color.Green); - AppendText(ItemName, Color.DarkRed); + AppendText(currentItem, Color.DarkRed); AppendText(" successfully saved to ", Color.Black); - AppendText(docPath + "\\Generated Icons\\" + ItemName + ".png", Color.SteelBlue, true); + AppendText(docPath + "\\Generated Icons\\" + currentItem + ".png", Color.SteelBlue, true); } } //CosmeticVariantTokens } @@ -2004,10 +2305,19 @@ namespace FModel var filesPath = Directory.GetFiles(docPath + "\\Extracted", challengesArray[w] + ".*", SearchOption.AllDirectories).Where(x => !x.EndsWith(".png")).FirstOrDefault(); if (!File.Exists(filesPath)) { - await Task.Run(() => + if (isAllPAKs == false) { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + challengesArray[w] + "\" \"" + docPath + "\""); - }); + await Task.Run(() => + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + challengesArray[w] + "\" \"" + docPath + "\""); + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[challengesArray[w]] + "\" \"" + challengesArray[w] + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", challengesArray[w] + ".*", SearchOption.AllDirectories).Where(x => !x.EndsWith(".png")).FirstOrDefault(); } try @@ -2128,12 +2438,12 @@ namespace FModel { AppendText("Auto saving icons set to ", Color.Black); AppendText("True", Color.Green, true); - ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + ItemName + ".png", ImageFormat.Png); + ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + currentItem + ".png", ImageFormat.Png); AppendText("✔ ", Color.Green); - AppendText(ItemName, Color.DarkRed); + AppendText(currentItem, Color.DarkRed); AppendText(" successfully saved to ", Color.Black); - AppendText(docPath + "\\Generated Icons\\" + ItemName + ".png", Color.SteelBlue, true); + AppendText(docPath + "\\Generated Icons\\" + currentItem + ".png", Color.SteelBlue, true); } } //ASSET IS A CHALLENGE => if (IDParser[ii].ExportType == "Texture2D") @@ -2151,10 +2461,19 @@ namespace FModel var filesPath = Directory.GetFiles(docPath + "\\Extracted", currentItem + ".*", SearchOption.AllDirectories).Where(x => !x.EndsWith(".png")).FirstOrDefault(); if (!File.Exists(filesPath)) { - await Task.Run(() => + if (isAllPAKs == false) { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + currentItem + "\" \"" + docPath + "\""); - }); + await Task.Run(() => + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + currentItem + "\" \"" + docPath + "\""); + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[currentItem] + "\" \"" + currentItem + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", currentItem + ".*", SearchOption.AllDirectories).Where(x => !x.EndsWith(".png")).FirstOrDefault(); } try @@ -2204,12 +2523,12 @@ namespace FModel { AppendText("Auto saving images set to ", Color.Black); AppendText("True", Color.Green, true); - ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + ItemName + ".png", ImageFormat.Png); + ItemIconPictureBox.Image.Save(docPath + "\\Generated Icons\\" + currentItem + ".png", ImageFormat.Png); AppendText("✔ ", Color.Green); - AppendText(ItemName, Color.DarkRed); + AppendText(currentItem, Color.DarkRed); AppendText(" successfully saved to ", Color.Black); - AppendText(docPath + "\\Generated Icons\\" + ItemName + ".png", Color.SteelBlue, true); + AppendText(docPath + "\\Generated Icons\\" + currentItem + ".png", Color.SteelBlue, true); } } //ASSET IS A TEXTURE => LOAD TEXTURE if (IDParser[ii].ExportType == "SoundWave") @@ -2228,10 +2547,19 @@ namespace FModel var filesPath = Directory.GetFiles(docPath + "\\Extracted", currentItem + ".uexp", SearchOption.AllDirectories).FirstOrDefault(); if (!File.Exists(filesPath)) { - await Task.Run(() => + if (isAllPAKs == false) { - jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + currentItem + "\" \"" + docPath + "\""); - }); + await Task.Run(() => + { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + currentPAK + "\" \"" + currentItem + "\" \"" + docPath + "\""); + }); + } + if (isAllPAKs == true) + { + await Task.Run(() => { + jwpmProcess("extract \"" + Properties.Settings.Default.FortnitePAKs + "\\" + AllPAKsDict[currentItem] + "\" \"" + currentItem + "\" \"" + docPath + "\""); + }); + } filesPath = Directory.GetFiles(docPath + "\\Extracted", currentItem + ".uexp", SearchOption.AllDirectories).FirstOrDefault(); } try @@ -2320,12 +2648,12 @@ namespace FModel saveTheDialog.Title = "Save Icon"; saveTheDialog.Filter = "PNG Files (*.png)|*.png"; saveTheDialog.InitialDirectory = docPath + "\\Generated Icons\\"; - saveTheDialog.FileName = ItemName; + saveTheDialog.FileName = currentItem; if (saveTheDialog.ShowDialog() == DialogResult.OK) { ItemIconPictureBox.Image.Save(saveTheDialog.FileName, ImageFormat.Png); AppendText("✔ ", Color.Green); - AppendText(ItemName, Color.DarkRed); + AppendText(currentItem, Color.DarkRed); AppendText(" successfully saved to ", Color.Black); AppendText(saveTheDialog.FileName, Color.SteelBlue, true); } @@ -2353,87 +2681,80 @@ namespace FModel private void mergeGeneratedImagesToolStripMenuItem_Click(object sender, EventArgs e) { - try + if (string.IsNullOrEmpty(Properties.Settings.Default.mergerFileName)) { - if (string.IsNullOrEmpty(Properties.Settings.Default.mergerFileName)) - { - MessageBox.Show("Please, set a name to your file before trying to merge images\n\nSteps:\n\t- Load button drop down menu\n\t- Options", "FModel Merger File Name Missing", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - else - { - OpenFileDialog theDialog = new OpenFileDialog(); - theDialog.Multiselect = true; - theDialog.InitialDirectory = docPath + "\\Generated Icons\\"; - theDialog.Title = "Choose your images"; - theDialog.Filter = "PNG Files (*.png)|*.png|JPEG Files (*.jpg)|*.jpg|BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*"; + MessageBox.Show("Please, set a name to your file before trying to merge images\n\nSteps:\n\t- Load button drop down menu\n\t- Options", "FModel Merger File Name Missing", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + else + { + OpenFileDialog theDialog = new OpenFileDialog(); + theDialog.Multiselect = true; + theDialog.InitialDirectory = docPath + "\\Generated Icons\\"; + theDialog.Title = "Choose your images"; + theDialog.Filter = "PNG Files (*.png)|*.png|JPEG Files (*.jpg)|*.jpg|BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*"; - if (theDialog.ShowDialog() == DialogResult.OK) + if (theDialog.ShowDialog() == DialogResult.OK) + { + List selectedImages = new List(); + foreach (var files in theDialog.FileNames) { - List selectedImages = new List(); - foreach (var files in theDialog.FileNames) - { - selectedImages.Add(Image.FromFile(files)); - } + selectedImages.Add(Image.FromFile(files)); + } - if (Properties.Settings.Default.mergerImagesRow == 0) - { - Properties.Settings.Default.mergerImagesRow = 7; - Properties.Settings.Default.Save(); - } - int numperrow = Properties.Settings.Default.mergerImagesRow; - var w = 530 * numperrow; - if (selectedImages.Count * 530 < 530 * numperrow) - { - w = selectedImages.Count * 530; - } + if (Properties.Settings.Default.mergerImagesRow == 0) + { + Properties.Settings.Default.mergerImagesRow = 7; + Properties.Settings.Default.Save(); + } + int numperrow = Properties.Settings.Default.mergerImagesRow; + var w = 530 * numperrow; + if (selectedImages.Count * 530 < 530 * numperrow) + { + w = selectedImages.Count * 530; + } - int h = int.Parse(Math.Ceiling(double.Parse(selectedImages.Count.ToString()) / numperrow).ToString()) * 530; - Bitmap bmp = new Bitmap(w - 8, h - 8); + int h = int.Parse(Math.Ceiling(double.Parse(selectedImages.Count.ToString()) / numperrow).ToString()) * 530; + Bitmap bmp = new Bitmap(w - 8, h - 8); - var num = 1; - var cur_w = 0; - var cur_h = 0; + var num = 1; + var cur_w = 0; + var cur_h = 0; - for (int i = 0; i < selectedImages.Count; i++) + for (int i = 0; i < selectedImages.Count; i++) + { + using (Graphics g = Graphics.FromImage(bmp)) { - using (Graphics g = Graphics.FromImage(bmp)) + g.DrawImage(selectedImages[i], new PointF(cur_w, cur_h)); + if (num % numperrow == 0) { - g.DrawImage(selectedImages[i], new PointF(cur_w, cur_h)); - if (num % numperrow == 0) - { - cur_w = 0; - cur_h += 530; - num += 1; - } - else - { - cur_w += 530; - num += 1; - } + cur_w = 0; + cur_h += 530; + num += 1; + } + else + { + cur_w += 530; + num += 1; } } - bmp.Save(docPath + "\\" + Properties.Settings.Default.mergerFileName + ".png", ImageFormat.Png); - var newForm = new Form(); - - PictureBox pb = new PictureBox(); - pb.Dock = DockStyle.Fill; - pb.Image = bmp; - pb.SizeMode = PictureBoxSizeMode.Zoom; - - newForm.WindowState = FormWindowState.Maximized; - newForm.Size = bmp.Size; - newForm.Icon = Properties.Resources.FNTools_Logo_Icon; - newForm.Text = docPath + "\\" + Properties.Settings.Default.mergerFileName + ".png"; - newForm.StartPosition = FormStartPosition.CenterScreen; - newForm.Controls.Add(pb); - newForm.Show(); } + bmp.Save(docPath + "\\" + Properties.Settings.Default.mergerFileName + ".png", ImageFormat.Png); + var newForm = new Form(); + + PictureBox pb = new PictureBox(); + pb.Dock = DockStyle.Fill; + pb.Image = bmp; + pb.SizeMode = PictureBoxSizeMode.Zoom; + + newForm.WindowState = FormWindowState.Maximized; + newForm.Size = bmp.Size; + newForm.Icon = Properties.Resources.FNTools_Logo_Icon; + newForm.Text = docPath + "\\" + Properties.Settings.Default.mergerFileName + ".png"; + newForm.StartPosition = FormStartPosition.CenterScreen; + newForm.Controls.Add(pb); + newForm.Show(); } } - catch (Exception ex) - { - Console.WriteLine(ex.StackTrace); - } } private void optionsToolStripMenuItem_Click(object sender, EventArgs e) diff --git a/FModel/PAKWindow.resx b/FModel/PAKWindow.resx index 5ebce2b5..3f99b7e2 100644 --- a/FModel/PAKWindow.resx +++ b/FModel/PAKWindow.resx @@ -131,7 +131,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACc - BwAAAk1TRnQBSQFMAgEBAgEAAUABAAFAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + BwAAAk1TRnQBSQFMAgEBAgEAAUgBAAFIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/README.md b/README.md index d78b79dc..cd40a3df 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,10 @@ I'd highly suggest you to use [UModel](https://github.com/gildor2/UModel) instea - [x] Multithreading - Need improvements - [x] Filter for the items ListBox - [x] Quest viewer or something -- [ ] More settings +- [ ] Load all paks +- [ ] Load only difference between 2 paks version +- [ ] Custom watermark option on icons +- [ ] Choose between extracted filename or displayName for icons file name - [ ] Stop button while extracting - [ ] Support for meshes - [ ] Support for animations