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(); } } } }
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; } } } }
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; } }
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); }
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; } } }
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)); } }
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; } }
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 + "%)"; } }
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; } } }
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 + "'"; } }