From 2ba5f23c3730ec3a9e562195bc4cc7957521b76a Mon Sep 17 00:00:00 2001 From: Zin <62830952+Zintixx@users.noreply.github.com> Date: Sun, 29 Mar 2026 09:24:45 -0700 Subject: [PATCH 1/2] Parse Feature Tables --- Maple2.File.Parser/Maple2.File.Parser.csproj | 2 +- Maple2.File.Parser/TableParser.cs | 24 ++++++++++++++++++++ Maple2.File.Tests/TableParserTest.cs | 13 +++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj index de3094f..45e24e9 100644 --- a/Maple2.File.Parser/Maple2.File.Parser.csproj +++ b/Maple2.File.Parser/Maple2.File.Parser.csproj @@ -13,7 +13,7 @@ MapleStory2, File, Parser, m2d, xml true - 2.4.1 + 2.4.2 net8.0 README.md enable diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs index e55ba32..4e081e6 100644 --- a/Maple2.File.Parser/TableParser.cs +++ b/Maple2.File.Parser/TableParser.cs @@ -12,6 +12,8 @@ namespace Maple2.File.Parser; public class TableParser { private readonly M2dReader xmlReader; + private readonly XmlSerializer featureSettingSerializer; + private readonly XmlSerializer featureSerializer; private readonly XmlSerializer nameSerializer; private readonly XmlSerializer bankTypeSerializer; private readonly XmlSerializer chatStickerSerializer; @@ -112,6 +114,8 @@ public class TableParser { public TableParser(M2dReader xmlReader, string language) { this.xmlReader = xmlReader; + featureSettingSerializer = new XmlSerializer(typeof(FeatureSetting)); + featureSerializer = new XmlSerializer(typeof(FeatureRoot)); nameSerializer = new XmlSerializer(typeof(StringMapping)); bankTypeSerializer = new XmlSerializer(typeof(BankTypeRoot)); chatStickerSerializer = new XmlSerializer(typeof(ChatStickerRoot)); @@ -219,6 +223,26 @@ public TableParser(M2dReader xmlReader, string language) { // }; } + public IEnumerable<(string Type, Setting Setting)> ParseFeatureSetting() { + XmlReader reader = xmlReader.GetXmlReader(xmlReader.GetEntry("table/feature_setting.xml")); + var data = featureSettingSerializer.Deserialize(reader) as FeatureSetting; + Debug.Assert(data != null); + + foreach (Setting setting in data.setting) { + yield return (setting.type, setting); + } + } + + public IEnumerable<(string Name, Feature Feature)> ParseFeature() { + XmlReader reader = xmlReader.GetXmlReader(xmlReader.GetEntry("table/feature.xml")); + var data = featureSerializer.Deserialize(reader) as FeatureRoot; + Debug.Assert(data != null); + + foreach (Feature feature in data.feature) { + yield return (feature.name, feature); + } + } + public IEnumerable<(int Id, BankType BankType)> ParseBankType() { XmlReader reader = xmlReader.GetXmlReader(xmlReader.GetEntry("table/banktype.xml")); var data = bankTypeSerializer.Deserialize(reader) as BankTypeRoot; diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs index b16d37d..ae26bea 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -16,6 +16,19 @@ public static void ClassInit(TestContext context) { _parser = new TableParser(TestUtils.XmlReader, "en"); } + [TestMethod] + public void TestFeatureParser() { + var settingResults = _parser.ParseFeatureSetting(); + foreach ((_, _) in _parser.ParseFeatureSetting()) { + continue; + } + + var featureResults = _parser.ParseFeature(); + foreach ((_, _) in _parser.ParseFeature()) { + continue; + } + } + [TestMethod] public void TestColorPaletteParser() { From 8208c7dd5117a557bc9b45adfeb12d37c5558b81 Mon Sep 17 00:00:00 2001 From: Zin <62830952+Zintixx@users.noreply.github.com> Date: Sun, 29 Mar 2026 09:25:24 -0700 Subject: [PATCH 2/2] Update TableParserTest.cs --- Maple2.File.Tests/TableParserTest.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs index ae26bea..1c2d0ef 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -18,12 +18,10 @@ public static void ClassInit(TestContext context) { [TestMethod] public void TestFeatureParser() { - var settingResults = _parser.ParseFeatureSetting(); foreach ((_, _) in _parser.ParseFeatureSetting()) { continue; } - var featureResults = _parser.ParseFeature(); foreach ((_, _) in _parser.ParseFeature()) { continue; }