Example #1
0
        private static void GetPAKsFileInfos()
        {
            if (PAKEntries.PAKEntriesList != null && PAKEntries.PAKEntriesList.Any())
            {
                new UpdateMyProcessEvents($"Writing {Path.GetFileName(BACKUP_FILE_PATH)}", "Waiting").Update();
                Directory.CreateDirectory(Path.GetDirectoryName(BACKUP_FILE_PATH));

                using (FileStream fileStream = new FileStream(BACKUP_FILE_PATH, FileMode.Create))
                    using (BinaryWriter writer = new BinaryWriter(fileStream))
                    {
                        DebugHelper.WriteLine("Backup: Gathering info about local .PAK files");
                        foreach (PAKInfosEntry Pak in PAKEntries.PAKEntriesList)
                        {
                            byte[] AESKey = null;
                            if (Pak.bTheDynamicPAK)
                            {
                                if (AESEntries.AESEntriesList != null && AESEntries.AESEntriesList.Any())
                                {
                                    string AESFromManager = AESEntries.AESEntriesList.Where(x => string.Equals(x.ThePAKName, Path.GetFileNameWithoutExtension(Pak.ThePAKPath))).Select(x => x.ThePAKKey).FirstOrDefault();
                                    if (!string.IsNullOrEmpty(AESFromManager))
                                    {
                                        AESKey = AESUtility.StringToByteArray(AESFromManager);
                                    }
                                }
                            }
                            else
                            {
                                AESKey = AESUtility.StringToByteArray(FProp.Default.FPak_MainAES);
                            }

                            if (AESKey != null)
                            {
                                DebugHelper.WriteLine($".PAKs: Backing up {Pak.ThePAKPath} with key: {BitConverter.ToString(AESKey).Replace("-", string.Empty)}");

                                PakReader.PakReader reader = new PakReader.PakReader(Pak.ThePAKPath, AESKey);
                                if (reader != null)
                                {
                                    new UpdateMyProcessEvents($"{Path.GetFileNameWithoutExtension(Pak.ThePAKPath)} mount point: {reader.MountPoint}", "Waiting").Update();

                                    foreach (FPakEntry entry in reader.FileInfos)
                                    {
                                        writer.Write(entry.Offset);
                                        writer.Write(entry.Size);
                                        writer.Write(entry.UncompressedSize);
                                        writer.Write(entry.Encrypted);
                                        writer.Write(entry.StructSize);
                                        writer.Write(entry.Name);
                                        writer.Write(entry.CompressionMethodIndex);
                                    }
                                }
                            }
                            else
                            {
                                DebugHelper.WriteLine($".PAKs: Not backing up {Pak.ThePAKPath} because its key is empty");
                            }
                        }
                    }

                if (new FileInfo(BACKUP_FILE_PATH).Length > 0) //HENCE WE CHECK THE LENGTH
                {
                    DebugHelper.WriteLine($".PAKs: \\Backups\\{Path.GetFileName(BACKUP_FILE_PATH)} successfully created");
                    new UpdateMyProcessEvents($"\\Backups\\{Path.GetFileName(BACKUP_FILE_PATH)} successfully created", "Success").Update();
                }
                else
                {
                    DebugHelper.WriteLine("Backup: File created is empty");

                    File.Delete(BACKUP_FILE_PATH); //WE DELETE THE EMPTY FILE CREATED
                    new UpdateMyProcessEvents($"Error while creating {Path.GetFileName(BACKUP_FILE_PATH)}", "Error").Update();
                }
            }
        }
