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;
}