Example #1
0
        private void treeView1_AfterSelect_1(object sender, TreeViewEventArgs e)
        {
            TreeNode t = treeView1.SelectedNode;

            hb1.BringToFront();
            hb1.ByteProvider = new DynamicByteProvider(new byte[0]);
            if (t == null)
            {
                return;
            }
            if (t.Text.ToLower().Contains("sha1"))
            {
                TreeNode t2 = t;
                if (t2 != null)
                {
                    string sha1     = t2.Nodes[0].Text;
                    byte[] sha1buff = Helpers.HexStringToByteArray(sha1);
                    byte[] data     = SHA1Access.GetDataBySha1(sha1buff);
                    hb1.ByteProvider = new DynamicByteProvider(data);
                    hb1.BringToFront();
                    rtb1.Text = Helpers.DecompileLUAC(data);
                    if (rtb1.Text != "")
                    {
                        rtb1.BringToFront();
                    }
                }
            }
        }
Example #2
0
        private void toolStripButton14_Click(object sender, EventArgs e)
        {
            SaveFileDialog d = new SaveFileDialog();

            d.Filter = "*.bin|*.bin";
            TreeNode t = treeView4.SelectedNode;

            if (t == null || t.Nodes == null || t.Nodes.Count != 0)
            {
                return;
            }
            string path = Helpers.GetPathFromNode(t, "/");

            path       = path.Substring(1, path.Length - 1);
            d.FileName = t.Text + ".bin";
            if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                foreach (DBAccess.EBXInformation ebx in ebxlist)
                {
                    if (path == ebx.ebxname && ebx.casPatchType == 0 && !ebx.isbase)
                    {
                        byte[] data = new byte[0];
                        if (ebx.incas)
                        {
                            data = SHA1Access.GetDataBySha1(Helpers.HexStringToByteArray(ebx.sha1));
                        }
                        else
                        {
                            TOCFile      toc        = new TOCFile(ebx.tocfilepath);
                            byte[]       bundledata = toc.ExportBundleDataByPath(ebx.bundlepath);
                            BinaryBundle b          = new BinaryBundle(new MemoryStream(bundledata));
                            foreach (BinaryBundle.EbxEntry ebx2 in b.EbxList)
                            {
                                if (path == ebx2._name)
                                {
                                    data = ebx2._data;
                                }
                            }
                        }
                        File.WriteAllBytes(d.FileName, data);
                        MessageBox.Show("Done.");
                        return;
                    }
                }
            }
        }
Example #3
0
 private void RefreshPreview()
 {
     try
     {
         int n = listBox2.SelectedIndex;
         if (n == -1)
         {
             return;
         }
         status.Text = "Getting header infos from db...";
         Application.DoEvents();
         DBAccess.RESInformation    ti   = ttprevlist[n];
         DBAccess.BundleInformation buni = DBAccess.GetBundleInformationById(ti.bundlepath)[0];
         DBAccess.TOCInformation    toci = DBAccess.GetTocInformationByIndex(buni.tocIndex);
         byte[] resdata = new byte[0];
         if (toci.incas)
         {
             status.Text = "Getting header data from sha1...";
             Application.DoEvents();
             resdata = SHA1Access.GetDataBySha1(Helpers.HexStringToByteArray(ti.sha1));
         }
         else
         {
             status.Text = "Getting header data from binary bundle...";
             Application.DoEvents();
             TOCFile      toc        = new TOCFile(toci.path);
             byte[]       bundledata = toc.ExportBundleDataByPath(buni.bundlepath);
             BinaryBundle b          = new BinaryBundle(new MemoryStream(bundledata));
             foreach (BinaryBundle.ResEntry res in b.ResList)
             {
                 if (res._name == ti.resname)
                 {
                     resdata = res._data;
                     break;
                 }
             }
         }
         hb2.ByteProvider = new DynamicByteProvider(resdata);
         status.Text      = "Ready";
     }
     catch (Exception ex)
     {
         status.Text = "General error, after state '" + status.Text + "' : " + ex.Message;
     }
 }
