You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.4 KiB
C#
86 lines
2.4 KiB
C#
using NetMFAPatcher.Utils;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection.Emit;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace NetMFAPatcher.mmfparser
|
|
{
|
|
public class PackData
|
|
{
|
|
public PackFile[] items;
|
|
public PackData()
|
|
{
|
|
|
|
}
|
|
public void Read(ByteIO exeReader)
|
|
{
|
|
long start = exeReader.Tell();
|
|
byte[] header = exeReader.ReadBytes(8);
|
|
|
|
exeReader.Skip(8);
|
|
uint header_size = exeReader.ReadUInt32();
|
|
uint data_size = exeReader.ReadUInt32();
|
|
|
|
exeReader.Seek((int)(start + data_size - 32));
|
|
exeReader.Skip(4);
|
|
exeReader.Seek(start + 16);
|
|
|
|
uint format_version = exeReader.ReadUInt32();
|
|
exeReader.Skip(8);
|
|
|
|
uint count = exeReader.ReadUInt32();
|
|
|
|
Logger.Log($"Found {count.ToString()} Pack Files:", true, ConsoleColor.Blue);
|
|
|
|
long offset = exeReader.Tell();
|
|
for (int i = 0; i < count; i++)
|
|
{
|
|
if (!exeReader.Check(2)) break;
|
|
UInt16 value = exeReader.ReadUInt16();
|
|
if (!exeReader.Check(value)) break;
|
|
exeReader.ReadBytes(value);
|
|
exeReader.Skip(value);
|
|
if (!exeReader.Check(value)) break;
|
|
}
|
|
exeReader.BaseStream.Position -= 5;//wtf lol
|
|
header = exeReader.ReadFourCC();
|
|
|
|
exeReader.Seek(offset);
|
|
for (int i = 0; i < count; i++) new PackFile().Read(exeReader);
|
|
|
|
Logger.Log("\nPackdata Done\n", true, ConsoleColor.Blue);
|
|
|
|
}
|
|
|
|
}
|
|
public class PackFile
|
|
{
|
|
string PackFilename = "ERROR";
|
|
int bingo = 0;
|
|
byte[] data;
|
|
|
|
public void Read(ByteIO exeReader)
|
|
{
|
|
UInt16 len = exeReader.ReadUInt16();
|
|
PackFilename = exeReader.ReadWideString(len);
|
|
bingo = exeReader.ReadInt32();
|
|
data = exeReader.ReadBytes(exeReader.ReadInt32());
|
|
|
|
Dump();
|
|
}
|
|
public void Dump()
|
|
{
|
|
Logger.Log($"Dumping {PackFilename}", true, ConsoleColor.DarkBlue);
|
|
string path = $"{Program.DumpPath}\\extensions\\" + PackFilename;
|
|
File.WriteAllBytes(path, data);
|
|
}
|
|
|
|
}
|
|
|
|
}
|