示例#1
0
        private void UpdateFolders()
        {
            this.listView1.Items.Clear();
            this.toolStripTextBox1.Text = BaseJMDFile.NowPath;
            List <ListViewItem> lists = new List <ListViewItem>();

            foreach (IPackedObject ipo in BaseJMDFile.NowFolderContent)
            {
                ListViewItem lvi;
                if (ipo.Type == ObjectType.File)
                {
                    JMDPackedFileInfo jpfi = (JMDPackedFileInfo)ipo;
                    lvi          = new ListViewItem(new string[] { jpfi.FileName + '.' + jpfi.Extension, $"0x{Convert.ToString(jpfi.Index, 16).PadLeft(8, '0')}", ("listview_item2_file").GetStringBag() });
                    lvi.ImageKey = "file";
                    if (BaseJMDFile.ModifiedFileInfos.Exists(x => x.FileIndex == jpfi.Index))
                    {
                        lvi.BackColor = Color.Red;
                    }
                }
                else
                {
                    JMDPackedFolderInfo jpfi = (JMDPackedFolderInfo)ipo;
                    lvi          = new ListViewItem(new string[] { jpfi.FolderName, $"0x{Convert.ToString(jpfi.Index, 16).PadLeft(8, '0')}", ("listview_item2_folder").GetStringBag() });
                    lvi.ImageKey = "folder";
                    if (BaseJMDFile.ModifiedFileInfos.Exists(x => x.FolderIndex == jpfi.Index))
                    {
                        lvi.BackColor = Color.Orange;
                    }
                }
                lists.Add(lvi);
            }
            listView1.Items.AddRange(lists.ToArray());
        }
示例#2
0
        public static uint GetDataKey(uint HeaderKey, JMDPackedFileInfo info)
        {
            byte[] strData = Encoding.GetEncoding("UTF-16").GetBytes(info.FileName);
            uint   key     = Adler.Adler32(0, strData, 0, strData.Length);

            key += info.Ext;
            key += (HeaderKey - 0x7E2AF33D);
            return(key);
        }
示例#3
0
        private void ExportAllFolder_bg(string outputPath, bool IncludeSubFolder, JMDFile file)
        {
            IPackedObject[]         ipos  = JMDPackedFilesInfoDecoder.GetJMDPackedFileInfos(file.GetStreamData(0xFFFFFFFF), file.HeaderKey, 0xFFFFFFFF);
            Stack <ExportProcessor> Stack = new Stack <ExportProcessor>();

            if (!Directory.Exists(outputPath))
            {
                throw new Exception("");
            }
            string StartPath = "";

            Stack.Push(new ExportProcessor
            {
                Path = StartPath,
                ipos = ipos
            });
            while (Stack.Count > 0 && !Canceled)
            {
                ExportProcessor ep      = Stack.Pop();
                string          outPath = outputPath + (StartPath == "" ? ep.Path : ep.Path.Replace(StartPath, ""));
                foreach (IPackedObject ipo in ep.ipos)
                {
                    if (ipo.Type == ObjectType.Folder && IncludeSubFolder)
                    {
                        JMDPackedFolderInfo jpfi = (JMDPackedFolderInfo)ipo;
                        ExportProcessor     nep  = new ExportProcessor
                        {
                            Path = ep.Path + $"\\{jpfi.FolderName}",
                            ipos = JMDPackedFilesInfoDecoder.GetJMDPackedFileInfos(file.GetStreamData(jpfi.Index), file.HeaderKey, jpfi.Index)
                        };
                        Stack.Push(nep);
                        if (!Directory.Exists($"{outPath}\\{((JMDPackedFolderInfo)ipo).FolderName}"))
                        {
                            Directory.CreateDirectory($"{outPath}\\{((JMDPackedFolderInfo)ipo).FolderName}");
                        }
                        continue;
                    }
                    if (ipo.Type == ObjectType.File)
                    {
                        JMDPackedFileInfo jfi = (JMDPackedFileInfo)ipo;
                        ChangeText(label5, $"Outputing: {ep.Path}\\{jfi.FileName}.{jfi.Extension}");
                        FileStream fs   = new FileStream($"{outPath}\\{jfi.FileName}.{jfi.Extension}", FileMode.Create);
                        byte[]     data = file.GetPackedFile(jfi);
                        fs.Write(data, 0, data.Length);
                        fs.Close();
                        data = null;
                    }
                    if (Canceled)
                    {
                        break;
                    }
                }
            }
            CloseWindow();
        }