Example #4
0
        private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            int n = listBox2.SelectedIndex;

            if (n == -1)
            {
                return;
            }
            hb2.ByteProvider = new DynamicByteProvider(new byte[0]);
            Mesh.MeshLOD l = mesh.header.LODs[n];
            DBAccess.ChunkInformation ci = DBAccess.GetChunkInformationById(l.ChunkID);
            if (ci.sha1 == null)
            {
                return;
            }
            byte[] data = SHA1Access.GetDataBySha1(ci.sha1);
            hb2.ByteProvider = new DynamicByteProvider(data);
        }
Example #5
0
        private void openInEBXToolToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TreeNode t = treeView4.SelectedNode;

            if (t == null || t.Nodes == null || t.Nodes.Count != 0)
            {
                return;
            }
            string path = Helpers.GetPathFromNode(t, "/");

            path = path.Substring(1, path.Length - 1);
            foreach (DBAccess.EBXInformation ebx in ebxlist)
            {
                if (path == ebx.ebxname && ebx.casPatchType == 0 && !ebx.isbase)
                {
                    byte[] data = new byte[0];
                    if (ebx.incas)
                    {
                        data = SHA1Access.GetDataBySha1(Helpers.HexStringToByteArray(ebx.sha1));
                    }
                    else
                    {
                        TOCFile      toc        = new TOCFile(ebx.tocfilepath);
                        byte[]       bundledata = toc.ExportBundleDataByPath(ebx.bundlepath);
                        BinaryBundle b          = new BinaryBundle(new MemoryStream(bundledata));
                        foreach (BinaryBundle.EbxEntry ebx2 in b.EbxList)
                        {
                            if (path == ebx2._name)
                            {
                                data = ebx2._data;
                            }
                        }
                    }
                    ContentTools.EBXTool ebxtool = new ContentTools.EBXTool();
                    ebxtool.MdiParent = this.MdiParent;
                    ebxtool.Show();
                    ebxtool.WindowState = FormWindowState.Maximized;
                    ebxtool.LoadEbx(data);
                    break;
                }
            }
        }
Example #6
0
        private void Search()
        {
            rtb1.Text = rtb2.Text = rtb3.Text = "";
            string sha1 = toolStripTextBox1.Text.Trim().ToLower();

            if (sha1.Length != 40)
            {
                MessageBox.Show("Not valid SHA1!");
                return;
            }
            byte[] data = SHA1Access.GetDataBySha1(Helpers.HexStringToByteArray(sha1));
            if (data.Length == 0)
            {
                MessageBox.Show("SHA1 not found!");
                return;
            }
            hb1.ByteProvider = new DynamicByteProvider(data);
            el = DBAccess.GetEBXInformationBySHA1(sha1);
            rl = DBAccess.GetRESInformationBySHA1(sha1);
            cl = DBAccess.GetChunkInformationBySHA1(sha1);
            listBox1.Items.Clear();
            int count = 0;
            int l     = GlobalStuff.FindSetting("gamepath").Length;

            foreach (DBAccess.EBXInformation ei in el)
            {
                listBox1.Items.Add((count++) + " : " + ei.ebxname);
            }
            listBox2.Items.Clear();
            count = 0;
            foreach (DBAccess.RESInformation ri in rl)
            {
                listBox2.Items.Add((count++) + " : " + ri.resname);
            }
            listBox3.Items.Clear();
            count = 0;
            foreach (DBAccess.ChunkInformation ci in cl)
            {
                listBox3.Items.Add((count++) + " : id = " + Helpers.ByteArrayToHexString(ci.id));
            }
        }
