private static void CopyResource(IArchiveResourceFile sourceResource, IArchiveDirectory targetDirectory)
        {
            var resourceStream = new MemoryStream();

            sourceResource.Export(resourceStream);

            var targetResource = targetDirectory.CreateResourceFile();

            targetResource.Name     = sourceResource.Name;
            resourceStream.Position = 0;
            targetResource.Import(resourceStream);
        }
Beispiel #2
0
        public static T GetResourceData <T>(IArchiveResourceFile file) where T : FileBase64_GTA5_pc, new()
        {
            var resource = new ResourceFile_GTA5_pc <T>();

            using (var ms = new MemoryStream())
            {
                file.Export(ms);
                resource.Load(ms);
            }

            return(resource.ResourceData);
        }
        private void RebuildResourceFile(IArchiveResourceFile sourceFile, IArchiveDirectory destinationDirectory, RageArchiveEncryption7 archiveEncryption)
        {
            foreach (var handler in ResourceFileHandlers)
            {
                if (handler.CanRebuild(sourceFile))
                {
                    handler.Rebuild(sourceFile, destinationDirectory, archiveEncryption);
                    return;
                }
            }

            CopyResource(sourceFile, destinationDirectory);
        }
        public void Rebuild(IArchiveResourceFile sourceFile, IArchiveDirectory targetDirectory, RageArchiveEncryption7 encryption)
        {
            try
            {
                var resourceStream = new MemoryStream();
                sourceFile.Export(resourceStream);

                var buffer = new byte[resourceStream.Length];
                resourceStream.Position = 0;
                resourceStream.Read(buffer, 0, (int)resourceStream.Length);
                resourceStream = new MemoryStream(buffer);

                var resource = new ResourceFile_GTA5_pc <T>();
                resourceStream.Position = 0;
                resource.Load(resourceStream);

                if (resource.Version != fileType.Version)
                {
                    throw new Exception("Wrong version");
                }

                var newResourceStream = new MemoryStream();
                resource.Save(newResourceStream);

                buffer = new byte[newResourceStream.Length];
                newResourceStream.Position = 0;
                newResourceStream.Read(buffer, 0, (int)newResourceStream.Length);
                newResourceStream = new MemoryStream(buffer);

                var targetResource = targetDirectory.CreateResourceFile();
                targetResource.Name        = sourceFile.Name;
                newResourceStream.Position = 0;
                targetResource.Import(newResourceStream);

                Console.WriteLine("Rebuilt " + sourceFile.Name);
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR in " + sourceFile.Name + ": " + ex.Message);
            }
        }
 public bool CanRebuild(IArchiveResourceFile sourceFile)
 {
     return(sourceFile.Name.EndsWith("." + fileType.Extension, StringComparison.OrdinalIgnoreCase));
 }