This commit is contained in:
Razmoth
2023-04-01 17:51:33 +04:00
parent 29e99495de
commit c7d60450f8
25 changed files with 1077 additions and 735 deletions

View File

@@ -85,9 +85,6 @@
<setting name="selectedAssetMapType" serializeAs="String">
<value>0</value>
</setting>
<setting name="exportMiHoYoBinData" serializeAs="String">
<value>True</value>
</setting>
<setting name="collectAnimations" serializeAs="String">
<value>True</value>
</setting>

View File

@@ -93,8 +93,8 @@ namespace AssetStudioGUI
clearConsoleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
miscToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
assetHelpersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
cABMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
CABMapNameComboBox = new System.Windows.Forms.ToolStripComboBox();
MapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
MapNameComboBox = new System.Windows.Forms.ToolStripComboBox();
toolStripMenuItem20 = new System.Windows.Forms.ToolStripMenuItem();
toolStripMenuItem21 = new System.Windows.Forms.ToolStripMenuItem();
assetMapToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -604,37 +604,37 @@ namespace AssetStudioGUI
//
// assetHelpersToolStripMenuItem
//
assetHelpersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { cABMapToolStripMenuItem, assetMapToolStripMenuItem });
assetHelpersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { MapToolStripMenuItem, assetMapToolStripMenuItem });
assetHelpersToolStripMenuItem.Name = "assetHelpersToolStripMenuItem";
assetHelpersToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
assetHelpersToolStripMenuItem.Text = "Asset Helpers";
assetHelpersToolStripMenuItem.DropDownOpening += assetHelpersToolStripMenuItem_DropDownOpening;
//
// cABMapToolStripMenuItem
// MapToolStripMenuItem
//
cABMapToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { CABMapNameComboBox, toolStripMenuItem20, toolStripMenuItem21 });
cABMapToolStripMenuItem.Name = "cABMapToolStripMenuItem";
cABMapToolStripMenuItem.Size = new System.Drawing.Size(126, 22);
cABMapToolStripMenuItem.Text = "CABMap";
MapToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { MapNameComboBox, toolStripMenuItem20, toolStripMenuItem21 });
MapToolStripMenuItem.Name = "MapToolStripMenuItem";
MapToolStripMenuItem.Size = new System.Drawing.Size(126, 22);
MapToolStripMenuItem.Text = "Map";
//
// CABMapNameComboBox
// MapNameComboBox
//
CABMapNameComboBox.Name = "CABMapNameComboBox";
CABMapNameComboBox.Size = new System.Drawing.Size(121, 23);
CABMapNameComboBox.ToolTipText = "Enter name of CABMap here";
MapNameComboBox.Name = "MapNameComboBox";
MapNameComboBox.Size = new System.Drawing.Size(121, 23);
MapNameComboBox.ToolTipText = "Enter name of Map here";
//
// toolStripMenuItem20
//
toolStripMenuItem20.Name = "toolStripMenuItem20";
toolStripMenuItem20.Size = new System.Drawing.Size(181, 22);
toolStripMenuItem20.Text = "Build CABMap";
toolStripMenuItem20.Text = "Build Map";
toolStripMenuItem20.Click += toolStripMenuItem20_Click;
//
// toolStripMenuItem21
//
toolStripMenuItem21.Name = "toolStripMenuItem21";
toolStripMenuItem21.Size = new System.Drawing.Size(181, 22);
toolStripMenuItem21.Text = "Clear CABMap";
toolStripMenuItem21.Text = "Clear Map";
toolStripMenuItem21.Click += toolStripMenuItem21_Click;
//
// assetMapToolStripMenuItem
@@ -1362,13 +1362,13 @@ namespace AssetStudioGUI
private System.Windows.Forms.ToolStripMenuItem assetHelpersToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem20;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem22;
private System.Windows.Forms.ToolStripComboBox CABMapNameComboBox;
private System.Windows.Forms.ToolStripComboBox MapNameComboBox;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator6;
private System.Windows.Forms.ToolStripMenuItem resetToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem abortStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem21;
private System.Windows.Forms.ToolStripMenuItem cABMapToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem MapToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem assetMapToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem loadAIToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem clearConsoleToolStripMenuItem;

View File