Example #7
0
 private void RefreshPreview()
 {
     try
     {
         int n = listBox2.SelectedIndex;
         if (n == -1)
         {
             return;
         }
         status.Text = "Getting header infos from db...";
         Application.DoEvents();
         DBAccess.RESInformation    ti   = ttprevlist[n];
         DBAccess.BundleInformation buni = DBAccess.GetBundleInformationById(ti.bundlepath)[0];
         DBAccess.TOCInformation    toci = DBAccess.GetTocInformationByIndex(buni.tocIndex);
         BinaryBundle b       = new BinaryBundle();
         byte[]       resdata = new byte[0];
         if (toci.incas)
         {
             status.Text = "Getting header data from sha1...";
             Application.DoEvents();
             resdata = SHA1Access.GetDataBySha1(Helpers.HexStringToByteArray(ti.sha1));
         }
         else
         {
             status.Text = "Getting header data from binary bundle...";
             Application.DoEvents();
             TOCFile toc        = new TOCFile(toci.path);
             byte[]  bundledata = toc.ExportBundleDataByPath(buni.bundlepath);
             b = new BinaryBundle(new MemoryStream(bundledata));
             foreach (BinaryBundle.ResEntry res in b.ResList)
             {
                 if (res._name == ti.resname)
                 {
                     resdata = res._data;
                     break;
                 }
             }
         }
         hb2.ByteProvider = new DynamicByteProvider(resdata);
         Mesh mesh = new Mesh(new MemoryStream(resdata));
         foreach (Mesh.MeshLOD lod in mesh.header.LODs)
         {
             byte[] id   = lod.ChunkID;
             byte[] data = new byte[0];
             if (toci.incas)
             {
                 DBAccess.ChunkInformation ci = DBAccess.GetChunkInformationById(id);
                 if (ci.sha1 == null)
                 {
                     continue;
                 }
                 data = SHA1Access.GetDataBySha1(ci.sha1);
             }
             else
             {
                 byte t = id[0];
                 id[0] = id[3];
                 id[3] = t;
                 t     = id[1];
                 id[1] = id[2];
                 id[2] = t;
                 t     = id[6];
                 id[6] = id[7];
                 id[7] = t;
                 t     = id[4];
                 id[4] = id[5];
                 id[5] = t;
                 foreach (BinaryBundle.ChunkEntry c in b.ChunkList)
                 {
                     if (Helpers.ByteArrayCompare(id, c.id))
                     {
                         data = c._data;
                     }
                 }
                 if (data.Length == 0)
                 {
                     DBAccess.ChunkInformation ci = DBAccess.GetChunkInformationById(id);
                     if (ci.sha1 == null)
                     {
                         continue;
                     }
                     data = SHA1Access.GetDataBySha1(ci.sha1);
                 }
             }
             mesh.LoadChunkData(lod, new MemoryStream(data));
         }
         MeshRenderObject mro = new MeshRenderObject(mesh);
         renderer.list.Clear();
         renderer.list.Add(mro);
         renderer.worldoffset = -mro.center;
         renderer.CamDistance = mro.min.Length() + mro.max.Length();
         status.Text          = "Ready";
     }
     catch (Exception ex)
     {
         status.Text = "General error, after state '" + status.Text + "' : " + ex.Message;
     }
 }
