From 86cfd8b6e78d5dc2526b146532360257998b38ca Mon Sep 17 00:00:00 2001 From: Zin <62830952+Zintixx@users.noreply.github.com> Date: Mon, 6 Apr 2026 16:00:07 -0700 Subject: [PATCH 1/2] Parse Club Buff --- Maple2.File.Parser/Maple2.File.Parser.csproj | 2 +- Maple2.File.Parser/TableParser.cs | 13 +++++++++++++ Maple2.File.Parser/Xml/Table/ClubBuff.cs | 15 +++++++++++++++ Maple2.File.Tests/TableParserTest.cs | 9 +++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 Maple2.File.Parser/Xml/Table/ClubBuff.cs diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj index 45e24e9..35b2326 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.2 + 2.4.3 net8.0 README.md enable diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs index 4e081e6..3fe2149 100644 --- a/Maple2.File.Parser/TableParser.cs +++ b/Maple2.File.Parser/TableParser.cs @@ -108,6 +108,7 @@ public class TableParser { private readonly XmlSerializer pvpRankingDuelModeSerializer; private readonly XmlSerializer questGroupSerializer; private readonly XmlSerializer darkStreamSerializer; + private readonly XmlSerializer clubBuffSerializer; private readonly string locale; private readonly string language; @@ -210,6 +211,7 @@ public TableParser(M2dReader xmlReader, string language) { pvpRankingDuelModeSerializer = new XmlSerializer(typeof(PvpRankingDuelModeRoot)); questGroupSerializer = new XmlSerializer(typeof(QuestGroupRoot)); darkStreamSerializer = new XmlSerializer(typeof(DarkStreamRoot)); + clubBuffSerializer = new XmlSerializer(typeof(ClubBuffRoot)); locale = FeatureLocaleFilter.Locale.ToLower(); this.language = language; @@ -1623,4 +1625,15 @@ public IEnumerable ParseJobTableNew() { yield return (entry.round, entry); } } + + public IEnumerable<(int Id, ClubBuff Buff)> ParseClubBuff() { + string xml = Sanitizer.RemoveSpaces(xmlReader.GetString(xmlReader.GetEntry("table/clubbuff.xml"))); + var reader = XmlReader.Create(new StringReader(xml)); + var data = clubBuffSerializer.Deserialize(reader) as ClubBuffRoot; + Debug.Assert(data != null); + + foreach (ClubBuff entry in data.clubBuff) { + yield return (entry.id, entry); + } + } } diff --git a/Maple2.File.Parser/Xml/Table/ClubBuff.cs b/Maple2.File.Parser/Xml/Table/ClubBuff.cs new file mode 100644 index 0000000..647a98d --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/ClubBuff.cs @@ -0,0 +1,15 @@ +using System.Xml.Serialization; + +namespace Maple2.File.Parser.Xml.Table; + +// ./data/xml/table/clubbuff.xml +[XmlRoot("ms2")] +public class ClubBuffRoot { + [XmlElement] public List clubBuff; +} + +public partial class ClubBuff { + [XmlAttribute] public int id; + [XmlAttribute] public int additionalEffectId; + [XmlAttribute] public int additionalEffectLevel; +} diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs index 1c2d0ef..f16d5a4 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -780,4 +780,13 @@ public void TestDarkStream() { Assert.AreEqual(70000, results[30].meso); Assert.AreEqual(2300, results[30].habi); } + + [TestMethod] + public void TestClubBuff() { + + var results = _parser.ParseClubBuff(); + foreach ((_, _) in _parser.ParseClubBuff()) { + continue; + } + } } From d78257f92d917ac6e1aee0572ce6fcaa0393b780 Mon Sep 17 00:00:00 2001 From: Zin <62830952+Zintixx@users.noreply.github.com> Date: Mon, 6 Apr 2026 16:00:37 -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 f16d5a4..6d2d52d 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -783,8 +783,6 @@ public void TestDarkStream() { [TestMethod] public void TestClubBuff() { - - var results = _parser.ParseClubBuff(); foreach ((_, _) in _parser.ParseClubBuff()) { continue; }