mirror of
https://github.com/4sval/FModel.git
synced 2026-07-02 00:02:32 -05:00
fixed pakreader <-> pakentry connection + fixed compressed ini
This commit is contained in:
parent
2c3a9b7ec3
commit
320b6b72a3
|
|
@ -101,11 +101,11 @@ namespace PakReader
|
|||
{
|
||||
reader.ReadUInt32(); // StrHash
|
||||
}
|
||||
var Key = reader.ReadFString();
|
||||
string Key = reader.ReadFString();
|
||||
|
||||
reader.ReadUInt32(); // SourceStringHash
|
||||
|
||||
string EntryLocalizedString;
|
||||
string EntryLocalizedString = string.Empty;
|
||||
if (VersionNumber >= Version.COMPACT)
|
||||
{
|
||||
int LocalizedStringIndex = reader.ReadInt32();
|
||||
|
|
@ -130,16 +130,18 @@ namespace PakReader
|
|||
}
|
||||
else
|
||||
{
|
||||
throw new IOException($"LocRes has an invalid localized string index for namespace '{Namespace}' and key '{Key}'. This entry will have no translation.");
|
||||
//throw new IOException($"LocRes has an invalid localized string index for namespace '{Namespace}' and key '{Key}'. This entry will have no translation.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EntryLocalizedString = reader.ReadFString();
|
||||
}
|
||||
Entries.Add(Key, EntryLocalizedString);
|
||||
|
||||
if (Key != null) Entries.Add(Key, EntryLocalizedString);
|
||||
}
|
||||
this.Entries.Add(Namespace, Entries);
|
||||
|
||||
if (Namespace != null) this.Entries.Add(Namespace, Entries);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -143,8 +143,16 @@ namespace PakReader.Parsers.Objects
|
|||
stream.Read(data, 0, data.Length);
|
||||
byte[] decrypted = AESDecryptor.DecryptAES(data, key);
|
||||
|
||||
if (CompressionMethodIndex != 0U) Decompress(stream, compressionMethods, decrypted);
|
||||
return new ArraySegment<byte>(decrypted, 0, (int)UncompressedSize);
|
||||
if (CompressionMethodIndex != 0U)
|
||||
{
|
||||
using var m = new MemoryStream(decrypted, 0, decrypted.Length)
|
||||
{
|
||||
Position = 0
|
||||
};
|
||||
Decompress(m, compressionMethods, decrypted);
|
||||
}
|
||||
|
||||
return new ArraySegment<byte>(decrypted, 0, decrypted.Length <= (int)UncompressedSize ? decrypted.Length : (int)UncompressedSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ namespace FModel.Utils
|
|||
{
|
||||
case ".ini":
|
||||
{
|
||||
using var asset = GetMemoryStream(mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
using var asset = GetMemoryStream(selected.PakEntry.PakFileName, mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
asset.Position = 0;
|
||||
using var reader = new StreamReader(asset);
|
||||
AvalonEditVm.avalonEditViewModel.Set(reader.ReadToEnd(), selected.PakEntry.GetNameWithExtension(), AvalonEditVm.IniHighlighter);
|
||||
|
|
@ -82,7 +82,7 @@ namespace FModel.Utils
|
|||
case ".uplugin":
|
||||
case ".upluginmanifest":
|
||||
{
|
||||
using var asset = GetMemoryStream(mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
using var asset = GetMemoryStream(selected.PakEntry.PakFileName, mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
asset.Position = 0;
|
||||
using var reader = new StreamReader(asset);
|
||||
AvalonEditVm.avalonEditViewModel.Set(reader.ReadToEnd(), selected.PakEntry.GetNameWithExtension());
|
||||
|
|
@ -90,21 +90,21 @@ namespace FModel.Utils
|
|||
}
|
||||
case ".locmeta":
|
||||
{
|
||||
using var asset = GetMemoryStream(mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
using var asset = GetMemoryStream(selected.PakEntry.PakFileName, mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
asset.Position = 0;
|
||||
AvalonEditVm.avalonEditViewModel.Set(JsonConvert.SerializeObject(new LocMetaReader(asset), Formatting.Indented), selected.PakEntry.GetNameWithExtension());
|
||||
break;
|
||||
}
|
||||
case ".locres":
|
||||
{
|
||||
using var asset = GetMemoryStream(mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
using var asset = GetMemoryStream(selected.PakEntry.PakFileName, mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
asset.Position = 0;
|
||||
AvalonEditVm.avalonEditViewModel.Set(JsonConvert.SerializeObject(new LocResReader(asset).Entries, Formatting.Indented), selected.PakEntry.GetNameWithExtension());
|
||||
break;
|
||||
}
|
||||
case ".udic":
|
||||
{
|
||||
using var asset = GetMemoryStream(mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
using var asset = GetMemoryStream(selected.PakEntry.PakFileName, mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
asset.Position = 0;
|
||||
AvalonEditVm.avalonEditViewModel.Set(JsonConvert.SerializeObject(new FOodleDictionaryArchive(asset).Header, Formatting.Indented), selected.PakEntry.GetNameWithExtension());
|
||||
break;
|
||||
|
|
@ -115,7 +115,7 @@ namespace FModel.Utils
|
|||
!selected.PakEntry.Name.Equals("FortniteGame/AssetRegistry.bin") && // this file is 85mb...
|
||||
selected.PakEntry.Name.Contains("AssetRegistry")) // only parse AssetRegistry (basically the ones in dynamic paks)
|
||||
{
|
||||
using var asset = GetMemoryStream(mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
using var asset = GetMemoryStream(selected.PakEntry.PakFileName, mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
asset.Position = 0;
|
||||
AvalonEditVm.avalonEditViewModel.Set(JsonConvert.SerializeObject(new FAssetRegistryState(asset), Formatting.Indented), selected.PakEntry.GetNameWithExtension());
|
||||
}
|
||||
|
|
@ -123,7 +123,7 @@ namespace FModel.Utils
|
|||
}
|
||||
case ".png":
|
||||
{
|
||||
using var asset = GetMemoryStream(mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
using var asset = GetMemoryStream(selected.PakEntry.PakFileName, mount + selected.PakEntry.GetPathWithoutExtension());
|
||||
asset.Position = 0;
|
||||
ImageBoxVm.imageBoxViewModel.Set(SKBitmap.Decode(asset), selected.PakEntry.GetNameWithExtension());
|
||||
break;
|
||||
|
|
@ -153,12 +153,11 @@ namespace FModel.Utils
|
|||
TaskScheduler.FromCurrentSynchronizationContext());
|
||||
}
|
||||
|
||||
public static MemoryStream GetMemoryStream(string pathWithoutExtension)
|
||||
public static MemoryStream GetMemoryStream(string pakName, string pathWithoutExtension)
|
||||
{
|
||||
foreach (PakFileReader pak in Globals.CachedPakFiles.Values)
|
||||
if (Globals.CachedPakFiles.TryGetValue(pakName, out PakFileReader pak))
|
||||
{
|
||||
if (!pak.Initialized) continue; // this should never happen because he can't be cached if not initialized
|
||||
if (!pak.TryGetFile(pathWithoutExtension, out ArraySegment<byte> uasset, out _, out _))
|
||||
if (pak.Initialized && !pak.TryGetFile(pathWithoutExtension, out ArraySegment<byte> uasset, out _, out _))
|
||||
{
|
||||
if (uasset != null)
|
||||
{
|
||||
|
|
@ -255,10 +254,9 @@ namespace FModel.Utils
|
|||
return true;
|
||||
}
|
||||
|
||||
foreach (PakFileReader pak in Globals.CachedPakFiles.Values)
|
||||
if (Globals.CachedPakFiles.TryGetValue(entry.PakFileName, out PakFileReader pak))
|
||||
{
|
||||
if (!pak.Initialized) continue; // this should never happen because he can't be cached if not initialized
|
||||
if (pak.TryGetFile(mount + entry.GetPathWithoutExtension(), out ArraySegment<byte> uasset, out ArraySegment<byte> uexp, out ArraySegment<byte> ubulk))
|
||||
if (pak.Initialized && pak.TryGetFile(mount + entry.GetPathWithoutExtension(), out ArraySegment<byte> uasset, out ArraySegment<byte> uexp, out ArraySegment<byte> ubulk))
|
||||
{
|
||||
package = new PakPackage(uasset, uexp, ubulk);
|
||||
_CachedFiles[entry] = new Dictionary<PakPackage, ArraySegment<byte>[]>
|
||||
|
|
@ -288,10 +286,9 @@ namespace FModel.Utils
|
|||
return true;
|
||||
}
|
||||
|
||||
foreach (PakFileReader pak in Globals.CachedPakFiles.Values)
|
||||
if (Globals.CachedPakFiles.TryGetValue(entry.PakFileName, out PakFileReader pak))
|
||||
{
|
||||
if (!pak.Initialized) continue; // this should never happen because he can't be cached if not initialized
|
||||
if (pak.TryGetFile(mount + entry.GetPathWithoutExtension(), out ArraySegment<byte> uasset, out ArraySegment<byte> uexp, out ArraySegment<byte> ubulk))
|
||||
if (pak.Initialized && pak.TryGetFile(mount + entry.GetPathWithoutExtension(), out ArraySegment<byte> uasset, out ArraySegment<byte> uexp, out ArraySegment<byte> ubulk))
|
||||
{
|
||||
arraySegment = new ArraySegment<byte>[] { uasset, uexp, ubulk };
|
||||
return true;
|
||||
|
|
@ -363,7 +360,7 @@ namespace FModel.Utils
|
|||
string name = Path.GetFileName(fullPath);
|
||||
Directory.CreateDirectory(basePath + entry.GetPathWithoutFile());
|
||||
|
||||
using var data = GetMemoryStream(r.MountPoint + entry.GetPathWithoutExtension());
|
||||
using var data = GetMemoryStream(entry.PakFileName, r.MountPoint + entry.GetPathWithoutExtension());
|
||||
using var stream = new FileStream(fullPath, FileMode.Create, FileAccess.Write);
|
||||
data.WriteTo(stream);
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ namespace FModel.Utils
|
|||
{
|
||||
DebugHelper.WriteLine("{0} {1} {2} {3}", "[FModel]", "[Localizations]", "[GameDict]", $"Feeding with {KvP.Value.Name} from {KvP.Value.PakFileName} Miam Miam!");
|
||||
|
||||
using var asset = Assets.GetMemoryStream(mount + KvP.Value.GetPathWithoutExtension());
|
||||
using var asset = Assets.GetMemoryStream(fileReader.FileName, mount + KvP.Value.GetPathWithoutExtension());
|
||||
asset.Position = 0;
|
||||
foreach (var namespac in new LocResReader(asset).Entries)
|
||||
{
|
||||
|
|
@ -61,7 +61,8 @@ namespace FModel.Utils
|
|||
_fortniteLocalizationDict[namespac.Key] = new Dictionary<string, string>();
|
||||
|
||||
foreach (var key in namespac.Value)
|
||||
_fortniteLocalizationDict[namespac.Key][key.Key] = key.Value;
|
||||
if (!string.IsNullOrEmpty(key.Value))
|
||||
_fortniteLocalizationDict[namespac.Key][key.Key] = key.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using FModel.Utils;
|
||||
using FModel.ViewModels.DataGrid;
|
||||
using FModel.ViewModels.ListBox;
|
||||
using PakReader.Pak;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.ComponentModel;
|
||||
|
|
@ -70,9 +71,9 @@ namespace FModel.ViewModels.Treeview
|
|||
var m = Regex.Match(entry.Name, $"{fullPath}/*", RegexOptions.IgnoreCase);
|
||||
if (m.Success)
|
||||
{
|
||||
foreach (var entries in Globals.CachedPakFiles.Values)
|
||||
if (Globals.CachedPakFiles.TryGetValue(entry.PakFile, out PakFileReader pak))
|
||||
{
|
||||
if (entries.TryGetValue("/" + entry.Name.Substring(0, entry.Name.LastIndexOf(".")), out var pakEntry)) // remove the extension to get the entry
|
||||
if (pak.TryGetValue("/" + entry.Name.Substring(0, entry.Name.LastIndexOf(".")), out var pakEntry)) // remove the extension to get the entry
|
||||
{
|
||||
entriesToExtract.Add(new ListBoxViewModel
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user