public static bool IsValidGtaDirectory(string path, GtaVersion version) { try { if (!Directory.Exists(path) || !File.Exists(Path.Combine(path, DataFile.DAT_MAIN))) { return(false); } switch (version) { case GtaVersion.III: return(File.Exists(Path.Combine(path, EXE_GTA_III))); case GtaVersion.ViceCity: return(File.Exists(Path.Combine(path, EXE_GTA_VC))); case GtaVersion.SanAndreas: return(File.Exists(Path.Combine(path, EXE_GTA_SA))); default: return(false); } } catch (Exception e) { Log.Exception(e); return(false); } }
public static string GetPathFromVersion(GtaVersion version) { switch (version) { case GtaVersion.III: if (!IsValidGtaDirectory(IIIDirectory, version)) { IIIDirectory = FileBrowser.OpenFolder("Select GTA III folder", "", "Grand Theft Auto III"); } return(IIIDirectory); case GtaVersion.ViceCity: if (!IsValidGtaDirectory(ViceCityDirectory, version)) { ViceCityDirectory = FileBrowser.OpenFolder("Select GTA Vice City folder", "", "Grand Theft Auto Vice City"); } return(ViceCityDirectory); case GtaVersion.SanAndreas: if (!IsValidGtaDirectory(SanAndreasDirectory, version)) { SanAndreasDirectory = FileBrowser.OpenFolder("Select GTA San Andreas folder", "", "Grand Theft Auto San Andreas"); } return(SanAndreasDirectory); default: throw new ArgumentException("Invalid GTA version"); } }
public Water(GtaVersion gtaVersion) { if (gtaVersion == GtaVersion.SanAndreas) { throw new NotImplementedException("Water System for GTA San Andreas have not been implemented yet"); } WaterQuads = new List <WaterQuad>(); using (var reader = new StreamReader(Config.Instance.GTAFolderPath + "data\\water.dat")) { while (!reader.EndOfStream) { var line = reader.ReadLine(); if (line.Length == 0 || line.StartsWith(";")) { continue; } if (line.StartsWith("*")) // * is mark of EOF { break; } WaterQuads.Add(new WaterQuad(line)); } } Log.Instance.Print("Water quads: " + WaterQuads.Count); }
public IplFile(string path, GtaVersion version) { using (new Timing("Loading IPL")) { FilePath = path; Version = version; Load(); } }
private static void LoadMap(GtaVersion version) { if (EditorUtility.DisplayDialog("Load " + version.GetFormatedGTAName() + " map", "Are you sure you want to load the entire map of " + version.GetFormatedGTAName(true) + "?", "Load", "Cancel")) { using (var loader = new Loader(version)) loader.Load(); } }
public WaterFile(string path, GtaVersion version) { using (new Timing("Loading Water")) { FilePath = path; Version = version; Planes = new List <WaterPlane>(); Load(); } }
public Loader(GtaVersion version) { if (Current != null) { throw new Exception("Another loader already in progress, make sure only one loader run at a time"); } Current = this; Path = Directories.GetPathFromVersion(Version = version); }
/// <summary> /// Распаковывает все найденные TXD и IMG архивы, найденные в directoryPath (поиск рекурсивный). /// </summary> /// <param name="directoryPath">Директория с исходными архивами (к примеру, папка с игрой GTA)</param> /// <param name="outptuPathPrefix">Папка, в которую проихводится распаковка. Должна существовать!</param> /// <param name="gtaVersion">Версия игры</param> public static void UnpackAllArchivesInDirectory(string directoryPath, string outptuPathPrefix, GtaVersion gtaVersion) { foreach (var path in Directory.GetFiles(directoryPath, "*", SearchOption.AllDirectories)) { if (path.EndsWith(".img")) UnpackImg(path, outptuPathPrefix, gtaVersion); else if (path.EndsWith(".txd")) UnpackTxd(path, outptuPathPrefix); } }
public DataFile(string filePath, GtaVersion version) { using (new Timing("Loading DAT")) { if (version == GtaVersion.Unknown) { throw new ArgumentException("Unsupported GTA version"); } FilePath = filePath; Version = version; IDEs = new List <IdeFile>(); IMGs = new List <ImgFile>(); IPLs = new List <IplFile>(); TXDs = new List <TxdFile>(); Load(); } }
/// <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()); } }
public static DataFile GetVersionSpecificData(GtaVersion version) { var gtaPath = Directories.GetPathFromVersion(version); switch (version) { case GtaVersion.III: return(new DataFile(Path.Combine(gtaPath, DAT_III), version)); case GtaVersion.ViceCity: return(new DataFile(Path.Combine(gtaPath, DAT_VC), version)); case GtaVersion.SanAndreas: return(new DataFile(Path.Combine(gtaPath, DAT_SA), version)); default: throw new ArgumentException("Unsopported GTA version"); } }
private static string GetVersionSpecificDatFile(GtaVersion gtaVersion) { switch (gtaVersion) { case GtaVersion.III: return("data/gta3.dat"); case GtaVersion.ViceCity: return("data/gta_vc.dat"); case GtaVersion.SanAndreas: return("data/gta.dat"); default: string msg = "Unsopported GTA version: " + gtaVersion.ToString() + "."; Logger.Print(msg, MessageType.Error); throw new LoadingException(msg); } }
public static string GetFormatedGTAName(this GtaVersion version, bool fullName, bool fullVersion) { var name = fullName ? "Grand Theft Auto: " : "GTA "; switch (version) { case GtaVersion.III: return(name + "III"); case GtaVersion.ViceCity: return(name + (fullVersion ? "Vice City" : "VC")); case GtaVersion.SanAndreas: return(name + (fullVersion ? "San Andreas" : "SA")); case GtaVersion.Unknown: return("Unknow GTA game"); default: return("Invalid GTA game"); } }
public Water(GtaVersion gtaVersion) { if (gtaVersion == GtaVersion.SanAndreas) throw new NotImplementedException("Water System for GTA San Andreas have not been implemented yet"); WaterQuads = new List<WaterQuad>(); using (var reader = new StreamReader(Config.Instance.GTAFolderPath + "data\\water.dat")) { while (!reader.EndOfStream) { var line = reader.ReadLine(); if (line.Length == 0 || line.StartsWith(";")) continue; if (line.StartsWith("*")) // * is mark of EOF break; WaterQuads.Add(new WaterQuad(line)); } } Log.Instance.Print("Water quads: " + WaterQuads.Count); }
public SceneObjectsLoader(GtaVersion gtaVersion) { this.gtaVersion = gtaVersion; }
/// <summary> /// Распаковывает все найденные TXD и IMG архивы, найденные в directoryPath (поиск рекурсивный). /// </summary> /// <param name="directoryPath">Директория с исходными архивами (к примеру, папка с игрой GTA)</param> /// <param name="outptuPathPrefix">Папка, в которую проихводится распаковка. Должна существовать!</param> /// <param name="gtaVersion">Версия игры</param> public static void UnpackAllArchivesInDirectory(string directoryPath, string outptuPathPrefix, GtaVersion gtaVersion) { foreach (var path in Directory.GetFiles(directoryPath, "*", SearchOption.AllDirectories)) { if (path.EndsWith(".img")) { UnpackImg(path, outptuPathPrefix, gtaVersion); } else if (path.EndsWith(".txd")) { UnpackTxd(path, outptuPathPrefix); } } }
public static DataFile GetMainData(GtaVersion version) { var gtaPath = Directories.GetPathFromVersion(version); return(new DataFile(Path.Combine(gtaPath, DAT_MAIN), version)); }
public IPLFileLoader(string filePath, GtaVersion gtaVersion) { this.filePath = filePath; this.gtaVersion = gtaVersion; }
public IDEFileLoader(string filePath, GtaVersion gtaVersion) { this.filePath = filePath; }
private static string GetVersionSpecificDatFile(GtaVersion gtaVersion) { switch (gtaVersion) { case GtaVersion.III: return "data/gta3.dat"; case GtaVersion.ViceCity: return "data/gta_vc.dat"; case GtaVersion.SanAndreas: return "data/gta.dat"; default: string msg = "Unsopported GTA version: " + gtaVersion.ToString() + "."; Logger.Print(msg, MessageType.Error); throw new LoadingException(msg); } }
public ImgFile(FileEntry file, GtaVersion version) { ArchiveFile = file; Version = version; }
public IMGArchive(string filePath, GtaVersion gtaVersion) { this.gtaVersion = gtaVersion; archiveFile = new FileProxy(filePath); }
public static string GetFormatedGTAName(this GtaVersion version, bool full) { return(version.GetFormatedGTAName(full, full)); }
public static ImgFile GetMainImg(GtaVersion version) { return(new ImgFile(GetMainImgPath(version), version)); }
public ImgFile(string path, GtaVersion version) : this(new FileEntry(path), version) { }
public static string GetMainImgPath(GtaVersion version) { var gtaPath = Directories.GetPathFromVersion(version); return(Path.Combine(gtaPath, IMG_MAIN)); }
public static string GetFormatedGTAName(this GtaVersion version) { return(version.GetFormatedGTAName(false, true)); }
/// <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()); } }