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..1c2d0ef 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -16,6 +16,17 @@ public static void ClassInit(TestContext context) { _parser = new TableParser(TestUtils.XmlReader, "en"); } + [TestMethod] + public void TestFeatureParser() { + foreach ((_, _) in _parser.ParseFeatureSetting()) { + continue; + } + + foreach ((_, _) in _parser.ParseFeature()) { + continue; + } + } + [TestMethod] public void TestColorPaletteParser() {