Rewrite resolve dependencies.

This commit is contained in:
Razmoth
2023-01-08 23:15:42 +04:00
parent 260b63e019
commit 181ab787a3
3 changed files with 104 additions and 106 deletions

View File

@@ -39,8 +39,6 @@ namespace AssetStudio
var path = Path.GetDirectoryName(Path.GetFullPath(files[0]));
MergeSplitAssets(path);
var toReadFile = ProcessingSplitFiles(files.ToList());
if (ResolveDependencies)
toReadFile = AssetsHelper.ProcessDependencies(toReadFile);
Load(toReadFile);
if (Silent)
@@ -95,6 +93,7 @@ namespace AssetStudio
importFilesHash.Clear();
noexistFiles.Clear();
assetsFileListHash.Clear();
AssetsHelper.ClearOffsets();
if (!SkipProcess && !tokenSource.IsCancellationRequested)
{
@@ -138,9 +137,6 @@ namespace AssetStudio
case FileType.BlkFile:
LoadBlkFile(reader);
break;
case FileType.Mhy0File:
LoadMhy0File(reader);
break;
}
}
@@ -218,6 +214,38 @@ namespace AssetStudio
CheckStrippedVersion(assetsFile);
assetsFileList.Add(assetsFile);
assetsFileListHash.Add(assetsFile.fileName);
if (ResolveDependencies)
{
foreach (var sharedFile in assetsFile.m_Externals)
{
var sharedFileName = sharedFile.fileName;
if (!importFilesHash.Contains(sharedFileName))
{
var sharedFilePath = Path.Combine(Path.GetDirectoryName(originalPath), sharedFileName);
if (!noexistFiles.Contains(sharedFilePath))
{
if (AssetsHelper.TryAdd(sharedFileName, out var path))
{
sharedFilePath = path;
}
if (File.Exists(sharedFilePath))
{
if (!importFiles.Contains(sharedFilePath))
{
importFiles.Add(sharedFilePath);
}
importFilesHash.Add(sharedFileName);
}
else
{
noexistFiles.Add(sharedFilePath);
}
}
}
}
}
}
catch (Exception e)
{
@@ -409,9 +437,8 @@ namespace AssetStudio
Logger.Info("Loading " + reader.FullPath);
try
{
var offsets = AssetsHelper.Offsets.TryGetValue(reader.FullPath, out var list) ? list.ToArray() : Array.Empty<long>();
using var stream = new BlockStream(reader.BaseStream, 0);
if (!offsets.IsNullOrEmpty())
if (AssetsHelper.TryGet(reader.FullPath, out var offsets))
{
foreach (var offset in offsets)
{
@@ -420,6 +447,7 @@ namespace AssetStudio
var subReader = new FileReader(dummyPath, stream, true);
LoadBundleFile(subReader, reader.FullPath, offset);
}
AssetsHelper.Remove(reader.FullPath);
}
else
{
@@ -446,9 +474,8 @@ namespace AssetStudio
Logger.Info("Loading " + reader.FullPath);
try
{
var offsets = AssetsHelper.Offsets.TryGetValue(reader.FullPath, out var list) ? list.ToArray() : Array.Empty<long>();
using var stream = BlkUtils.Decrypt(reader, (Blk)Game);
if (!offsets.IsNullOrEmpty())
if (AssetsHelper.TryGet(reader.FullPath, out var offsets))
{
foreach (var offset in offsets)
{
@@ -465,6 +492,7 @@ namespace AssetStudio
break;
}
}
AssetsHelper.Remove(reader.FullPath);
}
else
{