/// <summary> /// Распаковывает IMG архив. /// В случае ошибки НЕ кидает дальше исключение, выводит ErrorMessage в лог. /// /// Все распакованные TXD файлы сначала копируются в outputPathPrefix/___txds/, /// потом распаковываются в outputPathPrefix /// </summary> /// <param name="imgPath">Путь к IMG архиву</param> /// <param name="outputPathPrefix">Папка, в которую проихводится распаковка. Должна существовать!</param> /// <param name="gtaVersion">Версия игры</param> public static void UnpackImg(string imgPath, string outputPathPrefix, GtaVersion gtaVersion) { try { if (!outputPathPrefix.EndsWith(Path.DirectorySeparatorChar.ToString())) { outputPathPrefix += Path.DirectorySeparatorChar; } if (!Directory.Exists(outputPathPrefix + @"\___txds\\")) { Directory.CreateDirectory(outputPathPrefix + @"\___txds\\"); } using (Log.Instance.EnterStage("Unpacking IMG: " + imgPath)) { IMGArchive archive = new IMGArchive(imgPath, gtaVersion); IEnumerable <FileProxy> entries = archive.Load(); foreach (var entry in entries) { byte[] data = entry.GetData(); if (entry.Name.ToLower().EndsWith(".txd")) { string path = outputPathPrefix + @"\___txds\\" + entry.Name; if (!File.Exists(path)) { using (FileStream fout = new FileStream(path, FileMode.Create)) fout.Write(data, 0, data.Length); UnpackTxd(path, outputPathPrefix); } } else { string path = outputPathPrefix + entry.Name; using (FileStream fout = new FileStream(path, FileMode.Create)) fout.Write(data, 0, data.Length); } } } } catch (Exception er) { Log.Instance.Print("Failed to unpack IMG. Exception occured: " + er.ToString()); } }
private List <FileProxy> LoadMainImgArchive(string path) { IMGArchive archive = new IMGArchive(path, gtaVersion); var items = archive.Load(); var result = new List <FileProxy>(); foreach (var item in items) { if (item.Name.EndsWith(".dff")) { result.Add(item); } else if (item.Name.EndsWith(".txd")) { TexturesStorage.Instance.AddTexturesArchive(item); } } return(result); }
/// <summary> /// Распаковывает IMG архив. /// В случае ошибки НЕ кидает дальше исключение, выводит ErrorMessage в лог. /// /// Все распакованные TXD файлы сначала копируются в outputPathPrefix/___txds/, /// потом распаковываются в outputPathPrefix /// </summary> /// <param name="imgPath">Путь к IMG архиву</param> /// <param name="outputPathPrefix">Папка, в которую проихводится распаковка. Должна существовать!</param> /// <param name="gtaVersion">Версия игры</param> public static void UnpackImg(string imgPath, string outputPathPrefix, GtaVersion gtaVersion) { try { if (!outputPathPrefix.EndsWith(Path.DirectorySeparatorChar.ToString())) outputPathPrefix += Path.DirectorySeparatorChar; if (!Directory.Exists(outputPathPrefix + @"\___txds\\")) Directory.CreateDirectory(outputPathPrefix + @"\___txds\\"); using (Log.Instance.EnterStage("Unpacking IMG: " + imgPath)) { IMGArchive archive = new IMGArchive(imgPath, gtaVersion); IEnumerable<FileProxy> entries = archive.Load(); foreach (var entry in entries) { byte[] data = entry.GetData(); if (entry.Name.ToLower().EndsWith(".txd")) { string path = outputPathPrefix + @"\___txds\\" + entry.Name; if (!File.Exists(path)) { using (FileStream fout = new FileStream(path, FileMode.Create)) fout.Write(data, 0, data.Length); UnpackTxd(path, outputPathPrefix); } } else { string path = outputPathPrefix + entry.Name; using (FileStream fout = new FileStream(path, FileMode.Create)) fout.Write(data, 0, data.Length); } } } } catch (Exception er) { Log.Instance.Print("Failed to unpack IMG. Exception occured: " + er.ToString()); } }
private List<FileProxy> LoadMainImgArchive(string path) { IMGArchive archive = new IMGArchive(path, gtaVersion); var items = archive.Load(); var result = new List<FileProxy>(); foreach (var item in items) { if (item.Name.EndsWith(".dff")) result.Add(item); else if (item.Name.EndsWith(".txd")) TexturesStorage.Instance.AddTexturesArchive(item); } return result; }