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..6d2d52d 100644
--- a/Maple2.File.Tests/TableParserTest.cs
+++ b/Maple2.File.Tests/TableParserTest.cs
@@ -780,4 +780,11 @@ public void TestDarkStream() {
Assert.AreEqual(70000, results[30].meso);
Assert.AreEqual(2300, results[30].habi);
}
+
+ [TestMethod]
+ public void TestClubBuff() {
+ foreach ((_, _) in _parser.ParseClubBuff()) {
+ continue;
+ }
+ }
}