@@ -108,7 +108,6 @@ namespace AssetStudioGUI
displayInfo.Checked = Properties.Settings.Default.displayInfo;
enablePreview.Checked = Properties.Settings.Default.enablePreview;
assetsManager.ResolveDependencies = Properties.Settings.Default.enableResolveDependencies;
MiHoYoBinData.Exportable = Properties.Settings.Default.exportMiHoYoBinData;
MiHoYoBinData.Encrypted = Properties.Settings.Default.encrypted;
MiHoYoBinData.Key = Properties.Settings.Default.key;
@@ -155,7 +154,7 @@ namespace AssetStudioGUI
Studio.Game = GameManager.GetGame(Properties.Settings.Default.selectedGame);
Logger.Info($"Target Game type is {Studio.Game.Type}");
CABMapNameComboBox.SelectedIndexChanged += new EventHandler(specifyNameComboBox_SelectedIndexChanged);
MapNameComboBox.SelectedIndexChanged += new EventHandler(specifyNameComboBox_SelectedIndexChanged);
}
private void AssetStudioGUIForm_DragEnter(object sender, DragEventArgs e)
{
@@ -1719,8 +1718,8 @@ namespace AssetStudioGUI
{
if (assetHelpersToolStripMenuItem.Enabled)
{
CABMapNameComboBox.Items.Clear();
CABMapNameComboBox.Items.AddRange(AssetsHelper.GetMaps());
MapNameComboBox.Items.Clear();
MapNameComboBox.Items.AddRange(AssetsHelper.GetMaps());
}
}
@@ -1780,14 +1779,18 @@ namespace AssetStudioGUI
if (int.TryParse(asset.Container, out var value))
{
var last = unchecked((uint)value);
var path = ResourceIndex.GetAssetPath(last);
if (!string.IsNullOrEmpty(path))
var name = Path.GetFileNameWithoutExtension(asset.SourceFile.originalPath);
if (uint.TryParse(name, out var id))
{
asset.Container = path;
asset.SubItems[1].Text = path;
if (asset.Type == ClassIDType.MiHoYoBinData)
var path = ResourceIndex.GetContainer(id, last);
if (!string.IsNullOrEmpty(path))
{
asset.Text = Path.GetFileNameWithoutExtension(path);
asset.Container = path;
asset.SubItems[1].Text = path;
if (asset.Type == ClassIDType.MiHoYoBinData)
{
asset.Text = Path.GetFileNameWithoutExtension(path);
}
}
}
}
@@ -1841,7 +1844,7 @@ namespace AssetStudioGUI
miscToolStripMenuItem.DropDown.Visible = false;
InvokeUpdate(miscToolStripMenuItem, false);
var name = CABMapNameComboBox.SelectedItem.ToString();
var name = MapNameComboBox.SelectedItem.ToString();
await Task.Run(() => AssetsHelper.LoadMap(name));
ResetForm();
@@ -1856,8 +1859,8 @@ namespace AssetStudioGUI
miscToolStripMenuItem.DropDown.Visible = false;
InvokeUpdate(miscToolStripMenuItem, false);
var input = CABMapNameComboBox.Text;
var selectedText = CABMapNameComboBox.SelectedText;
var input = MapNameComboBox.Text;
var selectedText = MapNameComboBox.SelectedText;
var name = "";
if (!string.IsNullOrEmpty(selectedText))
@@ -1877,14 +1880,14 @@ namespace AssetStudioGUI
}
else
{
Logger.Error("CABMap name is empty, please enter any name in ComboBox above");
Logger.Error("Map name is empty, please enter any name in ComboBox above");
InvokeUpdate(miscToolStripMenuItem, true);
return;
}
if (File.Exists(Path.Combine(AssetsHelper.CABMapName, $"{name}.bin")))
if (File.Exists(Path.Combine(AssetsHelper.MapName, $"{name}.bin")))
{
var acceptOverride = MessageBox.Show("CABMap already exist, Do you want to override it ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
var acceptOverride = MessageBox.Show("Map already exist, Do you want to override it ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (acceptOverride != DialogResult.Yes)
{
InvokeUpdate(miscToolStripMenuItem, true);
@@ -1899,7 +1902,7 @@ namespace AssetStudioGUI
Logger.Info("Scanning for files");
var files = Directory.GetFiles(openFolderDialog.Folder, "*.*", SearchOption.AllDirectories).ToArray();
Logger.Info($"Found {files.Length} files");
await Task.Run(() => AssetsHelper.BuildCABMap(files, name, openFolderDialog.Folder, Studio.Game));
await Task.Run(() => AssetsHelper.BuildMap(files, name, openFolderDialog.Folder, Studio.Game));
}
InvokeUpdate(miscToolStripMenuItem, true);
}
@@ -1909,22 +1912,22 @@ namespace AssetStudioGUI
miscToolStripMenuItem.DropDown.Visible = false;
InvokeUpdate(miscToolStripMenuItem, false);
var acceptDelete = MessageBox.Show("CABMap will be deleted, this can't be undone, continue ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
var acceptDelete = MessageBox.Show("Map will be deleted, this can't be undone, continue ?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (acceptDelete != DialogResult.Yes)
{
InvokeUpdate(miscToolStripMenuItem, true);
return;
}
var name = CABMapNameComboBox.Text.ToString();
var path = Path.Combine(AssetsHelper.CABMapName, $"{name}.bin");
var name = MapNameComboBox.Text.ToString();
var path = Path.Combine(AssetsHelper.MapName, $"{name}.bin");
if (File.Exists(path))
{
File.Delete(path);
Logger.Info($"{name} deleted successfully !!");
CABMapNameComboBox.SelectedIndexChanged -= new EventHandler(specifyNameComboBox_SelectedIndexChanged);
CABMapNameComboBox.SelectedIndex = 0;
CABMapNameComboBox.SelectedIndexChanged += new EventHandler(specifyNameComboBox_SelectedIndexChanged);
MapNameComboBox.SelectedIndexChanged -= new EventHandler(specifyNameComboBox_SelectedIndexChanged);
MapNameComboBox.SelectedIndex = 0;
MapNameComboBox.SelectedIndexChanged += new EventHandler(specifyNameComboBox_SelectedIndexChanged);
}
InvokeUpdate(miscToolStripMenuItem, true);

View File

@@ -557,9 +557,9 @@ namespace AssetStudioGUI
label7.AutoSize = true;
label7.Location = new System.Drawing.Point(7, 94);
label7.Name = "label7";
label7.Size = new System.Drawing.Size(91, 15);
label7.Size = new System.Drawing.Size(95, 15);
label7.TabIndex = 16;
label7.Text = "Exporable Types";
label7.Text = "Exportable Types";
//
// exportableTypes
//

View File

@@ -347,18 +347,6 @@ namespace AssetStudioGUI.Properties {
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool exportMiHoYoBinData {
get {
return ((bool)(this["exportMiHoYoBinData"]));
}
set {
this["exportMiHoYoBinData"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]

View File

@@ -83,9 +83,6 @@
<Setting Name="selectedAssetMapType" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="exportMiHoYoBinData" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="collectAnimations" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>

View File

@@ -7,8 +7,8 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using static AssetStudio.ImportHelper;
using static AssetStudioGUI.Exporter;
using Object = AssetStudio.Object;
@@ -220,7 +220,10 @@ namespace AssetStudioGUI
if (int.TryParse(asset.Container, out var value))
{
var last = unchecked((uint)value);
var path = ResourceIndex.GetAssetPath(last);
var name = Path.GetFileNameWithoutExtension(asset.SourceFile.originalPath);
if (uint.TryParse(name, out var id))
{
var path = ResourceIndex.GetContainer(id, last);
if (!string.IsNullOrEmpty(path))
{
asset.Container = path;
@@ -231,6 +234,7 @@ namespace AssetStudioGUI
}
}
}
}
Logger.Info("Updated !!");
}
}
@@ -239,12 +243,12 @@ namespace AssetStudioGUI
{
StatusStripUpdate("Building asset list...");
int i = 0;
string productName = null;
var objectCount = assetsManager.assetsFileList.Sum(x => x.Objects.Count);
var objectAssetItemDic = new Dictionary<Object, AssetItem>(objectCount);
var mihoyoBinDataNames = new List<(PPtr<Object>, string)>();
var containers = new List<(PPtr<Object>, string)>();
int i = 0;
Progress.Reset();
foreach (var assetsFile in assetsManager.assetsFileList)
{
@@ -257,7 +261,7 @@ namespace AssetStudioGUI
}
var assetItem = new AssetItem(asset);
objectAssetItemDic.Add(asset, assetItem);
assetItem.UniqueID = " #" + i;
assetItem.UniqueID = "#" + i;
var exportable = false;
switch (asset)
{
@@ -340,7 +344,7 @@ namespace AssetStudioGUI
assetItem.Text = "IndexObject";
break;
case MiHoYoBinData m_MiHoYoBinData:
exportable = MiHoYoBinData.Exportable;
exportable = true;
break;
case ResourceManager m_ResourceManager:
foreach (var m_Container in m_ResourceManager.m_Container)
@@ -629,25 +633,30 @@ namespace AssetStudioGUI
{
case ExportListType.XML:
var filename = Path.Combine(savePath, "assets.xml");
var doc = new XDocument(
new XElement("Assets",
new XAttribute("filename", filename),
new XAttribute("createdAt", DateTime.UtcNow.ToString("s")),
toExportAssets.Select(
asset => new XElement("Asset",
new XElement("Name", asset.Text),
new XElement("Container", asset.Container),
new XElement("Type", new XAttribute("id", (int)asset.Type), asset.TypeString),
new XElement("PathID", asset.m_PathID),
new XElement("Source", asset.SourceFile.fullName),
new XElement("Size", asset.FullSize)
)
)
)
);
doc.Save(filename);
var settings = new XmlWriterSettings() { Indent = true };
using (XmlWriter writer = XmlWriter.Create(filename, settings))
{
writer.WriteStartDocument();
writer.WriteStartElement("Assets");
writer.WriteAttributeString("filename", filename);
writer.WriteAttributeString("createdAt", DateTime.UtcNow.ToString("s"));
foreach (var asset in toExportAssets)
{
writer.WriteStartElement("Asset");
writer.WriteElementString("Name", asset.Name);
writer.WriteElementString("Container", asset.Container);
writer.WriteStartElement("Type");
writer.WriteAttributeString("id", ((int)asset.Type).ToString());
writer.WriteValue(asset.TypeString);
writer.WriteEndElement();
writer.WriteElementString("PathID", asset.m_PathID.ToString());
writer.WriteElementString("Source", asset.SourceFile.fullName);
writer.WriteElementString("Size", asset.FullSize.ToString());
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
}
break;
}