Exemple #1
0
        public static WPDGameDatas FromPath(this WPDGameDatas datas, string path)
        {
            JObject obj = new JObject();

            foreach (var file in Directory.GetFiles(path, "*.json"))
            {
                dynamic subObj = JsonConvert.DeserializeObject(File.ReadAllText(file));
                obj[Path.GetFileNameWithoutExtension(file)] = subObj;
            }
            return(obj.ToObject <WPDGameDatas>());
        }
        private async void btnStart_Click(object sender, EventArgs e)
        {
            btnStart.Enabled      = false;
            btnBrowse.Enabled     = false;
            rbClientTexts.Enabled = false;
            rbGameData.Enabled    = false;
            Cursor     = Cursors.WaitCursor;
            ControlBox = false;
            exitToolStripMenuItem.Enabled = false;

            if (rbClientTexts.Checked)
            {
                foreach (var file in Files)
                {
                    await Task.Run(() =>
                    {
                        using (var stream = new FileStream(file, FileMode.Open))
                        {
                            var formatter         = new BinaryFormatter();
                            var clientTextsBase64 = (string)formatter.Deserialize(stream);

                            var clientTexts = new WPDClientTexts();

                            try
                            {
                                clientTexts.DeserializeFromBase64String(clientTextsBase64);
                            }
                            catch (Exception)
                            {
                                MessageBox.Show($"File: {file} was invalid!", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            }

                            var jsonEncoded = JsonConvert.SerializeObject(clientTexts, Formatting.Indented);
                            var output      = Path.Combine(Path.GetDirectoryName(file), Path.GetFileNameWithoutExtension(file) + "_unpacked.json");

                            using (var outStream = new FileStream(output, FileMode.Create))
                                using (var writer = new StreamWriter(outStream))
                                {
                                    writer.WriteLine(jsonEncoded);
                                }
                        }
                    });

                    progressBar.Increment(1);
                }
                MessageBox.Show($"Done unpacking {Files.Count} ClientTexts.", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (rbGameData.Checked)
            {
                foreach (var file in Files)
                {
                    await Task.Run(() =>
                    {
                        using (var stream = new FileStream(file, FileMode.Open))
                        {
                            var formatter      = new BinaryFormatter();
                            var gameDataBase64 = (string)formatter.Deserialize(stream);

                            var gameDatas = new WPDGameDatas();

                            try
                            {
                                gameDatas.DeserializeFromBase64String(gameDataBase64);
                            }
                            catch (Exception)
                            {
                                MessageBox.Show($"File: {file} was invalid!", "Invalid File", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            }

                            var jObj   = JObject.FromObject(gameDatas);
                            var output = Path.Combine(Path.GetDirectoryName(file), "GameDatas");
                            if (!Directory.Exists(output))
                            {
                                Directory.CreateDirectory(output);
                            }

                            foreach (var obj in jObj)
                            {
                                using (var outStream = new FileStream(Path.Combine(output, $"{obj.Key}.json"), FileMode.Create))
                                    using (var writer = new StreamWriter(outStream))
                                    {
                                        writer.WriteLine(obj.Value.ToString());
                                    }
                            }
                        }
                    });

                    progressBar.Increment(1);
                }
                MessageBox.Show($"Done unpacking {Files.Count} GameDatas.", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            btnStart.Enabled      = true;
            btnBrowse.Enabled     = true;
            rbClientTexts.Enabled = true;
            rbGameData.Enabled    = true;
            Cursor     = Cursors.Default;
            ControlBox = true;
            exitToolStripMenuItem.Enabled = true;
        }