示例#4
0
        private void filemenumodifyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            JMDPackedFileInfo fileInfo = (JMDPackedFileInfo)Array.Find(BaseJMDFile.NowFolderContent, x => x.Type == ObjectType.File && (((JMDPackedFileInfo)x).FileName + $".{((JMDPackedFileInfo)x).Extension}") == listView1.SelectedItems[0].SubItems[0].Text);
            //BaseJMDFile.ModifyDataStream(fileInfo.FileName,)
            OpenFileDialog offd = new OpenFileDialog()
            {
                Filter = "AllFiles|*.*",
            };

            if (offd.ShowDialog() == DialogResult.OK)
            {
                BaseJMDFile.ModifyDataStream(fileInfo.FileName, offd.FileName);
                listView1.SelectedItems[0].BackColor = Color.Red;
                Changed = true;
            }
        }
示例#5
0
        private void convertToPngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            JMDPackedFileInfo fileInfo = (JMDPackedFileInfo)Array.Find(BaseJMDFile.NowFolderContent, x => x.Type == ObjectType.File && (((JMDPackedFileInfo)x).FileName + $".{((JMDPackedFileInfo)x).Extension}") == listView1.SelectedItems[0].SubItems[0].Text);

            if (HaveChangedFile(fileInfo.Index))
            {
                MessageBox.Show("message_filemodified_convertPNG".GetStringBag(), "title".GetStringBag(), MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            byte[]       a = BaseJMDFile.GetPackedFile(fileInfo);
            TgaDDsViewer t = new TgaDDsViewer();

            t.Data = a;
            t.ConvertTGADDSToPng();
            a = null;
        }
示例#6
0
        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
            {
                return;
            }
            if (listView1.SelectedItems.Count == 0)
            {
                return;
            }
            ListViewItem lvii = listView1.SelectedItems[0];

            if (listView1.SelectedItems[0].SubItems[2].Text == ("listview_item2_file").GetStringBag())
            {
                Random            rm       = new Random();
                JMDPackedFileInfo fileInfo = (JMDPackedFileInfo)Array.Find(BaseJMDFile.NowFolderContent, x => x.Type == ObjectType.File && (((JMDPackedFileInfo)x).FileName + $".{((JMDPackedFileInfo)x).Extension}") == lvii.Text);
                if (BaseJMDFile.ModifiedFileInfos.Exists(x => x.FileIndex == fileInfo.Index))
                {
                    MessageBox.Show("message_filemodified".GetStringBag(), "title".GetStringBag(), MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (fileInfo.Extension == "dds" || fileInfo.Extension == "tga")
                {
                    TgaDDsViewer tdv = new TgaDDsViewer();
                    tdv.Data = BaseJMDFile.GetPackedFile(fileInfo);
                    tdv.Type = fileInfo.Extension == "dds" ? TgaDDsViewer.FileType.dds : fileInfo.Extension == "tga" ? TgaDDsViewer.FileType.tga : throw new Exception();
                    tdv.ShowBox();
                    return;
                }
                FileStream fs = new FileStream(Environment.GetEnvironmentVariable("TEMP") + $"\\{lvii.Text}", FileMode.Create);
                byte[]     a  = BaseJMDFile.GetPackedFile(fileInfo);
                fs.Write(a, 0, a.Length);
                fs.Close();
                a = null;
                Process ps = new Process();
                ps.StartInfo.FileName = Environment.GetEnvironmentVariable("TEMP") + $"\\{lvii.Text}";
                ps.Start();
                return;
            }

            string FolderName = lvii.SubItems[0].Text;

            BaseJMDFile.EnterToFolder(FolderName);
            UpdateFolders();
            this.toolStripButton1.Enabled = true;
        }
示例#7
0
        private void exportToolStripMenuItem_Click(object sender, EventArgs e)
        {
            JMDPackedFileInfo fileInfo = (JMDPackedFileInfo)Array.Find(BaseJMDFile.NowFolderContent, x => x.Type == ObjectType.File && (((JMDPackedFileInfo)x).FileName + $".{((JMDPackedFileInfo)x).Extension}") == listView1.SelectedItems[0].SubItems[0].Text);

            if (HaveChangedFile(fileInfo.Index))
            {
                MessageBox.Show("message_filemodified_export".GetStringBag(), "title".GetStringBag(), MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            ofd.Filter   = "AllFiles|*.*";
            ofd.FileName = $"{fileInfo.FileName}.{fileInfo.Extension}";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                FileStream fs = new FileStream(ofd.FileName, FileMode.Create);
                byte[]     a  = BaseJMDFile.GetPackedFile(fileInfo);
                fs.Write(a, 0, a.Length);
                fs.Close();
                a = null;
            }
        }