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