public bool BuildResources(string folder) { string sdsFolder = folder; XmlDocument document = null; string SDSContentPath = Path.Combine(sdsFolder, "SDSContent.xml"); // Attempt to sort the file. // Only works for M2 and M2DE. if (ChosenGameType == GamesEnumerator.MafiaII || ChosenGameType == GamesEnumerator.MafiaII_DE) { // Loading then saving automatically sorts. SDSContentFile SDSContent = new SDSContentFile(); SDSContent.ReadFromFile(new FileInfo(SDSContentPath)); SDSContent.WriteToFile(); } // Open a FileStream which contains the SDSContent data. using (FileStream XMLStream = new FileStream(SDSContentPath, FileMode.Open)) { try { document = new XmlDocument(); document.Load(XMLStream); } catch (Exception ex) { MessageBox.Show(string.Format("Error while parsing SDSContent.XML. \n{0}", ex.Message)); return(false); } } // Check if document is valid. If it is, then we know it has been found and loaded without problems. if (document == null) { MessageBox.Show(string.Format("Failed to open SDSContent.XML. \n{0}", SDSContentPath)); return(false); } // GoAhead and begin creating the document to save inside the SDSContent. XmlDocument xmlDoc = new XmlDocument(); XmlNode rootNode = xmlDoc.CreateElement("xml"); xmlDoc.AppendChild(rootNode); // Try and pack the resources found in SDSContent. bool bResult = false; if (_Version == 19) { bResult = BuildResourcesVersion19(document, xmlDoc, rootNode, sdsFolder); } else if (_Version == 20) { bResult = BuildResourcesVersion20(document, xmlDoc, rootNode, sdsFolder); } document = null; return(bResult); }
private void Reload() { file = new SDSContentFile(); file.ReadFromFile(OriginalInfo); PopulateTree(); Text = Language.GetString("$SDSCONTENT_EDITOR_TITLE"); bIsFileEdited = false; }
public SDSContentEditor(FileInfo info) { InitializeComponent(); Localise(); file = new SDSContentFile(); file.ReadFromFile(info); PopulateTree(); ShowDialog(); }
private void PopulateTree() { ResourceTreeView.Nodes.Clear(); foreach (var resource in file.Resources) { TreeNode parent = SDSContentFile.BuildResourceTreeNode(resource.Key); parent.Nodes.AddRange(resource.Value.ToArray()); ResourceTreeView.Nodes.Add(parent); } }
public static void BuildData(bool forceBigEndian) { List <FileInfo> vbps = new List <FileInfo>(); List <FileInfo> ibps = new List <FileInfo>(); List <ItemDescLoader> ids = new List <ItemDescLoader>(); List <Actor> act = new List <Actor>(); List <NAVData> aiw = new List <NAVData>(); List <NAVData> obj = new List <NAVData>(); isBigEndian = forceBigEndian; VertexTranslator.IsBigEndian = forceBigEndian; if (isBigEndian) { MessageBox.Show("Detected 'Big Endian' formats. This will severely effect functionality!", "Toolkit", MessageBoxButtons.OK, MessageBoxIcon.Information); } DirectoryInfo dirInfo = new DirectoryInfo(ScenePath); sdsContent = new SDSContentFile(); sdsContent.ReadFromFile(new FileInfo(Path.Combine(ScenePath + "/SDSContent.xml"))); //IndexBuffers var paths = sdsContent.GetResourceFiles("IndexBufferPool", true); foreach (var item in paths) { ibps.Add(BuildFileInfo(item)); } //Vertex Buffers paths = sdsContent.GetResourceFiles("VertexBufferPool", true); foreach (var item in paths) { vbps.Add(BuildFileInfo(item)); } //Actors if (!isBigEndian) { paths = sdsContent.GetResourceFiles("Actors", true); foreach (var item in paths) { try { act.Add(new Actor(item)); } catch (Exception ex) { Console.WriteLine("Failed to read actor {0}", item); } } } //FrameResource if (sdsContent.HasResource("FrameResource")) { var name = sdsContent.GetResourceFiles("FrameResource", true)[0]; FrameResource = new FrameResource(name, isBigEndian); } //Item Desc if (!isBigEndian) { paths = sdsContent.GetResourceFiles("ItemDesc", true); foreach (var item in paths) { ids.Add(new ItemDescLoader(item)); } } //FrameNameTable if (sdsContent.HasResource("FrameNameTable")) { var name = sdsContent.GetResourceFiles("FrameNameTable", true)[0]; FrameNameTable = new FrameNameTable(name, isBigEndian); } //Collisions if (!isBigEndian && sdsContent.HasResource("Collisions")) { var name = sdsContent.GetResourceFiles("Collisions", true)[0]; Collisions = new Collision(name); } //~ENABLE THIS SECTION AT YOUR OWN RISK //AnimalTrafficPaths //if (!isBigEndian && sdsContent.HasResource("AnimalTrafficPaths")) //{ // var name = sdsContent.GetResourceFiles("AnimalTrafficPaths", true)[0]; // try // { // ATLoader = new AnimalTrafficLoader(new FileInfo(name)); // } // catch (Exception ex) // { // Console.WriteLine("Failed to read AnimalTrafficPaths {0}", ex.Message); // } //} //~ENABLE THIS SECTION AT YOUR OWN RISK if (!isBigEndian && sdsContent.HasResource("PREFAB")) { var name = sdsContent.GetResourceFiles("PREFAB", true)[0]; PrefabLoader loader = new PrefabLoader(new FileInfo(name)); Prefabs = loader; } //RoadMap if (!isBigEndian) { paths = sdsContent.GetResourceFiles("MemFile", true); foreach (var item in paths) { if (item.Contains("RoadMap") || item.Contains("roadmap")) { roadMap = new Roadmap(new FileInfo(item)); } } } //~ENABLE THIS SECTION AT YOUR OWN RISK //Translokator //if (!isBigEndian && sdsContent.HasResource("Translokator")) //{ // var name = sdsContent.GetResourceFiles("Translokator", true)[0]; // Translokator = new TranslokatorLoader(new FileInfo(name)); //} //~ENABLE THIS SECTION AT YOUR OWN RISK //~ENABLE THIS SECTION AT YOUR OWN RISK /* Kynapse OBJ_DATA * if (!isBigEndian) * { * tis' broken for now * paths = sdsContent.GetResourceFiles("NAV_OBJ_DATA", true); * foreach (var item in paths) * { * obj.Add(new NAVData(new FileInfo(item))); * } * * for (int i = 0; i < obj.Count; i++) * { * obj[i].WriteToFile(); * } * } * * AI WORLD * if (!isBigEndian) * { * paths = sdsContent.GetResourceFiles("NAV_AIWORLD_DATA", true); * foreach (var Item in paths) * { * aiw.Add(new NAVData(new FileInfo(Item))); * } * } * * if (!isBigEndian && sdsContent.HasResource("NAV_HPD_DATA")) * { * var name = sdsContent.GetResourceFiles("NAV_HPD_DATA", true)[0]; * var data = new NAVData(new FileInfo(name)); * HPDData = (data.data as HPDData); * data.WriteToFile(); * } */ //~ENABLE THIS SECTION AT YOUR OWN RISK IndexBufferPool = new IndexBufferManager(ibps, dirInfo, isBigEndian); VertexBufferPool = new VertexBufferManager(vbps, dirInfo, isBigEndian); ItemDescs = ids.ToArray(); Actors = act.ToArray(); OBJData = obj.ToArray(); AIWorlds = aiw.ToArray(); }