saved update mode settings + auto save as json + saving my progress on schematics + updated readme with video

This commit is contained in:
Asval 2019-07-29 23:54:40 +02:00
parent f668aab0c6
commit 0bf8c63ba0
14 changed files with 432 additions and 157 deletions

View File

@ -73,9 +73,6 @@
<setting name="mergerImagesSaveAs" serializeAs="String">
<value>False</value>
</setting>
<setting name="UMCTGalleries" serializeAs="String">
<value>False</value>
</setting>
<setting name="tConsKey" serializeAs="String">
<value />
</setting>
@ -91,6 +88,9 @@
<setting name="rarityNew" serializeAs="String">
<value>False</value>
</setting>
<setting name="UMParameters" serializeAs="String">
<value />
</setting>
</FModel.Properties.Settings>
</userSettings>
<runtime>

View File

@ -150,6 +150,7 @@
<Compile Include="Methods\DLLImport.cs" />
<Compile Include="Methods\IconGenerator\ItemGenerator\DrawText.cs" />
<Compile Include="Methods\IconGenerator\SchematicGenerator\SchematicIconDesign.cs" />
<Compile Include="Methods\IconGenerator\SchematicGenerator\SchematicInfoEntry.cs" />
<Compile Include="Methods\IconGenerator\SchematicGenerator\SchematicItemInfos.cs" />
<Compile Include="Methods\IconGenerator\Translations\LoadLocRes.cs" />
<Compile Include="Methods\IconGenerator\Translations\SearchResource.cs" />
@ -261,7 +262,6 @@
<None Include="Resources\L512v1.png" />
<None Include="Resources\E512v1.png" />
<None Include="Resources\C512v1.png" />
<None Include="Resources\FModel%281%29.ico" />
<None Include="Resources\FModel.ico" />
<None Include="Resources\FModel_Logo.png" />
<None Include="Resources\wTemplateF.png" />