Example #2
0
        private static void LoadPAKFiles(bool bAllPAKs = false)
        {
            if (PAKEntries.PAKEntriesList != null && PAKEntries.PAKEntriesList.Any())
            {
                AssetEntries.ArraySearcher    = new Dictionary <string, FPakEntry[]>();
                AssetEntries.AssetEntriesDict = new Dictionary <string, PakReader.PakReader>();

                //MAIN PAKs LOOP
                foreach (PAKInfosEntry Pak in PAKEntries.PAKEntriesList.Where(x => !x.bTheDynamicPAK))
                {
                    if (!string.IsNullOrEmpty(FProp.Default.FPak_MainAES))
                    {
                        DebugHelper.WriteLine($".PAKs: Loading {Pak.ThePAKPath} with key: {FProp.Default.FPak_MainAES}");

                        byte[] AESKey = AESUtility.StringToByteArray(FProp.Default.FPak_MainAES);
                        PakReader.PakReader reader = null;
                        try
                        {
                            reader = new PakReader.PakReader(Pak.ThePAKPath, AESKey);
                        }
                        catch (Exception ex)
                        {
                            DebugHelper.WriteException(ex, Pak.ThePAKPath);

                            if (string.Equals(ex.Message, "The AES key is invalid"))
                            {
                                UIHelper.DisplayError();
                            }
                            else
                            {
                                new UpdateMyConsole(ex.Message, CColors.Red, true).Append(); return;
                            }
                            break;
                        }

                        if (reader != null)
                        {
                            PAKEntries.PAKToDisplay.Add(Path.GetFileName(Pak.ThePAKPath), reader.FileInfos);

                            if (bAllPAKs)
                            {
                                new UpdateMyProcessEvents($"{Path.GetFileNameWithoutExtension(Pak.ThePAKPath)} mount point: {reader.MountPoint}", "Loading").Update();
                            }
                            foreach (FPakEntry entry in reader.FileInfos)
                            {
                                AssetEntries.AssetEntriesDict[entry.Name] = reader;
                                AssetEntries.ArraySearcher[entry.Name]    = reader.FileInfos;
                            }
                        }
                    }
                }

                //DYNAMIC PAKs LOOP
                foreach (PAKInfosEntry Pak in PAKEntries.PAKEntriesList.Where(x => x.bTheDynamicPAK))
                {
                    byte[] AESKey         = null;
                    string AESFromManager = string.Empty;
                    if (AESEntries.AESEntriesList != null && AESEntries.AESEntriesList.Any())
                    {
                        AESFromManager = AESEntries.AESEntriesList.Where(x => string.Equals(x.ThePAKName, Path.GetFileNameWithoutExtension(Pak.ThePAKPath))).Select(x => x.ThePAKKey).FirstOrDefault();
                        if (!string.IsNullOrEmpty(AESFromManager))
                        {
                            DebugHelper.WriteLine($".PAKs: Loading {Pak.ThePAKPath} with key: {AESFromManager}");
                            AESKey = AESUtility.StringToByteArray(AESFromManager);
                        }
                    }

                    if (AESKey != null)
                    {
                        PakReader.PakReader reader = null;
                        try
                        {
                            reader = new PakReader.PakReader(Pak.ThePAKPath, AESKey);
                        }
                        catch (Exception ex)
                        {
                            DebugHelper.WriteException(ex, Pak.ThePAKPath);

                            if (string.Equals(ex.Message, "The AES key is invalid"))
                            {
                                UIHelper.DisplayError(Path.GetFileNameWithoutExtension(Pak.ThePAKPath), AESFromManager);
                            }
                            else
                            {
                                new UpdateMyConsole(ex.Message, CColors.Red, true).Append(); return;
                            }
                            continue;
                        }

                        if (reader != null)
                        {
                            PAKEntries.PAKToDisplay.Add(Path.GetFileName(Pak.ThePAKPath), reader.FileInfos);

                            if (bAllPAKs)
                            {
                                new UpdateMyProcessEvents($"{Path.GetFileNameWithoutExtension(Pak.ThePAKPath)} mount point: {reader.MountPoint}", "Loading").Update();
                            }
                            foreach (FPakEntry entry in reader.FileInfos)
                            {
                                AssetEntries.AssetEntriesDict[entry.Name] = reader;
                                AssetEntries.ArraySearcher[entry.Name]    = reader.FileInfos;
                            }
                        }
                    }
                    else
                    {
                        DebugHelper.WriteLine($".PAKs: No key found for {Pak.ThePAKPath}");
                    }
                }

                AssetTranslations.SetAssetTranslation(FProp.Default.FLanguage);
            }
        }