diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj index fe8d1a0..823ef50 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.13 + 2.4.14 net8.0 README.md enable diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs index d16e8c4..255b4d1 100644 --- a/Maple2.File.Parser/TableParser.cs +++ b/Maple2.File.Parser/TableParser.cs @@ -116,6 +116,7 @@ public class TableParser { private readonly XmlSerializer fameLimitSerializer; private readonly XmlSerializer fameLogSerializer; private readonly XmlSerializer famePickMethodSerializer; + private readonly XmlSerializer characterAbilitySerializer; private readonly string locale; private readonly string language; @@ -226,6 +227,7 @@ public TableParser(M2dReader xmlReader, string language) { fameLimitSerializer = new XmlSerializer(typeof(FameLimitRoot)); fameLogSerializer = new XmlSerializer(typeof(FameLogRoot)); famePickMethodSerializer = new XmlSerializer(typeof(FamePickMethod)); + characterAbilitySerializer = new XmlSerializer(typeof(CharacterAbilityRoot)); locale = FeatureLocaleFilter.Locale.ToLower(); this.language = language; @@ -1733,4 +1735,15 @@ public IEnumerable ParseJobTableNew() { yield return (pickMethod.type, pickMethod.repeatType, pickMethod); } } + + public IEnumerable<(int Id, CharacterAbility Ability)> ParseCharacterAbility() { + string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/characterability.xml"))); + var reader = XmlReader.Create(new StringReader(xml)); + var data = characterAbilitySerializer.Deserialize(reader) as CharacterAbilityRoot; + Debug.Assert(data != null); + + foreach (CharacterAbility entry in data.ability) { + yield return (entry.id, entry); + } + } } diff --git a/Maple2.File.Parser/Xml/Table/CharacterAbility.cs b/Maple2.File.Parser/Xml/Table/CharacterAbility.cs new file mode 100644 index 0000000..567b4b4 --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/CharacterAbility.cs @@ -0,0 +1,18 @@ +using System.Xml.Serialization; +using M2dXmlGenerator; + +namespace Maple2.File.Parser.Xml.Table; + +// ./data/xml/table/characterability.xml +[XmlRoot("ms2")] +public class CharacterAbilityRoot { + [XmlElement] public List ability; +} + +public class CharacterAbility { + [XmlAttribute] public int id; + [XmlAttribute] public int categoryID; + [XmlAttribute] public int requireLevel; + [XmlAttribute] public int additionalEffectID; + [XmlAttribute] public int additionalEffectLevel; +} diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs index 872f680..38ab84a 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -836,4 +836,11 @@ public void TestFamePickMethod() { continue; } } + + [TestMethod] + public void TestCharacterAbility() { + foreach ((_, _) in _parser.ParseCharacterAbility()) { + continue; + } + } }