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