public void Read(AssetsFileReader reader) { reader.bigEndian = false; magic = reader.ReadStringLength(4); fileVersion = reader.ReadByte(); compressionType = reader.ReadByte(); stringTableOffset = reader.ReadUInt32(); stringTableLenUncompressed = reader.ReadUInt32(); stringTableLenCompressed = reader.ReadUInt32(); if (fileVersion == 1) //is this even right? { fileBlockSize = reader.ReadUInt32(); } else { fileBlockSize = 0; } fileCount = reader.ReadUInt32(); files = new List <ClassDatabaseFileRef>(); for (int i = 0; i < fileCount; i++) { files.Add(new ClassDatabaseFileRef() { offset = reader.ReadUInt32(), length = reader.ReadUInt32(), name = reader.ReadStringLength(15) }); } }
///public bool Pack(AssetsFileReader reader, LPARAM lPar, AssetsFileWriter writer, LPARAM writerPar); public bool IsAssetsFile(AssetsFileReader reader, AssetBundleDirectoryInfo06 entry) { //todo - not fully implemented long offset = bundleHeader6.GetFileDataOffset() + entry.offset; if (entry.decompressedSize < 0x20) { return(false); } reader.Position = offset; string possibleBundleHeader = reader.ReadStringLength(7); if (possibleBundleHeader == "UnityFS") { return(false); } reader.Position = offset + 0x08; int possibleFormat = reader.ReadInt32(); if (possibleFormat > 99) { return(false); } reader.Position = offset + 0x14; string possibleVersion = reader.ReadNullTerminated(); string emptyVersion = Regex.Replace(possibleVersion, "[a-zA-Z0-9\\.]", ""); string fullVersion = Regex.Replace(possibleVersion, "[^a-zA-Z0-9\\.]", ""); return(emptyVersion == "" && fullVersion.Length > 0); }
public bool IsAssetsFile(AssetsFileReader reader, AssetBundleDirectoryInfo06 entry) { //todo - not fully implemented long offset = bundleHeader6.GetFileDataOffset() + entry.offset; if (entry.decompressedSize < 0x30) { return(false); } reader.Position = offset; string possibleBundleHeader = reader.ReadStringLength(7); if (possibleBundleHeader == "UnityFS") { return(false); } reader.Position = offset + 0x08; int possibleFormat = reader.ReadInt32(); if (possibleFormat > 99) { return(false); } reader.Position = offset + 0x14; if (possibleFormat >= 0x16) { reader.Position += 0x1c; } string possibleVersion = ""; char curChar; while (reader.Position < reader.BaseStream.Length && (curChar = (char)reader.ReadByte()) != 0x00) { possibleVersion += curChar; if (possibleVersion.Length > 0xFF) { return(false); } } string emptyVersion = Regex.Replace(possibleVersion, "[a-zA-Z0-9\\.]", ""); string fullVersion = Regex.Replace(possibleVersion, "[^a-zA-Z0-9\\.]", ""); return(emptyVersion == "" && fullVersion.Length > 0); }
//recommend GetAssetNameFast if at possible public bool ReadName(AssetsFile file, out string str) { str = string.Empty; AssetsFileReader reader = file.reader; if (AssetsFileExtra.HasName(curFileType)) { reader.Position = absoluteFilePos; int length = Math.Min(reader.ReadInt32(), 99); str = reader.ReadStringLength(length); return(true); } return(false); }
public static bool IsAssetsFile(AssetsFileReader reader, long offset, long length) { //todo - not fully implemented if (length < 0x30) { return(false); } reader.Position = offset; string possibleBundleHeader = reader.ReadStringLength(5); if (possibleBundleHeader == "Unity") { return(false); } reader.Position = offset + 0x08; int possibleFormat = reader.ReadInt32(); if (possibleFormat > 99) { return(false); } reader.Position = offset + 0x14; if (possibleFormat >= 0x16) { reader.Position += 0x1c; } string possibleVersion = ""; char curChar; while (reader.Position < reader.BaseStream.Length && (curChar = (char)reader.ReadByte()) != 0x00) { possibleVersion += curChar; if (possibleVersion.Length > 0xFF) { return(false); } } string emptyVersion = Regex.Replace(possibleVersion, "[a-zA-Z0-9\\.\\n]", ""); string fullVersion = Regex.Replace(possibleVersion, "[^a-zA-Z0-9\\.\\n]", ""); return(emptyVersion == "" && fullVersion.Length > 0); }
public void Read(AssetsFileReader reader) { reader.bigEndian = false; header = reader.ReadStringLength(4); if (header != "cldb") { throw new Exception("header not detected. is this a cldb file?"); } fileVersion = reader.ReadByte(); flags = 0; if (fileVersion == 4) { flags = reader.ReadByte(); } switch (fileVersion) { case 1: compressionType = 0; break; case 2: compressionType = reader.ReadByte(); break; case 3: case 4: compressionType = reader.ReadByte(); compressedSize = reader.ReadUInt32(); uncompressedSize = reader.ReadUInt32(); break; default: return; } unityVersionCount = reader.ReadByte(); unityVersions = new string[unityVersionCount]; for (int i = 0; i < unityVersionCount; i++) { unityVersions[i] = reader.ReadCountString(); } stringTableLen = reader.ReadUInt32(); stringTablePos = reader.ReadUInt32(); }
public ulong Read(AssetsFileReader reader, ulong filePos) { reader.bigEndian = false; header = reader.ReadStringLength(4); if (header != "cldb") { return(reader.Position); } fileVersion = reader.ReadByte(); switch (fileVersion) { case 1: break; case 3: compressionType = reader.ReadByte(); if (compressionType != 0) { return(reader.Position); } compressedSize = reader.ReadUInt32(); uncompressedSize = reader.ReadUInt32(); break; default: return(reader.Position); } unityVersionCount = reader.ReadByte(); pUnityVersions = new string[unityVersionCount]; for (int i = 0; i < unityVersionCount; i++) { pUnityVersions[i] = reader.ReadCountString(); } stringTableLen = reader.ReadUInt32(); stringTablePos = reader.ReadUInt32(); return(reader.Position); }