Пример #1
0
        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);
            }
        }
Пример #2
0
        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");
            }
        }
Пример #3
0
        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();
     }
 }
Пример #5
0
 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();
     }
 }
Пример #7
0
        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);
      }
 }
Пример #9
0
        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());
            }
        }
Пример #11
0
        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");
            }
        }
Пример #14
0
        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);
         }
     }
 }
Пример #17
0
        public static DataFile GetMainData(GtaVersion version)
        {
            var gtaPath = Directories.GetPathFromVersion(version);

            return(new DataFile(Path.Combine(gtaPath, DAT_MAIN), version));
        }
Пример #18
0
 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 IPLFileLoader(string filePath, GtaVersion gtaVersion)
 {
     this.filePath = filePath;
      this.gtaVersion = gtaVersion;
 }
 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 IMGArchive(string filePath, GtaVersion gtaVersion)
 {
     this.gtaVersion = gtaVersion;
     archiveFile     = new FileProxy(filePath);
 }
        public static string GetMainImgPath(GtaVersion version)
        {
            var gtaPath = Directories.GetPathFromVersion(version);

            return(Path.Combine(gtaPath, IMG_MAIN));
        }
 public IDEFileLoader(string filePath, GtaVersion gtaVersion)
 {
     this.filePath = filePath;
 }
 public SceneObjectsLoader(GtaVersion gtaVersion)
 {
     this.gtaVersion = gtaVersion;
 }
 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());
             }
        }