Exemple #1
0
 private void button_mpk_pack_Click(object sender, EventArgs e)
 {
     try
     {
         var mpk = new MPK();
         foreach (var file in Directory.GetFiles(textBox_mpk_pack_input.Text).OrderBy(f => f))
         {
             if (checkBox_mpk_pack_ignore_bak.Checked && file.EndsWith(".bak"))
             {
                 continue;
             }
             mpk.Entries.Add(new MPKEntry(Path.GetFileName(file), File.ReadAllBytes(file)));
         }
         Log("[MPK Pack] Created " + mpk.Entries.Count + " entries.");
         var target = textBox_mpk_pack_output.Text;
         if (Directory.Exists(target))
         {
             target = Path.Combine(target, Path.GetFileName(textBox_mpk_pack_input.Text) + ".mpk");
         }
         using (var writer = new BinaryWriter(File.Open(target, FileMode.Create)))
         {
             mpk.Write(writer);
             Log("[MPK Pack] Write success, size: " + writer.BaseStream.Position + ", target: " + target);
         }
     }
     catch (Exception ex) { Oops(ex); }
 }
Exemple #2
0
        private void button_patch_Click(object sender, EventArgs e)
        {
            textBox_log.Clear();
            button_patch.Enabled = false;
            ThreadPool.QueueUserWorkItem(s =>
            {
                try
                {
                    var usrdir = Path.Combine(textBox_path.Text, "USRDIR");
                    Log("[BERD] 正在寻找 USRDIR...");
                    if (!Directory.Exists(usrdir))
                    {
                        Oops("[BERD] USRDIR 不存在, 请检查你的目录设置.");
                        Invoke(new Action(() => button_patch.Enabled = true));
                        return;
                    }

                    var bakdir = usrdir + ".bak";
                    if (!Directory.Exists(bakdir))
                    {
                        Log("[BERD] 备份文件夹不存在, 创建中...");
                        Directory.CreateDirectory(bakdir);
                    }

                    foreach (var patch in Directory.GetFiles(PATCH_DIR, "*.json").Select(p => JSON.ToObject <Dictionary <string, dynamic> >(File.ReadAllText(p))))
                    {
                        if (!patch.ContainsKey("file"))
                        {
                            continue;
                        }
                        string file = patch["file"];
                        if (!File.Exists(Path.Combine(bakdir, file)))
                        {
                            Log("[BERD] 正在备份 " + file + "...");
                            File.Copy(Path.Combine(usrdir, file), Path.Combine(bakdir, file));
                        }

                        MPK mpk = null;
                        Log("[MPK] 正在加载 " + file + "...");
                        using (var reader = new BinaryReader(File.OpenRead(Path.Combine(bakdir, file))))
                        {
                            mpk = MPK.ReadFile(reader);
                        }

                        var entries = mpk.Entries.ToDictionary(k => k.Name, v => v);
                        switch (patch["type"])
                        {
                        case "scx":
                            if (!patchSCX(entries, patch["charset_preset"] + patch["charset"], patch["data"]))
                            {
                                return;
                            }
                            break;

                        case "file":
                            if (!patchFile(entries, patch["data"]))
                            {
                                return;
                            }
                            break;

                        default:
                            Oops("未知补丁类型");
                            Invoke(new Action(() => button_patch.Enabled = true));
                            return;
                        }

                        Log("[MPK] 正在打包 " + file + "...");
                        using (var writer = new BinaryWriter(File.Open(Path.Combine(usrdir, file), FileMode.Create)))
                        {
                            mpk.Write(writer);
                            Log("[MPK] 打包成功: " + writer.BaseStream.Position);
                        }
                    }

                    MessageBox.Show("补丁应用完成, 请检查游戏是否能正常运行", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Log("[FENGberd] 操作完成, 请检查游戏是否能正常运行");
                }
                catch (Exception ex)
                {
                    Oops(ex.ToString());
                    Log("[FENGberd] 发生致命错误");
                }
                Invoke(new Action(() => button_patch.Enabled = true));
            });
        }