Example #8
0
        private void toolStripButton15_Click(object sender, EventArgs e)
        {
            int errorcount          = 0;
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string basepath = fbd.SelectedPath + "\\";
                int    casptype = toolStripComboBox1.SelectedIndex;
                int    count    = 0;
                foreach (DBAccess.EBXInformation ebx in ebxlist)
                {
                    if (ebx.casPatchType == casptype)
                    {
                        byte[] data = new byte[0];
                        if (ebx.incas)
                        {
                            data = SHA1Access.GetDataBySha1(Helpers.HexStringToByteArray(ebx.sha1), 0x40);
                        }
                        else
                        {
                            TOCFile      toc        = new TOCFile(ebx.tocfilepath);
                            byte[]       bundledata = toc.ExportBundleDataByPath(ebx.bundlepath);
                            BinaryBundle b          = new BinaryBundle(new MemoryStream(bundledata));
                            foreach (BinaryBundle.EbxEntry ebx2 in b.EbxList)
                            {
                                if (ebx.ebxname == ebx2._name)
                                {
                                    data = ebx2._data;
                                }
                            }
                        }
                        EBXStream ex = new EBXStream(new MemoryStream(data));
                        if (!ex.ErrorLoading)
                        {
                            string subfilename = ebx.ebxname.Replace("/", "\\").Replace("'", "") + ".xml";
                            string subpath     = Path.GetDirectoryName(subfilename) + "\\";
                            if (!Directory.Exists(basepath + subpath))
                            {
                                Directory.CreateDirectory(basepath + subpath);
                            }
                            File.WriteAllText(basepath + subfilename, ex.toXML());
                            if (count++ % 123 == 0)
                            {
                                ebxstatus.Text = "Writing #" + count + " " + basepath + subfilename + " ...";
                                Application.DoEvents();
                            }
                        }
                        else
                        {
                            errorcount++;
                            if (count++ % 123 == 0)
                            {
                                this.Text = "Errors exporting : " + errorcount.ToString() + " =(" + ((float)errorcount / (float)count) * 100f + "%) Last:" + ebx.ebxname;
                                Application.DoEvents();
                            }
                        }
                    }
                }
                this.Text      = "Content Browser";
                ebxstatus.Text = "Ready. Processed Ebx:" + count + " Errors: " + errorcount + " (" + ((float)errorcount / (float)count) * 100f + "%)";
            }
        }
Example #9
0
        private void CheckSelectionEBX()
        {
            TreeNode t = treeView4.SelectedNode;

            if (t == null || t.Nodes == null || t.Nodes.Count != 0)
            {
                return;
            }
            string path = Helpers.GetPathFromNode(t, "/");

            path = path.Substring(1, path.Length - 1);
            if (path == lastpath)
            {
                return;
            }
            lastpath = path;
            foreach (DBAccess.EBXInformation ebx in ebxlist)
            {
                if (path == ebx.ebxname && ebx.casPatchType != 2 && !ebx.isbase)
                {
                    string c = "b";
                    if (ebx.isDLC)
                    {
                        c = "u";
                    }
                    if (ebx.isPatch)
                    {
                        c = "p";
                    }
                    byte[] data = new byte[0];
                    if (ebx.incas)
                    {
                        data = SHA1Access.GetDataBySha1(Helpers.HexStringToByteArray(ebx.sha1));
                    }
                    else
                    {
                        TOCFile      toc        = new TOCFile(ebx.tocfilepath);
                        byte[]       bundledata = toc.ExportBundleDataByPath(ebx.bundlepath);
                        BinaryBundle b          = new BinaryBundle(new MemoryStream(bundledata));
                        foreach (BinaryBundle.EbxEntry ebx2 in b.EbxList)
                        {
                            if (path.Contains(ebx2._name))
                            {
                                data = ebx2._data;
                            }
                        }
                    }
                    if (toolStripButton11.Checked)
                    {
                        hb1.BringToFront();
                        hb1.ByteProvider = new DynamicByteProvider(data);
                    }
                    else if (toolStripComboBox1.SelectedIndex < 2)
                    {
                        rtb2.BringToFront();
                        rtb2.Text    = "";
                        rtb2.Visible = false;
                        try
                        {
                            ebxstatus.Text = "Processing...";
                            Application.DoEvents();
                            EBXStream ebxf = new EBXStream(new MemoryStream(data), ebxpb1);
                            ebxstatus.Text = "Displaying...";
                            rtb2.Text      = ebxf.toXML();
                            ebxstatus.Text = "Ready (Type is " + c + ")";
                        }
                        catch (Exception ex)
                        {
                            rtb2.Text = "Error:\n" + ex.Message;
                        }
                        rtb2.Visible = true;
                    }
                    return;
                }
            }
        }
