// P3F public static void Unzip(string iso) { if (!FileIOWrapper.Exists(iso)) { Console.Write($"[ERROR] Couldn't find {iso}. Please correct the file path in config."); return; } ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = true; startInfo.FileName = $@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Dependencies\7z\7z.exe"; if (!FileIOWrapper.Exists(startInfo.FileName)) { Console.Write($"[ERROR] Couldn't find {startInfo.FileName}. Please check if it was blocked by your anti-virus."); return; } Application.Current.Dispatcher.Invoke(() => { Mouse.OverrideCursor = Cursors.Wait; }); startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.UseShellExecute = false; startInfo.Arguments = $"x -y \"{iso}\" -o\"" + @"Original\Persona 3 FES" + "\" BTL.CVM DATA.CVM"; Console.WriteLine($"[INFO] Extracting BTL.CVM and DATA.CVM from {iso}"); using (Process process = new Process()) { process.StartInfo = startInfo; process.Start(); process.WaitForExit(); } startInfo.Arguments = "x -y \"" + $@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 3 FES\BTL.CVM" + "\" -o\"" + $@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 3 FES\BTL" + "\" *.BIN *.PAK *.PAC *.TBL *.SPR -r"; Console.WriteLine($"[INFO] Extracting base files from BTL.CVM"); using (Process process = new Process()) { process.StartInfo = startInfo; process.Start(); process.WaitForExit(); } FileIOWrapper.Delete($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 3 FES\BTL.CVM"); startInfo.Arguments = "x -y \"" + $@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 3 FES\DATA.CVM" + "\" -o\"" + $@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 3 FES\DATA" + "\" *.BIN *.PAK *.PAC *.SPR -r"; Console.WriteLine($"[INFO] Extracting base files from DATA.CVM"); using (Process process = new Process()) { process.StartInfo = startInfo; process.Start(); process.WaitForExit(); } FileIOWrapper.Delete($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 3 FES\DATA.CVM"); Console.WriteLine($"[INFO] Finished unpacking base files!"); Application.Current.Dispatcher.Invoke(() => { Mouse.OverrideCursor = null; }); }
public async Task ExtractPackageAsync(string sourceFilePath, string destDirPath, IProgress <double>?progress = null, CancellationToken cancellationToken = default) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = true; startInfo.FileName = @$ "{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Dependencies\7z\7z.exe"; if (!FileIOWrapper.Exists(startInfo.FileName)) { Console.WriteLine($"[ERROR] Couldn't find {startInfo.FileName}. Please check if it was blocked by your anti-virus."); return; } // Extract the file startInfo.Arguments = $"x -y \"{sourceFilePath}\" -o\"{destDirPath}\""; Console.WriteLine($"[INFO] Extracting {sourceFilePath}"); startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.UseShellExecute = false; using (Process process = new Process()) { process.StartInfo = startInfo; process.Start(); process.WaitForExit(); } // TODO Check if it actually succeeded (by reading the command output I guess) Console.WriteLine($"[INFO] Done Extracting {sourceFilePath}"); FileIOWrapper.Delete(@$ "{sourceFilePath}"); Console.WriteLine(@$ "[INFO] Deleted {sourceFilePath}"); // Move the folders to the right place string parentPath = Directory.GetParent(destDirPath).FullName; Directory.Move(Directory.GetDirectories(destDirPath)[0], $@"{parentPath}\Aemulus"); Directory.Delete(destDirPath); Directory.Move($@"{parentPath}\Aemulus", destDirPath); }
public static void Append(string path, string cpkLang) { // Check if required files are there if (!FileIOWrapper.Exists($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Dependencies\preappfile\preappfile.exe")) { Console.WriteLine($@"[ERROR] Couldn't find Dependencies\preappfile\preappfile.exe. Please check if it was blocked by your anti-virus."); return; } if (!FileIOWrapper.Exists($@"{path}\{cpkLang}")) { Console.WriteLine($@"[ERROR] Couldn't find {path}\{cpkLang} for appending."); return; } // Backup cpk if not backed up already if (!FileIOWrapper.Exists($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 4 Golden\{cpkLang}")) { Console.WriteLine($@"[INFO] Backing up {cpkLang}.cpk"); FileIOWrapper.Copy($@"{path}\{cpkLang}", $@"Original\Persona 4 Golden\{cpkLang}"); } // Copy original cpk back if different if (GetChecksumString($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 4 Golden\{cpkLang}") != GetChecksumString($@"{path}\{cpkLang}")) { Console.WriteLine($@"[INFO] Reverting {cpkLang} back to original"); FileIOWrapper.Copy($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 4 Golden\{cpkLang}", $@"{path}\{cpkLang}", true); } if (!FileIOWrapper.Exists($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 4 Golden\movie.cpk")) { Console.WriteLine($@"[INFO] Backing up movie.cpk"); FileIOWrapper.Copy($@"{path}\movie.cpk", $@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 4 Golden\movie.cpk"); } // Copy original cpk back if different if (GetChecksumString($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 4 Golden\movie.cpk") != GetChecksumString($@"{path}\movie.cpk")) { Console.WriteLine($@"[INFO] Reverting movie.cpk back to original"); FileIOWrapper.Copy($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 4 Golden\movie.cpk", $@"{path}\movie.cpk", true); } // Delete modified pacs if (FileIOWrapper.Exists($@"{path}\data00007.pac")) { Console.WriteLine($"[INFO] Deleting data00007.pac"); FileIOWrapper.Delete($@"{path}\data00007.pac"); } if (FileIOWrapper.Exists($@"{path}\movie00003.pac")) { Console.WriteLine($"[INFO] Deleting movie00003.pac"); FileIOWrapper.Delete($@"{path}\movie00003.pac"); } ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = true; startInfo.FileName = $@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Dependencies\Preappfile\preappfile.exe"; startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.UseShellExecute = false; if (Directory.Exists($@"{path}\mods\preappfile\{Path.GetFileNameWithoutExtension(cpkLang)}")) { Console.WriteLine($@"[INFO] Appending to {cpkLang}"); startInfo.Arguments = $@"-i ""{path}\mods\preappfile\{Path.GetFileNameWithoutExtension(cpkLang)}"" -a ""{path}\{cpkLang}"" -o ""{path}\{cpkLang}"" --pac-index 7"; using (Process process = new Process()) { process.StartInfo = startInfo; process.Start(); process.WaitForExit(); } } if (Directory.Exists($@"{path}\mods\preappfile\movie")) { Console.WriteLine($@"[INFO] Appending to movie"); startInfo.Arguments = $@"-i ""{path}\mods\preappfile\movie"" -a ""{path}\movie.cpk"" -o ""{path}\movie.cpk"" --pac-index 3"; using (Process process = new Process()) { process.StartInfo = startInfo; process.Start(); process.WaitForExit(); } } }
public static void Restart(string modPath) { Console.WriteLine($"[INFO] Restoring directory to original state..."); // Just in case its missing for some reason Directory.CreateDirectory($@"{modPath}\data"); // Clear data directory Parallel.ForEach(Directory.GetFiles($@"{modPath}\data"), file => { // Delete if not found in Original if (!FileIOWrapper.Exists($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 5 Strikers\motor_rsc\data\{Path.GetFileName(file)}")) { Console.WriteLine($@"[INFO] Deleting {file}..."); try { FileIOWrapper.Delete(file); } catch (Exception e) { Console.WriteLine($"[ERROR] Couldn't delete {file} ({e.Message})"); } } // Overwrite if file size/date modified are different else if (new FileInfo(file).Length != new FileInfo($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 5 Strikers\motor_rsc\data\{Path.GetFileName(file)}").Length || FileIOWrapper.GetLastWriteTime(file) != FileIOWrapper.GetLastWriteTime($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 5 Strikers\motor_rsc\data\{Path.GetFileName(file)}")) { Console.WriteLine($@"[INFO] Reverting {file} to original..."); try { FileIOWrapper.Copy($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 5 Strikers\motor_rsc\data\{Path.GetFileName(file)}", file, true); } catch (Exception e) { Console.WriteLine($"[ERROR] Couldn't overwrite {file} ({e.Message})"); } } }); // Copy over original files that may have accidentally been deleted foreach (var file in original_data) { if (!FileIOWrapper.Exists($@"{modPath}\data\{file}") && FileIOWrapper.Exists($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 5 Strikers\motor_rsc\data\{file}")) { Console.WriteLine($"[INFO] Restoring {file}..."); try { FileIOWrapper.Copy($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 5 Strikers\motor_rsc\data\{file}", $@"{modPath}\data\{file}", true); } catch (Exception e) { Console.WriteLine($"[ERROR] Couldn't copy over {file} ({e.Message})"); } } } // Copy over backed up original rdbs foreach (var file in Directory.GetFiles(modPath, "*.rdb")) { Console.WriteLine($@"[INFO] Reverting {file} to original..."); try { FileIOWrapper.Copy($@"{Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)}\Original\Persona 5 Strikers\motor_rsc\{Path.GetFileName(file)}", file, true); } catch (Exception e) { Console.WriteLine($"[ERROR] Couldn't overwrite {file} ({e.Message})"); } } }