From dca02c122023bd20d3e1da6d7b830604f5db451e Mon Sep 17 00:00:00 2001 From: Bitl Date: Sat, 9 Nov 2019 17:17:56 -0700 Subject: [PATCH] wip roblox file parser --- NovetusLauncher/.vs/NovetusLauncher/v14/.suo | Bin 172032 -> 170496 bytes NovetusLauncher/NovetusFuncs/GlobalVars.cs | 7 ++ .../NovetusTest_RobloxXMLFileParser/v14/.suo | Bin 0 -> 38912 bytes .../NovetusTest_RobloxXMLFileParser.sln | 22 +++++ .../App.config | 6 ++ .../NovetusTest_RobloxXMLFileParser.csproj | 61 ++++++++++++++ .../Program.cs | 52 ++++++++++++ .../Properties/AssemblyInfo.cs | 36 ++++++++ .../RobloxXMLParser.cs | 78 ++++++++++++++++++ 9 files changed, 262 insertions(+) create mode 100644 NovetusTest_RobloxXMLFileParser/.vs/NovetusTest_RobloxXMLFileParser/v14/.suo create mode 100644 NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser.sln create mode 100644 NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/App.config create mode 100644 NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser.csproj create mode 100644 NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/Program.cs create mode 100644 NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/Properties/AssemblyInfo.cs create mode 100644 NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/RobloxXMLParser.cs diff --git a/NovetusLauncher/.vs/NovetusLauncher/v14/.suo b/NovetusLauncher/.vs/NovetusLauncher/v14/.suo index 489a33ca47e05cbea10d7bda178af43dd10230a5..c2d1e5924d6070605fe15fc973b6afc65e00353b 100644 GIT binary patch delta 5999 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 + + + + + \ No newline at end of file diff --git a/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser.csproj b/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser.csproj new file mode 100644 index 0000000..4e35b0f --- /dev/null +++ b/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser.csproj @@ -0,0 +1,61 @@ + + + + + Debug + AnyCPU + {30A2FB06-2B19-45E3-83D1-D7A121BC6567} + Exe + Properties + NovetusTest_RobloxXMLFileParser + NovetusTest_RobloxXMLFileParser + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/Program.cs b/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/Program.cs new file mode 100644 index 0000000..5b4a16b --- /dev/null +++ b/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/Program.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NovetusTest_RobloxXMLFileParser +{ + class Program + { + static void Main(string[] args) + { + string path = @"G:\Projects\Novetus\Novetus\maps\2012\2012 - Iron Cafe.rbxl"; + + Console.WriteLine("Meshes"); + RobloxXMLParser.SearchNodes(path, "SpecialMesh", "MeshId"); + + Console.WriteLine("Mesh Textures"); + RobloxXMLParser.SearchNodes(path, "SpecialMesh", "TextureId"); + + Console.WriteLine("Decals"); + RobloxXMLParser.SearchNodes(path, "Decal", "Texture"); + + Console.WriteLine("SkyboxBk"); + RobloxXMLParser.SearchNodes(path, "Sky", "SkyboxBk"); + + Console.WriteLine("SkyboxDn"); + RobloxXMLParser.SearchNodes(path, "Sky", "SkyboxDn"); + + Console.WriteLine("SkyboxFt"); + RobloxXMLParser.SearchNodes(path, "Sky", "SkyboxFt"); + + Console.WriteLine("SkyboxRt"); + RobloxXMLParser.SearchNodes(path, "Sky", "SkyboxRt"); + + Console.WriteLine("SkyboxUp"); + RobloxXMLParser.SearchNodes(path, "Sky", "SkyboxUp"); + + Console.WriteLine("HopperBins"); + RobloxXMLParser.SearchNodes(path, "HopperBin", "TextureId"); + + Console.WriteLine("Tools"); + RobloxXMLParser.SearchNodes(path, "Tool", "TextureId"); + + Console.WriteLine("Sounds"); + RobloxXMLParser.SearchNodes(path, "Sound", "SoundId"); + + Console.WriteLine(path + " parsed."); + Console.ReadLine(); + } + } +} diff --git a/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/Properties/AssemblyInfo.cs b/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..bb7b798 --- /dev/null +++ b/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("NovetusTest_RobloxXMLFileParser")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("NovetusTest_RobloxXMLFileParser")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("30a2fb06-2b19-45e3-83d1-d7a121bc6567")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/RobloxXMLParser.cs b/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/RobloxXMLParser.cs new file mode 100644 index 0000000..bcb9753 --- /dev/null +++ b/NovetusTest_RobloxXMLFileParser/NovetusTest_RobloxXMLFileParser/RobloxXMLParser.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Linq; + +public class RobloxXMLParser +{ + public static void SearchNodes(string path, string itemClassValue, string itemIdValue) + { + try + { + string oldfile = File.ReadAllText(path); + string fixedfile = RemoveInvalidXmlChars(ReplaceHexadecimalSymbols(oldfile)); + Console.WriteLine("Valid: " + CheckValidXmlChars(fixedfile)); + XDocument doc = XDocument.Parse(fixedfile); + + var v = from nodes in doc.Descendants("Item") + where nodes.Attribute("class").Value == itemClassValue + select nodes; + + foreach (var item in v) + { + var v2 = from nodes in item.Descendants("Content") + where nodes.Attribute("name").Value == itemIdValue + select nodes; + + foreach (var item2 in v2) + { + var v3 = from nodes in item2.Descendants("url") + select nodes; + + foreach (var item3 in v3) + { + if (!item3.Value.Contains("rbxasset")) + { + //do whatever with your value + if (item3.Value.Contains('=')) + { + string[] substrings = item3.Value.Split('='); + + if (!string.IsNullOrWhiteSpace(substrings[1])) + { + Console.WriteLine(item3.Value); + Console.WriteLine("ID: " + substrings[1]); + } + } + } + } + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } + + public static string RemoveInvalidXmlChars(string content) + { + return new string(content.Where(ch => System.Xml.XmlConvert.IsXmlChar(ch)).ToArray()); + } + + static string ReplaceHexadecimalSymbols(string txt) + { + string r = "[\x00-\x08\x0B\x0C\x0E-\x1F\x26]"; + return Regex.Replace(txt, r, "", RegexOptions.Compiled); + } + + public static bool CheckValidXmlChars(string content) + { + return content.All(ch => System.Xml.XmlConvert.IsXmlChar(ch)); + } +}