示例#1
0
        public void LoadResource(ResourceEntry resourceEntry, string description, Endian endian)
        {
            var resource = new ResourceFormats.XmlResource();

            using (var data = new MemoryStream(resourceEntry.Data, false))
            {
                resource.Deserialize(resourceEntry.Version, data, endian);
            }

            this._ResourceEntry = resourceEntry;
            this._Endian        = endian;
            this._Description   = description;
            this._Resource      = resource;

            if (this._Resource.Unk3 == true)
            {
                this._SaveButton.Enabled = false;
            }

            // ReSharper disable LocalizableElement
            this.Text += ": " + resource.Name + " (" + resource.Tag + ")";
            // ReSharper restore LocalizableElement

            this._ContentTextBox.Text = resource.Content;
            this._ContentTextBox.Select(0, 0);
        }
        public void LoadResourceEntry(ResourceEntry resourceEntry, string description, Endian endian)
        {
            _SaveButton.Enabled         = true;
            _LoadFromFileButton.Enabled = true;
            _SaveToFileButton.Enabled   = true;

#if (DEBUG == FALSE)
            try
            {
#endif

#if DEBUG
            using (var file = File.Create("input_xml.bin"))
            {
                file.WriteBytes(resourceEntry.Data);
            }
            hash_input = FileFormats.Hashing.FNV64.Hash(resourceEntry.Data, 0, resourceEntry.Data.Length);
#endif
            var resource = new ResourceFormats.XmlResource();
            using (var data = new MemoryStream(resourceEntry.Data, false))
            {
                resource.Deserialize(resourceEntry.Version, data, endian);
            }

            _ResourceEntry = resourceEntry;
            _Endian        = endian;
            _Description   = description;
            _Resource      = resource;

            _Scintilla.Text = resource.Content;
            _Scintilla.EmptyUndoBuffer();

#if (DEBUG == FALSE)
        }

        catch
        {
            _SaveButton.Enabled         = false;
            _LoadFromFileButton.Enabled = false;
            _SaveToFileButton.Enabled   = false;
            _Scintilla.Text             = "";
        }
#endif
        }
示例#3
0
        private void OnContextMenuExtract(object sender, EventArgs e)
        {
            string pathSDS   = Program.ExtractPath(Program.FilePath);
            var    entryType = (ResourceType)_EntryTreeView.SelectedNode.Tag;
            string pathType  = Path.Combine(pathSDS, entryType.Name);

            var type = _Archive.ResourceTypes.SingleOrDefault(r => r.Name == entryType.Name);

            if (type != null && type.Name == entryType.Name)
            {
                var ResourceEntrys = new List <ResourceEntry>(_Archive.ResourceEntries.Where(c => c.TypeId == type.Id));
                if (ResourceEntrys.Count > 0)
                {
                    if (!Directory.Exists(pathType))
                    {
                        Directory.CreateDirectory(pathType);
                    }
                }

                for (int i = 0; i < ResourceEntrys.Count; i++)
                {
                    // string descript = i < _Descr.Count ? _Descr[i] : "unknown_" + i + ".bin";

                    string descript = "unknown_" + i + ".bin";

                    switch (type.Name)
                    {
                    case "XML":
                    {
                        var resource = new ResourceFormats.XmlResource();
                        using (var data = new MemoryStream(ResourceEntrys[i].Data, false))
                        {
                            resource.Deserialize(ResourceEntrys[i].Version, data, _Archive.Endian);
                        }
                        string path = pathType + resource.Name.Replace("/", "\\");
                        if (!Directory.Exists(Path.GetDirectoryName(path)))
                        {
                            Directory.CreateDirectory(Path.GetDirectoryName(path));
                        }
                        using (var sr = new StreamWriter(path + ".xml", false, System.Text.Encoding.UTF8))
                        {
                            sr.Write(resource.Content);
                        }
                        resource = null;
                    }
                    break;

                    case "MemFile":
                    {
                        var resource = new ResourceFormats.MemFileResource();
                        using (var data = new MemoryStream(ResourceEntrys[i].Data, false))
                        {
                            resource.Deserialize(ResourceEntrys[i].Version, data, _Archive.Endian);
                        }
                        string path = pathType + resource.Name.Replace("/", "\\");
                        if (!Directory.Exists(Path.GetDirectoryName(path)))
                        {
                            Directory.CreateDirectory(Path.GetDirectoryName(path));
                        }
                        File.WriteAllBytes(path, resource.Data);     //
                        resource = null;
                    }
                    break;

                    case "Texture":
                    {
                        var resource = new ResourceFormats.TextureResource();
                        using (var data = new MemoryStream(ResourceEntrys[i].Data, false))
                        {
                            resource.Deserialize(ResourceEntrys[i].Version, data, _Archive.Endian);
                        }
                        descript = FileFormats.Hashing.FileHash.Name(resource.NameHash);
                        if (!descript.Contains(".dds"))
                        {
                            descript += ".dds";
                        }
                        File.WriteAllBytes(Path.Combine(pathType, descript), resource.Data);
                        resource = null;
                    }
                    break;

                    case "Flash":
                    {
                        var resource = new ResourceFormats.FlashResource();
                        using (var data = new MemoryStream(ResourceEntrys[i].Data, false))
                        {
                            resource.Deserialize(ResourceEntrys[i].Version, data, _Archive.Endian);
                        }
                        string path = pathType + resource.Name.Replace("/", "\\");
                        if (!Directory.Exists(Path.GetDirectoryName(path)))
                        {
                            Directory.CreateDirectory(Path.GetDirectoryName(path));
                        }
                        // gfx
                        File.WriteAllBytes(path, resource.Data);     //

#if DEBUG
                        // swf (FWS)
                        if (resource.Data.Length >= 4)
                        {
                            resource.Data[0] = 0x46;
                            resource.Data[1] = 0x57;
                            resource.Data[2] = 0x53;
                        }
                        File.WriteAllBytes(Path.ChangeExtension(path, ".swf"), resource.Data);
#endif
                        resource = null;
                    }
                    break;

                    default:
                    {
                        File.WriteAllBytes(Path.Combine(pathType, descript), ResourceEntrys[i].Data);
                    }
                    break;
                    }

                    Application.DoEvents();
                }

                Helpers.ShowInformation("Output: " + pathType + "\r\nCompleted.", "Extracted");
            }
        }