View File

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using FModel.Properties;
@ -10,6 +11,7 @@ namespace FModel.Forms
public partial class UpdateModeSettings : Form
{
private static string _oldLanguage;
private static string[] parameters { get; set; }
public UpdateModeSettings()
{
@ -18,6 +20,12 @@ namespace FModel.Forms
InitializeComponent();
if (!string.IsNullOrEmpty(Properties.Settings.Default.UMParameters))
{
parameters = Properties.Settings.Default.UMParameters.Split(',');
setCheckListBoxItemChecked(parameters);
}
checkBox1.Checked = Properties.Settings.Default.rarityNew;
//WATERMARK
@ -58,6 +66,7 @@ namespace FModel.Forms
private void optionsOKButton_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
RegisterSettings.updateModeListParameters = new List<string>();
Properties.Settings.Default.UMFeatured = checkBox8.Checked;
@ -68,29 +77,31 @@ namespace FModel.Forms
Properties.Settings.Default.UMOpacity = trackBar1.Value;
//PARAMETERS
if (checkedListBox1.GetItemCheckState(0) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Cosmetics/"); }
if (checkedListBox1.GetItemCheckState(1) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/CosmeticVariantTokens/"); }
if (checkedListBox1.GetItemCheckState(2) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/BannerToken/"); }
if (checkedListBox1.GetItemCheckState(3) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/ChallengeBundles/"); }
if (checkedListBox1.GetItemCheckState(4) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Consumables/"); }
if (checkedListBox1.GetItemCheckState(5) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Gameplay/"); }
if (checkedListBox1.GetItemCheckState(6) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Traps/"); }
if (checkedListBox1.GetItemCheckState(7) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Weapons/"); }
if (checkedListBox1.GetItemCheckState(8) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Heroes/"); }
if (checkedListBox1.GetItemCheckState(9) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Defenders/"); }
if (checkedListBox1.GetItemCheckState(10) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Workers/"); }
if (checkedListBox1.GetItemCheckState(11) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Traps/"); }
if (checkedListBox1.GetItemCheckState(12) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Weapons/"); }
if (checkedListBox1.GetItemCheckState(13) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Ingredients/"); }
if (checkedListBox1.GetItemCheckState(14) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/PersistentResources/"); }
if (checkedListBox1.GetItemCheckState(15) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/CardPacks/"); }
if (checkedListBox1.GetItemCheckState(16) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Tokens/"); }
if (checkedListBox1.GetItemCheckState(0) == CheckState.Checked) { sb.Append("BRCosmetics,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Cosmetics/"); }
if (checkedListBox1.GetItemCheckState(1) == CheckState.Checked) { sb.Append("BRVariants,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/CosmeticVariantTokens/"); }
if (checkedListBox1.GetItemCheckState(2) == CheckState.Checked) { sb.Append("BRBanners,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/BannerToken/"); }
if (checkedListBox1.GetItemCheckState(3) == CheckState.Checked) { sb.Append("BRChallenges,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/ChallengeBundles/"); }
if (checkedListBox1.GetItemCheckState(4) == CheckState.Checked) { sb.Append("BRConsumables,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Consumables/"); }
if (checkedListBox1.GetItemCheckState(5) == CheckState.Checked) { sb.Append("BRGadgets,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Gameplay/"); }
if (checkedListBox1.GetItemCheckState(6) == CheckState.Checked) { sb.Append("BRTraps,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Traps/"); }
if (checkedListBox1.GetItemCheckState(7) == CheckState.Checked) { sb.Append("BRWeapons,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Athena/Items/Weapons/"); }
if (checkedListBox1.GetItemCheckState(8) == CheckState.Checked) { sb.Append("STWHeros,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Heroes/"); }
if (checkedListBox1.GetItemCheckState(9) == CheckState.Checked) { sb.Append("STWDefenders,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Defenders/"); }
if (checkedListBox1.GetItemCheckState(10) == CheckState.Checked) { sb.Append("STWWorkers,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Workers/"); }
if (checkedListBox1.GetItemCheckState(11) == CheckState.Checked) { sb.Append("STWTraps,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Traps/"); }
if (checkedListBox1.GetItemCheckState(12) == CheckState.Checked) { sb.Append("STWWeapons,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Weapons/"); }
if (checkedListBox1.GetItemCheckState(13) == CheckState.Checked) { sb.Append("STWIngredients,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Ingredients/"); }
if (checkedListBox1.GetItemCheckState(14) == CheckState.Checked) { sb.Append("STWResources,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/PersistentResources/"); }
if (checkedListBox1.GetItemCheckState(15) == CheckState.Checked) { sb.Append("STWCardpacks,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/CardPacks/"); }
if (checkedListBox1.GetItemCheckState(16) == CheckState.Checked) { sb.Append("Tokens,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/Items/Tokens/"); }
if (checkedListBox2.GetItemCheckState(0) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/2dAssets/"); }
if (checkedListBox2.GetItemCheckState(1) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/UI/Foundation/Textures/BattleRoyale/FeaturedItems/"); }
if (checkedListBox2.GetItemCheckState(2) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/UI/Foundation/Textures/Icons/"); }
if (checkedListBox2.GetItemCheckState(3) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/UI/Foundation/Textures/Banner/"); }
if (checkedListBox2.GetItemCheckState(4) == CheckState.Checked) { RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/UI/Foundation/Textures/LoadingScreens/"); }
if (checkedListBox2.GetItemCheckState(0) == CheckState.Checked) { sb.Append("T2DAssets,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/2dAssets/"); }
if (checkedListBox2.GetItemCheckState(1) == CheckState.Checked) { sb.Append("TFeatured,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/UI/Foundation/Textures/BattleRoyale/FeaturedItems/"); }
if (checkedListBox2.GetItemCheckState(2) == CheckState.Checked) { sb.Append("TIcons,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/UI/Foundation/Textures/Icons/"); }
if (checkedListBox2.GetItemCheckState(3) == CheckState.Checked) { sb.Append("TBanners,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/UI/Foundation/Textures/Banner/"); }
if (checkedListBox2.GetItemCheckState(4) == CheckState.Checked) { sb.Append("TLoadingScreens,"); RegisterSettings.updateModeListParameters.Add("FortniteGame/Content/UI/Foundation/Textures/LoadingScreens/"); }
Properties.Settings.Default.UMParameters = sb.ToString();
//LOCRES
Properties.Settings.Default.IconLanguage = comboBox1.SelectedItem.ToString();
@ -103,6 +114,84 @@ namespace FModel.Forms
Close();
}
private void setCheckListBoxItemChecked(string[] parameters)
{
for (int i = 0; i < parameters.Length; i++)
{
switch (parameters[i])
{
case "BRCosmetics":
checkedListBox1.SetItemChecked(0, true);
break;
case "BRVariants":
checkedListBox1.SetItemChecked(1, true);
break;
case "BRBanners":
checkedListBox1.SetItemChecked(2, true);
break;
case "BRChallenges":
checkedListBox1.SetItemChecked(3, true);
break;
case "BRConsumables":
checkedListBox1.SetItemChecked(4, true);
break;
case "BRGadgets":
checkedListBox1.SetItemChecked(5, true);
break;
case "BRTraps":
checkedListBox1.SetItemChecked(6, true);
break;
case "BRWeapons":
checkedListBox1.SetItemChecked(7, true);
break;
case "STWHeros":
checkedListBox1.SetItemChecked(8, true);
break;
case "STWDefenders":
checkedListBox1.SetItemChecked(9, true);
break;
case "STWWorkers":
checkedListBox1.SetItemChecked(10, true);
break;
case "STWTraps":
checkedListBox1.SetItemChecked(11, true);
break;
case "STWWeapons":
checkedListBox1.SetItemChecked(12, true);
break;
case "STWIngredients":
checkedListBox1.SetItemChecked(13, true);
break;
case "STWResources":
checkedListBox1.SetItemChecked(14, true);
break;
case "STWCardpacks":
checkedListBox1.SetItemChecked(15, true);
break;
case "Tokens":
checkedListBox1.SetItemChecked(16, true);
break;
case "T2DAssets":
checkedListBox2.SetItemChecked(0, true);
break;
case "TFeatured":
checkedListBox2.SetItemChecked(1, true);
break;
case "TIcons":
checkedListBox2.SetItemChecked(2, true);
break;
case "TBanners":
checkedListBox2.SetItemChecked(3, true);
break;
case "TLoadingScreens":
checkedListBox2.SetItemChecked(4, true);
break;
default:
break;
}
}
}
#region SELECT WATERMARK
private void button1_Click(object sender, EventArgs e)
{

View File

@ -49,6 +49,8 @@ namespace FModel
this.saveAsJSONToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.copySelectedFilePathToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.openExtractionFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.imageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.autoSaveImagesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -85,8 +87,8 @@ namespace FModel
this.saveAsJSONToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenuStrip2 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.extractFolderContentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openExtractionFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator();
this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator();
this.autoSaveAsJSONToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.statusStrip1.SuspendLayout();
this.menuStrip1.SuspendLayout();
this.panel1.SuspendLayout();
@ -223,7 +225,9 @@ namespace FModel
//
this.filesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.searchToolStripMenuItem,
this.toolStripSeparator7,
this.saveAsJSONToolStripMenuItem,
this.autoSaveAsJSONToolStripMenuItem,
this.toolStripSeparator5,
this.copySelectedFilePathToolStripMenuItem,
this.toolStripSeparator6,
@ -260,6 +264,18 @@ namespace FModel
this.copySelectedFilePathToolStripMenuItem.Text = "Copy Selected File Path";
this.copySelectedFilePathToolStripMenuItem.Click += new System.EventHandler(this.CopySelectedFilePathToolStripMenuItem_Click);
//
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(194, 6);
//
// openExtractionFolderToolStripMenuItem
//
this.openExtractionFolderToolStripMenuItem.Name = "openExtractionFolderToolStripMenuItem";
this.openExtractionFolderToolStripMenuItem.Size = new System.Drawing.Size(197, 22);
this.openExtractionFolderToolStripMenuItem.Text = "Open Extraction Folder";
this.openExtractionFolderToolStripMenuItem.Click += new System.EventHandler(this.openExtractionFolderToolStripMenuItem_Click);
//
// imageToolStripMenuItem
//
this.imageToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@ -309,7 +325,7 @@ namespace FModel
this.tweetToolStripMenuItem.Name = "tweetToolStripMenuItem";
this.tweetToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.F4;
this.tweetToolStripMenuItem.Size = new System.Drawing.Size(168, 22);
this.tweetToolStripMenuItem.Text = "Tweet";
this.tweetToolStripMenuItem.Text = "[BETA] Tweet";
this.tweetToolStripMenuItem.Click += new System.EventHandler(this.TweetToolStripMenuItem_Click);
//
// helpToolStripMenuItem
@ -600,17 +616,17 @@ namespace FModel
this.extractFolderContentsToolStripMenuItem.Text = "Extract Folder Contents";
this.extractFolderContentsToolStripMenuItem.Click += new System.EventHandler(this.ExtractFolderContentsToolStripMenuItem_Click);
//
// openExtractionFolderToolStripMenuItem
// toolStripSeparator7
//
this.openExtractionFolderToolStripMenuItem.Name = "openExtractionFolderToolStripMenuItem";
this.openExtractionFolderToolStripMenuItem.Size = new System.Drawing.Size(197, 22);
this.openExtractionFolderToolStripMenuItem.Text = "Open Extraction Folder";
this.openExtractionFolderToolStripMenuItem.Click += new System.EventHandler(this.openExtractionFolderToolStripMenuItem_Click);
this.toolStripSeparator7.Name = "toolStripSeparator7";
this.toolStripSeparator7.Size = new System.Drawing.Size(194, 6);
//
// toolStripSeparator6
// autoSaveAsJSONToolStripMenuItem
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(194, 6);
this.autoSaveAsJSONToolStripMenuItem.CheckOnClick = true;
this.autoSaveAsJSONToolStripMenuItem.Name = "autoSaveAsJSONToolStripMenuItem";
this.autoSaveAsJSONToolStripMenuItem.Size = new System.Drawing.Size(197, 22);
this.autoSaveAsJSONToolStripMenuItem.Text = "Auto Save as JSON";
//
// MainWindow
//
@ -704,6 +720,8 @@ namespace FModel
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
private System.Windows.Forms.ToolStripMenuItem openExtractionFolderToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator7;
private System.Windows.Forms.ToolStripMenuItem autoSaveAsJSONToolStripMenuItem;
}
}

View File

@ -397,7 +397,7 @@ namespace FModel
{
TreeParsePath(treeView1.Nodes, PakHelper.PakAsTxt[i].Replace(PakHelper.PakAsTxt[i].Split('/').Last(), ""));
}
Utilities.ExpandToLevel(treeView1.Nodes, 2);
Utilities.ExpandToLevel(treeView1.Nodes, 1);
treeView1.EndUpdate();
}));
new UpdateMyState(Settings.Default.PAKsPath + "\\" + selectedPak.ClickedItem.Text, "Success").ChangeProcessState();
@ -651,6 +651,7 @@ namespace FModel
_selectedItemsArray = null;
Checking.UmWorking = false;
GC.Collect();
Invoke(new Action(() =>
{
updateModeToolStripMenuItem.Checked = false;
@ -1044,18 +1045,10 @@ namespace FModel
DrawText.DrawTexts(theItem, g, specialMode);
if (autoSaveImagesToolStripMenuItem.Checked || Checking.UmWorking)
{
bmp.Save(App.DefaultOutputPath + "\\Icons\\" + ThePak.CurrentUsedItem + ".png", ImageFormat.Png);
if (File.Exists(App.DefaultOutputPath + "\\Icons\\" + ThePak.CurrentUsedItem + ".png"))
{
new UpdateMyConsole(ThePak.CurrentUsedItem, Color.DarkRed).AppendToConsole();
new UpdateMyConsole(" successfully saved", Color.Black, true).AppendToConsole();
}
}
pictureBox1.Image = bmp;
AutoSaveImage();
AutoSaveAsJSON();
g.Dispose();
}
@ -1139,72 +1132,20 @@ namespace FModel
pictureBox1.Image = newImg;
}
if (autoSaveImagesToolStripMenuItem.Checked || Checking.UmWorking)
{
Invoke(new Action(() =>
{
pictureBox1.Image.Save(App.DefaultOutputPath + "\\Icons\\" + ThePak.CurrentUsedItem + ".png", ImageFormat.Png);
}));
if (File.Exists(App.DefaultOutputPath + "\\Icons\\" + ThePak.CurrentUsedItem + ".png"))
{
new UpdateMyConsole(ThePak.CurrentUsedItem, Color.DarkRed).AppendToConsole();
new UpdateMyConsole(" successfully saved", Color.Black, true).AppendToConsole();
}
}
AutoSaveImage();
AutoSaveAsJSON();
BundleDesign.toDrawOn.Dispose(); //actually this is the most useful thing in this method
}
private void CreateSchematicIcon(JToken theItem)
{
SchematicIconDesign.toDrawOn = SchematicIconDesign.createGraphic(522, 822);
JToken craftedItem = SchematicItemInfos.getSchematicRecipeResult(theItem);
Rarity.DrawRarity(craftedItem, SchematicIconDesign.toDrawOn);
ItemIcon.ItemIconPath = string.Empty;
ItemIcon.GetItemIcon(craftedItem, Settings.Default.loadFeaturedImage);
if (File.Exists(ItemIcon.ItemIconPath))
{
Image itemIcon;
using (var bmpTemp = new Bitmap(ItemIcon.ItemIconPath))
{
itemIcon = new Bitmap(bmpTemp);
}
SchematicIconDesign.toDrawOn.DrawImage(ImageUtilities.ResizeImage(itemIcon, 512, 512), new Point(5, 5));
}
else
{
Image itemIcon = Resources.unknown512;
SchematicIconDesign.toDrawOn.DrawImage(itemIcon, new Point(0, 0));
}
if (Settings.Default.rarityNew)
{
GraphicsPath p = new GraphicsPath();
p.StartFigure();
p.AddLine(4, 438, 517, 383);
p.AddLine(517, 383, 517, 383 + 134);
p.AddLine(4, 383 + 134, 4, 383 + 134);
p.AddLine(4, 383 + 134, 4, 438);
p.CloseFigure();
SchematicIconDesign.toDrawOn.FillPath(new SolidBrush(Color.FromArgb(70, 0, 0, 50)), p);
}
else { SchematicIconDesign.toDrawOn.FillRectangle(new SolidBrush(Color.FromArgb(70, 0, 0, 50)), new Rectangle(5, 383, 512, 134)); }
DrawText.DrawTexts(craftedItem, SchematicIconDesign.toDrawOn, "");
if (autoSaveImagesToolStripMenuItem.Checked || Checking.UmWorking)
{
SchematicIconDesign.schematicBitmap.Save(App.DefaultOutputPath + "\\Icons\\" + ThePak.CurrentUsedItem + ".png", ImageFormat.Png);
if (File.Exists(App.DefaultOutputPath + "\\Icons\\" + ThePak.CurrentUsedItem + ".png"))
{
new UpdateMyConsole(ThePak.CurrentUsedItem, Color.DarkRed).AppendToConsole();
new UpdateMyConsole(" successfully saved", Color.Black, true).AppendToConsole();
}
}
SchematicIconDesign.createItemDefinitionIcon(theItem);
SchematicIconDesign.createIngredientIcon();
pictureBox1.Image = SchematicIconDesign.schematicBitmap;
AutoSaveImage();
AutoSaveAsJSON();
SchematicIconDesign.toDrawOn.Dispose();
}
@ -1317,6 +1258,7 @@ namespace FModel
}
_selectedItemsArray = null;
GC.Collect();
Invoke(new Action(() =>
{
StopButton.Enabled = false;
@ -1618,6 +1560,50 @@ namespace FModel
}
}
}
private void AutoSaveAsJSON()
{
if (autoSaveAsJSONToolStripMenuItem.Checked)
{
string text = string.Empty;
Invoke(new Action(() =>
{
text = scintilla1.Text;
}));
if (!string.IsNullOrEmpty(text))
{
string filename = ThePak.CurrentUsedItem.Contains('.') ? ThePak.CurrentUsedItem.Substring(0, ThePak.CurrentUsedItem.LastIndexOf('.')) : ThePak.CurrentUsedItem;
File.WriteAllText(App.DefaultOutputPath + "\\Saved_JSON\\" + filename + ".json", text);
if (File.Exists(App.DefaultOutputPath + "\\Saved_JSON\\" + filename + ".json"))
{
new UpdateMyConsole(ThePak.CurrentUsedItem, Color.DarkRed).AppendToConsole();
new UpdateMyConsole("'s properties successfully saved", Color.Black, true).AppendToConsole();
}
else
{
new UpdateMyConsole("Fail to save ", Color.Black).AppendToConsole();
new UpdateMyConsole(ThePak.CurrentUsedItem, Color.DarkRed, true).AppendToConsole();
}
}
}
}
private void AutoSaveImage()
{
if (autoSaveImagesToolStripMenuItem.Checked || Checking.UmWorking)
{
Invoke(new Action(() =>
{
pictureBox1.Image.Save(App.DefaultOutputPath + "\\Icons\\" + ThePak.CurrentUsedItem + ".png", ImageFormat.Png);
}));
if (File.Exists(App.DefaultOutputPath + "\\Icons\\" + ThePak.CurrentUsedItem + ".png"))
{
new UpdateMyConsole(ThePak.CurrentUsedItem, Color.DarkRed).AppendToConsole();
new UpdateMyConsole("'s image successfully saved", Color.Black, true).AppendToConsole();
}
}
}
private void openExtractionFolderToolStripMenuItem_Click(object sender, EventArgs e)
{

View File

@ -131,7 +131,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABa
CAAAAk1TRnQBSQFMAgEBAgEAAdgBAQHYAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CAAAAk1TRnQBSQFMAgEBAgEAAegBAQHoAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA

View File

@ -1,6 +1,13 @@
using System.Drawing;
using csharp_wick;
using FModel.Properties;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.IO;
using System.Linq;
namespace FModel
{
@ -17,5 +24,113 @@ namespace FModel
g.SmoothingMode = SmoothingMode.HighQuality;
return g;
}
public static void createItemDefinitionIcon(JToken theItem)
{
JToken craftedItem = SchematicItemInfos.setSchematicData(theItem);
toDrawOn = createGraphic(522, 522 + (75 * SchematicItemInfos.schematicInfoList.Count));
Rarity.DrawRarity(craftedItem, toDrawOn);
ItemIcon.ItemIconPath = string.Empty;
ItemIcon.GetItemIcon(craftedItem, Settings.Default.loadFeaturedImage);
if (File.Exists(ItemIcon.ItemIconPath))
{
Image itemIcon;
using (var bmpTemp = new Bitmap(ItemIcon.ItemIconPath))
{
itemIcon = new Bitmap(bmpTemp);
}
toDrawOn.DrawImage(ImageUtilities.ResizeImage(itemIcon, 512, 512), new Point(5, 5));
}
else
{
Image itemIcon = Resources.unknown512;
toDrawOn.DrawImage(itemIcon, new Point(0, 0));
}
if (Settings.Default.rarityNew)
{
GraphicsPath p = new GraphicsPath();
p.StartFigure();
p.AddLine(4, 438, 517, 383);
p.AddLine(517, 383, 517, 383 + 134);
p.AddLine(4, 383 + 134, 4, 383 + 134);
p.AddLine(4, 383 + 134, 4, 438);
p.CloseFigure();
toDrawOn.FillPath(new SolidBrush(Color.FromArgb(70, 0, 0, 50)), p);
}
else { toDrawOn.FillRectangle(new SolidBrush(Color.FromArgb(70, 0, 0, 50)), new Rectangle(5, 383, 512, 134)); }
DrawText.DrawTexts(craftedItem, toDrawOn, "");
}
public static void createIngredientIcon()
{
for (int i = 0; i < SchematicItemInfos.schematicInfoList.Count; i++)
{
string ingredientsFileName = ThePak.AllpaksDictionary.Where(x => string.Equals(x.Key, SchematicItemInfos.schematicInfoList[i].theIngredientItemDefinition, StringComparison.CurrentCultureIgnoreCase)).Select(d => d.Key).FirstOrDefault();
if (!string.IsNullOrEmpty(ingredientsFileName))
{
string extractedIconPath = JohnWick.ExtractAsset(ThePak.AllpaksDictionary[ingredientsFileName], ingredientsFileName);
if (extractedIconPath != null)
{
if (extractedIconPath.Contains(".uasset") || extractedIconPath.Contains(".uexp") || extractedIconPath.Contains(".ubulk"))
{
JohnWick.MyAsset = new PakAsset(extractedIconPath.Substring(0, extractedIconPath.LastIndexOf('.')));
try
{
if (JohnWick.MyAsset.GetSerialized() != null)
{
dynamic AssetData = JsonConvert.DeserializeObject(JohnWick.MyAsset.GetSerialized());
JArray AssetArray = JArray.FromObject(AssetData);
JToken rarity = AssetData[0]["Rarity"];
if (rarity != null)
{
fillSchematicIcon(rarity, i);
}
}
}
catch (JsonSerializationException)
{
//do not crash when JsonSerialization does weird stuff
}
}
}
}
}
}
public static void fillSchematicIcon(JToken rarity, int i)
{
Color rarityColor;
switch(rarity.Value<string>())
{
case "EFortRarity::Transcendent":
rarityColor = Color.FromArgb(255, 155, 39, 69);
break;
case "EFortRarity::Mythic":
rarityColor = Color.FromArgb(255, 170, 143, 47);
break;
case "EFortRarity::Legendary":
rarityColor = Color.FromArgb(255, 170, 96, 47);
break;
case "EFortRarity::Epic":
case "EFortRarity::Quality":
rarityColor = Color.FromArgb(255, 96, 47, 170);
break;
case "EFortRarity::Rare":
rarityColor = Color.FromArgb(255, 55, 92, 163);
break;
case "EFortRarity::Common":
rarityColor = Color.FromArgb(255, 109, 109, 109);
break;
default:
rarityColor = Color.FromArgb(255, 87, 155, 39);
break;
}
toDrawOn.FillRectangle(new SolidBrush(rarityColor), new Rectangle(0, 447 + (75 * i), schematicBitmap.Width, 75));
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FModel
{
public struct SchematicInfoEntry : IEquatable<SchematicInfoEntry>
{
internal SchematicInfoEntry(string myIngredientItemDefinition, string myIngredientQuantity)
{
theIngredientItemDefinition = myIngredientItemDefinition;
theIngredientQuantity = myIngredientQuantity;
}
public string theIngredientItemDefinition { get; set; }
public string theIngredientQuantity { get; set; }
bool IEquatable<SchematicInfoEntry>.Equals(SchematicInfoEntry other)
{
throw new NotImplementedException();
}
}
}

View File

@ -2,14 +2,18 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
namespace FModel
{
class SchematicItemInfos
{
public static JToken getSchematicRecipeResult(JToken schematicAsset)
public static List<SchematicInfoEntry> schematicInfoList { get; set; }
public static JToken setSchematicData(JToken schematicAsset)
{
schematicInfoList = new List<SchematicInfoEntry>();
JToken toReturn = null;
JToken craftingRecipe = schematicAsset["CraftingRecipe"];
@ -34,36 +38,8 @@ namespace FModel
JToken weaponRowName = ((JObject)AssetArray[0]).GetValue(craftingRecipe["RowName"].Value<string>(), StringComparison.OrdinalIgnoreCase);
if (weaponRowName != null)
{
JToken recipeResults = weaponRowName["RecipeResults"];
if (recipeResults != null)
{
JToken primaryAssetName = recipeResults[0]["ItemPrimaryAssetId"]["PrimaryAssetName"];
if (primaryAssetName != null)
{
string primaryAssetNameInDict = ThePak.AllpaksDictionary.Where(x => string.Equals(x.Key, primaryAssetName.Value<string>(), StringComparison.CurrentCultureIgnoreCase)).Select(d => d.Key).FirstOrDefault();
string primaryAssetTableFilePath = JohnWick.ExtractAsset(ThePak.AllpaksDictionary[primaryAssetNameInDict], primaryAssetNameInDict);
if (!string.IsNullOrEmpty(primaryAssetTableFilePath))
{
if (primaryAssetTableFilePath.Contains(".uasset") || primaryAssetTableFilePath.Contains(".uexp") || primaryAssetTableFilePath.Contains(".ubulk"))
{
JohnWick.MyAsset = new PakAsset(primaryAssetTableFilePath.Substring(0, primaryAssetTableFilePath.LastIndexOf('.')));
try
{
if (JohnWick.MyAsset.GetSerialized() != null)
{
dynamic primaryAssetData = JsonConvert.DeserializeObject(JohnWick.MyAsset.GetSerialized());
JArray primaryAssetArray = JArray.FromObject(primaryAssetData);
toReturn = primaryAssetArray[0];
}
}
catch (JsonSerializationException)
{
//do not crash when JsonSerialization does weird stuff
}
}
}
}
}
toReturn = getSchematicRecipeResult(weaponRowName);
registerSchematicRecipeCosts(weaponRowName);
}
}
}
@ -78,5 +54,64 @@ namespace FModel
return toReturn;
}
public static JToken getSchematicRecipeResult(JToken schematicDataTable)
{
JToken toReturn = null;
JToken recipeResults = schematicDataTable["RecipeResults"];
if (recipeResults != null)
{
JToken primaryAssetName = recipeResults[0]["ItemPrimaryAssetId"]["PrimaryAssetName"];
if (primaryAssetName != null)
{
string primaryAssetNameInDict = ThePak.AllpaksDictionary.Where(x => string.Equals(x.Key, primaryAssetName.Value<string>(), StringComparison.CurrentCultureIgnoreCase)).Select(d => d.Key).FirstOrDefault();
string primaryAssetTableFilePath = JohnWick.ExtractAsset(ThePak.AllpaksDictionary[primaryAssetNameInDict], primaryAssetNameInDict);
if (!string.IsNullOrEmpty(primaryAssetTableFilePath))
{
if (primaryAssetTableFilePath.Contains(".uasset") || primaryAssetTableFilePath.Contains(".uexp") || primaryAssetTableFilePath.Contains(".ubulk"))
{
JohnWick.MyAsset = new PakAsset(primaryAssetTableFilePath.Substring(0, primaryAssetTableFilePath.LastIndexOf('.')));
try
{
if (JohnWick.MyAsset.GetSerialized() != null)
{
dynamic primaryAssetData = JsonConvert.DeserializeObject(JohnWick.MyAsset.GetSerialized());
JArray primaryAssetArray = JArray.FromObject(primaryAssetData);
toReturn = primaryAssetArray[0];
}
}
catch (JsonSerializationException)
{
//do not crash when JsonSerialization does weird stuff
}
}
}
}
}
return toReturn;
}
public static void registerSchematicRecipeCosts(JToken schematicDataTable)
{
JToken recipeCosts = schematicDataTable["RecipeCosts"];
if (recipeCosts != null)
{
JArray recipeCostsArray = recipeCosts.Value<JArray>();
foreach (JToken token in recipeCostsArray)
{
JToken primaryAssetName = token["ItemPrimaryAssetId"]["PrimaryAssetName"];
JToken quantity = token["Quantity"];
if (primaryAssetName != null && quantity != null)
{
System.Diagnostics.Debug.WriteLine("\"" + primaryAssetName.Value<string>() + "\"\t\t" + quantity.Value<string>());
SchematicInfoEntry currentEntry = new SchematicInfoEntry(primaryAssetName.Value<string>(), quantity.Value<string>());
bool isAlreadyAdded = schematicInfoList.Any(item => item.theIngredientItemDefinition.Equals(currentEntry.theIngredientItemDefinition, StringComparison.InvariantCultureIgnoreCase) && item.theIngredientQuantity == currentEntry.theIngredientQuantity);
if (!isAlreadyAdded) { schematicInfoList.Add(currentEntry); }
}
}
}
}
}
}

View File

@ -60,6 +60,8 @@ namespace FModel
AssetPath = WriteFile(results[i], b).Replace("/", "\\");
}
pakExtractor = null;
pakFiles = null;
return AssetPath;
}

View File

@ -54,6 +54,7 @@ namespace FModel
RegisterInDict(ThePak.mainPaksList[i].thePak, CurrentUsedPakLines, mountPoint, theSinglePak, loadAllPaKs);
}
CurrentUsedPakLines = null;
}
if (bMainKeyWorking) { LoadLocRes.LoadMySelectedLocRes(Settings.Default.IconLanguage); }
@ -86,6 +87,7 @@ namespace FModel
RegisterInDict(ThePak.dynamicPaksList[i].thePak, CurrentUsedPakLines, mountPoint, theSinglePak, loadAllPaKs);
}
CurrentUsedPakLines = null;
}
}
@ -95,6 +97,7 @@ namespace FModel
}
new UpdateMyState("Building tree, please wait...", "Loading").ChangeProcessState();
GC.Collect();
}
/// <summary>

View File

@ -275,18 +275,6 @@ namespace FModel.Properties {
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool UMCTGalleries {
get {
return ((bool)(this["UMCTGalleries"]));
}
set {
this["UMCTGalleries"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
@ -346,5 +334,17 @@ namespace FModel.Properties {
this["rarityNew"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string UMParameters {
get {
return ((string)(this["UMParameters"]));
}
set {
this["UMParameters"] = value;
}
}
}
}

View File

@ -65,9 +65,6 @@
<Setting Name="mergerImagesSaveAs" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="UMCTGalleries" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="tConsKey" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
@ -83,5 +80,8 @@
<Setting Name="rarityNew" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="UMParameters" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>

View File

@ -1,4 +1,4 @@
# FModel
# FModel
[![](https://img.shields.io/github/downloads/iAmAsval/FModel/total.svg?color=green&label=Total%20Downloads&logo=buzzfeed&logoColor=white)](https://github.com/iAmAsval/FModel/releases)
[![](https://img.shields.io/github/downloads/iAmAsval/FModel/latest/total.svg?label=2.4.2.2&logo=buzzfeed&logoColor=white)](https://github.com/iAmAsval/FModel//releases/latest)
[![](https://img.shields.io/badge/License-GPL-blue.svg?logo=gnu)](https://github.com/iAmAsval/FModel/blob/master/LICENSE)
@ -13,7 +13,10 @@
### Download
[![](https://img.shields.io/badge/Release-2.4.2.2-orange.svg?logo=github)](https://github.com/iAmAsval/FModel/releases/latest)
### How To Use
><p align="center"><a href="https://www.youtube.com/watch?v=rWlux5vg9Xs">Video Tutorial by FireMonkey</a></p>
**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.
![](https://i.imgur.com/9AUVUVU.gif)
**2.** Restart the executable, go to the AES Manager and add your AES Keys, click **Load** and select your .PAK file