From 1a9a0cc69219cdffa89da3c8b195c1feaa45e685 Mon Sep 17 00:00:00 2001 From: Zin <62830952+Zintixx@users.noreply.github.com> Date: Sun, 11 Aug 2024 14:54:36 -0700 Subject: [PATCH] Enchant Table (#32) --- Maple2.File.Parser/Maple2.File.Parser.csproj | 2 +- Maple2.File.Parser/ServerTableParser.cs | 12 +++++++++++ .../Xml/Table/Server/EnchantOption.cs | 21 +++++++++++++++++++ .../Xml/Table/Server/ItemMergeOption.cs | 18 ++++++++++++++-- Maple2.File.Tests/ServerTableParserTest.cs | 9 ++++++++ 5 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 Maple2.File.Parser/Xml/Table/Server/EnchantOption.cs diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj index b481696..e8b16c1 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.1.25 + 2.1.26 net8.0 README.md enable diff --git a/Maple2.File.Parser/ServerTableParser.cs b/Maple2.File.Parser/ServerTableParser.cs index 73e78c1..95a7ab5 100644 --- a/Maple2.File.Parser/ServerTableParser.cs +++ b/Maple2.File.Parser/ServerTableParser.cs @@ -42,6 +42,7 @@ public class ServerTableParser { private readonly XmlSerializer gameEventSerializer; private readonly XmlSerializer unlimitedEnchantOptionSerializer; private readonly XmlSerializer itemMergeOptionSerializer; + private readonly XmlSerializer enchantOptionSerializer; public ServerTableParser(M2dReader xmlReader) { this.xmlReader = xmlReader; @@ -77,6 +78,7 @@ public ServerTableParser(M2dReader xmlReader) { gameEventSerializer = new XmlSerializer(typeof(GameEventRoot)); unlimitedEnchantOptionSerializer = new XmlSerializer(typeof(UnlimitedEnchantOptionRoot)); itemMergeOptionSerializer = new XmlSerializer(typeof(ItemMergeOptionRoot)); + enchantOptionSerializer = new XmlSerializer(typeof(EnchantOptionRoot)); // var seen = new HashSet(); // this.bankTypeSerializer.UnknownAttribute += (sender, args) => { @@ -590,4 +592,14 @@ public ServerTableParser(M2dReader xmlReader) { yield return (entry.id, entry); } } + + public IEnumerable<(int Id, EnchantOption EnchantOption)> ParseEnchantOption() { + XmlReader reader = xmlReader.GetXmlReader(xmlReader.GetEntry("table/Server/enchantOptionTable.xml")); + var data = enchantOptionSerializer.Deserialize(reader) as EnchantOptionRoot; + Debug.Assert(data != null); + + foreach (EnchantOption entry in data.option) { + yield return (entry.id, entry); + } + } } diff --git a/Maple2.File.Parser/Xml/Table/Server/EnchantOption.cs b/Maple2.File.Parser/Xml/Table/Server/EnchantOption.cs new file mode 100644 index 0000000..027589f --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/Server/EnchantOption.cs @@ -0,0 +1,21 @@ +using System.Xml.Serialization; +using M2dXmlGenerator; + +namespace Maple2.File.Parser.Xml.Table.Server; + +// ./data/server/table/Server/enchantOptionTable.xml +[XmlRoot("ms2")] +public class EnchantOptionRoot { + [XmlElement] public List option; +} + +public partial class EnchantOption { + [XmlAttribute] public int id; + [XmlAttribute] public int slot; + [XmlAttribute] public int grade; + [XmlAttribute] public int rank; + [XmlAttribute] public float rate; + [XmlAttribute] public int minLv; + [XmlAttribute] public int maxLv; + [M2dArray] public int[] option = Array.Empty(); +} diff --git a/Maple2.File.Parser/Xml/Table/Server/ItemMergeOption.cs b/Maple2.File.Parser/Xml/Table/Server/ItemMergeOption.cs index dd99ed6..824b1b6 100644 --- a/Maple2.File.Parser/Xml/Table/Server/ItemMergeOption.cs +++ b/Maple2.File.Parser/Xml/Table/Server/ItemMergeOption.cs @@ -9,7 +9,7 @@ public class ItemMergeOptionRoot { [XmlElement] public List mergeOption; } -public partial class MergeOption : IFeatureLocale { +public partial class MergeOption { [XmlAttribute] public int id; [XmlElement] public List slot; @@ -22,7 +22,7 @@ public partial class Slot { [XmlElement] public List