From be8007d3c467935e7d810aeb5a70bae24a604bcd Mon Sep 17 00:00:00 2001 From: Zin <62830952+Zintixx@users.noreply.github.com> Date: Sat, 28 Feb 2026 11:32:02 -0800 Subject: [PATCH 1/2] quest group --- Maple2.File.Parser/Maple2.File.Parser.csproj | 2 +- Maple2.File.Parser/TableParser.cs | 13 +++++++++++++ Maple2.File.Parser/Xml/Table/QuestGroupTable.cs | 16 ++++++++++++++++ Maple2.File.Tests/TableParserTest.cs | 8 ++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 Maple2.File.Parser/Xml/Table/QuestGroupTable.cs diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj index 4cb0c45..a01f8f2 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.3.6 + 2.3.7 net8.0 README.md enable diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs index 68d066c..5268109 100644 --- a/Maple2.File.Parser/TableParser.cs +++ b/Maple2.File.Parser/TableParser.cs @@ -103,6 +103,7 @@ public class TableParser { private readonly XmlSerializer statStringSerializer; private readonly XmlSerializer autoActionPricePackageSerializer; private readonly XmlSerializer pvpRankingDuelModeSerializer; + private readonly XmlSerializer questGroupSerializer; private readonly string locale; private readonly string language; @@ -200,6 +201,7 @@ public TableParser(M2dReader xmlReader, string language) { statStringSerializer = new XmlSerializer(typeof(StatStringRoot)); autoActionPricePackageSerializer = new XmlSerializer(typeof(AutoActionPricePackageRoot)); pvpRankingDuelModeSerializer = new XmlSerializer(typeof(PvpRankingDuelModeRoot)); + questGroupSerializer = new XmlSerializer(typeof(QuestGroupRoot)); locale = FeatureLocaleFilter.Locale.ToLower(); this.language = language; @@ -1562,4 +1564,15 @@ public IEnumerable ParseJobTableNew() { yield return (entry.grade, entry); } } + + public IEnumerable<(int Id, QuestGroup Data)> ParseQuestGroup() { + string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/questgrouptable.xml"))); + var reader = XmlReader.Create(new StringReader(xml)); + var data = questGroupSerializer.Deserialize(reader) as QuestGroupRoot; + Debug.Assert(data != null); + + foreach (QuestGroup entry in data.group) { + yield return (entry.id, entry); + } + } } diff --git a/Maple2.File.Parser/Xml/Table/QuestGroupTable.cs b/Maple2.File.Parser/Xml/Table/QuestGroupTable.cs new file mode 100644 index 0000000..f746464 --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/QuestGroupTable.cs @@ -0,0 +1,16 @@ +using System.Xml.Serialization; +using M2dXmlGenerator; + +namespace Maple2.File.Parser.Xml.Table; + +// ./data/xml/table/questgrouptable.xml +[XmlRoot("ms2")] +public class QuestGroupRoot { + [XmlElement] public List group; +} + +public class QuestGroup { + [XmlAttribute] public int id; + [XmlAttribute] public int pickCount; + [XmlAttribute] public string dependency; +} diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs index 4df0fc6..ce0b469 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -732,5 +732,13 @@ public void TestPvpRankingDuelMode() { continue; } } + + [TestMethod] + public void TestQuestGroup() { + var results = _parser.ParseQuestGroup().ToList(); + foreach ((_, _) in _parser.ParseQuestGroup()) { + continue; + } + } } From 24fdaab25946d3f7532e18bd309eb2203e59bc85 Mon Sep 17 00:00:00 2001 From: Zin <62830952+Zintixx@users.noreply.github.com> Date: Sat, 28 Feb 2026 11:37:32 -0800 Subject: [PATCH 2/2] cleanup --- 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 ce0b469..67ff68d 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -735,10 +735,8 @@ public void TestPvpRankingDuelMode() { [TestMethod] public void TestQuestGroup() { - var results = _parser.ParseQuestGroup().ToList(); foreach ((_, _) in _parser.ParseQuestGroup()) { continue; } } } -