Example #10
0
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int n = listBox1.SelectedIndex;

            if (n == -1)
            {
                return;
            }
            try
            {
                statustext.Text = "Getting header infos from db...";
                Application.DoEvents();
                hb1.ByteProvider = new DynamicByteProvider(new byte[0]);
                if (File.Exists("tmp\\tmp.dds"))
                {
                    File.Delete("tmp\\tmp.dds");
                }

                DBAccess.BundleInformation  buni = bil[n];
                DBAccess.TextureInformation ti   = new DBAccess.TextureInformation();
                foreach (DBAccess.TextureInformation t in til)
                {
                    if (t.bundleIndex == buni.index)
                    {
                        ti = t;
                    }
                }
                DBAccess.TOCInformation toci = DBAccess.GetTocInformationByIndex(buni.tocIndex);
                byte[] resdata = new byte[0];
                if (toci.incas)
                {
                    statustext.Text = "Getting header data from sha1...";
                    Application.DoEvents();
                    resdata = SHA1Access.GetDataBySha1(ti.sha1);
                }
                else
                {
                    statustext.Text = "Getting header data from binary bundle...";
                    Application.DoEvents();
                    TOCFile      toc        = new TOCFile(toci.path);
                    byte[]       bundledata = toc.ExportBundleDataByPath(buni.bundlepath);
                    BinaryBundle b          = new BinaryBundle(new MemoryStream(bundledata));
                    foreach (BinaryBundle.ResEntry res in b.ResList)
                    {
                        if (res._name == ti.name)
                        {
                            resdata = res._data;
                            break;
                        }
                    }
                }
                hb1.ByteProvider = new DynamicByteProvider(resdata);
                statustext.Text  = "Getting texture infos from db...";
                Application.DoEvents();
                TextureMetaResource       tmr = new TextureMetaResource(resdata);
                DBAccess.ChunkInformation ci  = DBAccess.GetChunkInformationById(tmr.chunkid);
                if (ci.bundleIndex == -1)
                {
                    throw new Exception("no chunk info found in db");
                }
                DBAccess.BundleInformation buni2 = DBAccess.GetBundleInformationByIndex(ci.bundleIndex);
                DBAccess.TOCInformation    toci2 = DBAccess.GetTocInformationByIndex(buni2.tocIndex);
                byte[] texdata = new byte[0];
                if (toci2.incas)
                {
                    statustext.Text = "Getting texture data from sha1...";
                    Application.DoEvents();
                    texdata = SHA1Access.GetDataBySha1(ci.sha1);
                }
                else
                {
                    statustext.Text = "Getting texture data from binary bundle...";
                    Application.DoEvents();
                    TOCFile      toc        = new TOCFile(toci2.path);
                    byte[]       bundledata = toc.ExportBundleDataByPath(buni2.bundlepath);
                    BinaryBundle b          = new BinaryBundle(new MemoryStream(bundledata));
                    foreach (BinaryBundle.ChunkEntry chunk in b.ChunkList)
                    {
                        if (Helpers.MatchByteArray(chunk.id, ci.id))
                        {
                            texdata = chunk._data;
                            break;
                        }
                    }
                }
                hb2.ByteProvider = new DynamicByteProvider(texdata);
                statustext.Text  = "Making Preview...";
                Application.DoEvents();
                MemoryStream m = new MemoryStream();
                tmr.WriteTextureHeader(m);
                m.Write(texdata, 0, texdata.Length);
                if (!Directory.Exists("tmp"))
                {
                    Directory.CreateDirectory("tmp");
                }
                File.WriteAllBytes("tmp\\tmp.dds", m.ToArray());
                try
                {
                    pb1.Image = DevIL.DevIL.LoadBitmap("tmp\\tmp.dds");
                    pb1.BringToFront();
                }
                catch (Exception)
                {
                    statustext.Text = "Error loading dds, after state '" + statustext.Text + "'";
                }
                statustext.Text = "Ready";
            }
            catch (Exception)
            {
                statustext.Text = "General error, after state '" + statustext.Text + "'";
            }
        }