Exemplo n.º 1
0
        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());
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
            }
        }