private void ReadNewFilesFromRestore() { RestoreNewFilesList.Clear(); AAPakFileInfo rnfl = restorepak.nullAAPakFileInfo; if (restorepak.GetFileByName(ModNewFilesFileName, ref rnfl)) { var rf = restorepak.ExportFileAsStream(rnfl); var s = AAPak.StreamToString(rf); RestoreNewFilesList.AddRange(s.Split('\n').ToArray()); } }
public static void LoadGFileFromPak(AAPak pak, string fileName) { if ((pak == null) || (!pak.isOpen) || !pak.FileExists(fileName)) { return; } var lines = new List <string>(); using (var fs = pak.ExportFileAsStream(fileName)) { using (var sr = new StreamReader(fs)) { while (!sr.EndOfStream) { lines.Add(sr.ReadLine()); } } } var gf = ConvertGFileStringList(lines); foreach (var gl in gf) { if (GFileVars.ContainsKey(gl.Key)) { GFileVars.Remove(gl.Key); } GFileVars.Add(gl.Key, gl.Value); } }
private void BtnInstall_Click(object sender, EventArgs e) { btnInstall.Enabled = false; pb.Minimum = 0; pb.Maximum = FilesToMod.Count; pb.Step = 1; lInstallInfo.Text = "Creating restore files"; foreach (var fi in FilesToInstall) { // If file exists in gamepak, make a backup AAPakFileInfo gamefi = gamepak.nullAAPakFileInfo; if (gamepak.GetFileByName(fi.name, ref gamefi)) { var fileBackupStream = gamepak.ExportFileAsStream(fi.name); fileBackupStream.Position = 0; AAPakFileInfo restoreFileInfo = restorepak.nullAAPakFileInfo; if (!restorepak.AddFileFromStream(fi.name, fileBackupStream, DateTime.FromFileTimeUtc(gamefi.createTime), DateTime.FromFileTimeUtc(gamefi.modifyTime), false, out restoreFileInfo)) { MessageBox.Show("Error making backup of " + fi.name); } } var fileModStream = modpak.ExportFileAsStream(fi.name); fileModStream.Position = 0; AAPakFileInfo newModFile = gamepak.nullAAPakFileInfo; if (!gamepak.AddFileFromStream(fi.name, fileModStream, DateTime.FromFileTimeUtc(fi.createTime), DateTime.FromFileTimeUtc(fi.modifyTime), false, out newModFile)) { MessageBox.Show("Error modding file " + fi.name); } pb.PerformStep(); pb.Refresh(); //System.Threading.Thread.Sleep(50); } lInstallInfo.Text = "Updating game file header"; lInstallInfo.Refresh(); gamepak.SaveHeader(); lInstallInfo.Text = "Updating restore file data"; lInstallInfo.Refresh(); ReadNewFilesFromRestore(); // Add newly added files to the newfiles.txt foreach (var fi in FilesAddedWithInstall) { if (RestoreNewFilesList.IndexOf(fi.name) < 0) { RestoreNewFilesList.Add(fi.name); } } WriteNewFilesForRestore(); restorepak.SaveHeader(); pb.Value = pb.Maximum; MessageBox.Show("Mod has been installed", "Install", MessageBoxButtons.OK, MessageBoxIcon.Information); ValidateInstallOptions(); }
private bool HandleArgs() { bool showHelp = false; var args = Environment.GetCommandLineArgs(); for (int i = 1; i < args.Length; i++) { var larg = args[i].ToLower(); string nextArg = ""; if (i < args.Length - 1) { nextArg = args[i + 1]; } switch (larg) { case "-m": // Mod source ModPakFileName = nextArg; i++; break; case "-g": // Game_Pak GamePakFileName = nextArg; i++; break; case "-r": // restore pak RestorePakFileName = nextArg; i++; break; case "-?": case "-h": case "-help": case "/?": case "/h": case "/help": // Help showHelp = true; break; } } if (showHelp) { Hide(); MessageBox.Show(helpText, "AAMod - Command-Line Help", MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } // if nothing specified, try self if (ModPakFileName == string.Empty) { ModPakFileName = Application.ExecutablePath; Text = DefaultTitle + " - Self-Extractor - " + Path.GetFileNameWithoutExtension(Application.ExecutablePath); } else { Text = DefaultTitle + " - " + ModPakFileName; } if (!File.Exists(ModPakFileName)) { MessageBox.Show("Mod-file not found\n" + ModPakFileName, "aamod Open Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); return(false); } if (!modpak.OpenPak(ModPakFileName, true)) { if (ModPakFileName == Application.ExecutablePath) { // show a different error if you tried to open it without any parameters and tried to use the exe as a pak and failed Visible = false; MessageBox.Show("This program cannot be used as a stand-alone program.\n" + "You either need to provide command-line arguments or this file needs to be generated by AAPakEditor to contain pak information.\n\n" + "Use -? to get a list of possible arguments.", "AAMod Open Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); } else { MessageBox.Show("Failed to open mod-file for reading\n" + ModPakFileName, "aamod Open Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); } return(false); } if (modpak.FileExists(ModInfoFileName)) { var infoStream = modpak.ExportFileAsStream(ModInfoFileName); var tw = AAPak.StreamToString(infoStream); tDescription.Text = tw; } else { tDescription.Text = "No description provided for this mod file."; } tDescription.SelectionLength = 0; if (modpak.FileExists(ModPNGImageFileName)) { var picStream = modpak.ExportFileAsStream(ModPNGImageFileName); var img = Image.FromStream(picStream); modIcon.Image = img; } else if (modpak.FileExists(ModJPGImageFileName)) { var picStream = modpak.ExportFileAsStream(ModJPGImageFileName); var img = Image.FromStream(picStream); modIcon.Image = img; } while (!File.Exists(GamePakFileName)) { if (openGamePakDlg.ShowDialog() == DialogResult.OK) { GamePakFileName = openGamePakDlg.FileName; } else { return(false); } } Refresh(); lInstallLocation.Text = "Loading, please wait ..."; lInstallLocation.Refresh(); TryLoadCustomKey(gamepak, GamePakFileName); if (gamepak.OpenPak(GamePakFileName, false)) { lInstallLocation.Text = GamePakFileName; } else { MessageBox.Show("Failed to open ArcheAge game pak for writing\n" + GamePakFileName, "game_pak Open Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); return(false); } if (RestorePakFileName == string.Empty) { RestorePakFileName = Path.GetDirectoryName(GamePakFileName).TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar + ".aamod" + Path.DirectorySeparatorChar + "restore_pak"; } if (File.Exists(RestorePakFileName)) { if (!restorepak.OpenPak(RestorePakFileName, false)) { MessageBox.Show("Failed to open mod uninstall file for writing\n" + RestorePakFileName + "\n\nThis is most likely due to a corrupted restore file. Previously backed-up data is lost !", "restore_pak Open Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); restorepak.ClosePak(); if (MessageBox.Show("Do you want to create a new restore file ?\nThis step is required to be able to continue.", "Re-Create backup file", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { if (!restorepak.NewPak(RestorePakFileName)) { MessageBox.Show("Failed to re-create mod uninstall file\n" + RestorePakFileName, "restore_pak Create Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); return(false); } } else { return(false); } } } else { try { Directory.CreateDirectory(Path.GetDirectoryName(RestorePakFileName)); } catch { MessageBox.Show("Failed to create mod uninstall directory for \n" + RestorePakFileName, "restore_pak Directory Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); return(false); } // create a new one if none exists yet if (!restorepak.NewPak(RestorePakFileName)) { MessageBox.Show("Failed to create mod uninstall file\n" + RestorePakFileName, "restore_pak Create Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); return(false); } } ReadNewFilesFromRestore(); // TODO: continue work here return(true); }
private void BtnQuestSphere_Click(object sender, EventArgs e) { if ((pak == null) || (!pak.isOpen)) { return; } var qsd = new List <QuestSphereEntry>(); var sl = new List <string>(); LQuestSphereData.Text = "<searching for data>"; LQuestSphereData.Update(); // Find all related files and concat them into a giant stringlist foreach (var pfi in pak.files) { var lowername = pfi.name.ToLower(); if (lowername.EndsWith("quest_sign_sphere.g")) { var namesplited = lowername.Split('/'); var thisStream = pak.ExportFileAsStream(pfi); using (var rs = new StreamReader(thisStream)) { LQuestSphereData.Text = pfi.name; LQuestSphereData.Update(); sl.Clear(); while (!rs.EndOfStream) { sl.Add(rs.ReadLine().Trim(' ').Trim('\t').ToLower()); } } var worldname = ""; var zone = 0; if (namesplited.Length > 6) { if ((namesplited[0] == "game") && (namesplited[1] == "worlds") && (namesplited[3] == "level_design") && (namesplited[4] == "zone") && (namesplited[6] == "client") ) { worldname = namesplited[2]; zone = int.Parse(namesplited[5]); } } for (int i = 0; i < sl.Count - 4; i++) { var l0 = sl[i + 0]; // area var l1 = sl[i + 1]; // qtype var l2 = sl[i + 2]; // ctype var l3 = sl[i + 3]; // pos var l4 = sl[i + 4]; // radius if (l0.StartsWith("area") && l1.StartsWith("qtype") && l2.StartsWith("ctype") && l3.StartsWith("pos") && l4.StartsWith("radius")) { try { var qse = new QuestSphereEntry(); qse.worldID = worldname; qse.zoneID = zone; qse.questID = int.Parse(l1.Substring(6)); qse.componentID = int.Parse(l2.Substring(6)); var subline = l3.Substring(4).Replace("(", "").Replace(")", "").Replace("x", "").Replace("y", "").Replace("z", "").Replace(" ", ""); var posstring = subline.Split(','); if (posstring.Length == 3) { // Parse the floats with NumberStyles.Float and CultureInfo.InvariantCulture or we get all sorts of // weird stuff with the decimal points depending on the user's language settings qse.X = double.Parse(posstring[0], NumberStyles.Float, CultureInfo.InvariantCulture); qse.Y = double.Parse(posstring[1], NumberStyles.Float, CultureInfo.InvariantCulture); qse.Z = double.Parse(posstring[2], NumberStyles.Float, CultureInfo.InvariantCulture); } qse.radius = double.Parse(l4.Substring(7)); qsd.Add(qse); i += 5; } catch (Exception x) { MessageBox.Show("Exception: " + x.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } } System.Threading.Thread.Sleep(5); } } string json = JsonConvert.SerializeObject(qsd.ToArray(), Formatting.Indented); LQuestSphereData.Text = "<added " + qsd.Count.ToString() + " entries>"; LQuestSphereData.Update(); exportFileDlg.FileName = "quest_sign_spheres.json"; if (exportFileDlg.ShowDialog() == DialogResult.OK) { File.WriteAllText(exportFileDlg.FileName, json); } }