diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj index ad90b5b..b481696 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.24 + 2.1.25 net8.0 README.md enable diff --git a/Maple2.File.Parser/ServerTableParser.cs b/Maple2.File.Parser/ServerTableParser.cs index ba4ebd8..73e78c1 100644 --- a/Maple2.File.Parser/ServerTableParser.cs +++ b/Maple2.File.Parser/ServerTableParser.cs @@ -41,6 +41,7 @@ public class ServerTableParser { private readonly XmlSerializer oxQuizSerializer; private readonly XmlSerializer gameEventSerializer; private readonly XmlSerializer unlimitedEnchantOptionSerializer; + private readonly XmlSerializer itemMergeOptionSerializer; public ServerTableParser(M2dReader xmlReader) { this.xmlReader = xmlReader; @@ -75,6 +76,7 @@ public ServerTableParser(M2dReader xmlReader) { oxQuizSerializer = new XmlSerializer(typeof(OxQuizRoot)); gameEventSerializer = new XmlSerializer(typeof(GameEventRoot)); unlimitedEnchantOptionSerializer = new XmlSerializer(typeof(UnlimitedEnchantOptionRoot)); + itemMergeOptionSerializer = new XmlSerializer(typeof(ItemMergeOptionRoot)); // var seen = new HashSet(); // this.bankTypeSerializer.UnknownAttribute += (sender, args) => { @@ -578,4 +580,14 @@ public ServerTableParser(M2dReader xmlReader) { yield return (group.Key, group.ToDictionary(option => option.grade)); } } + + public IEnumerable<(int Id, MergeOption MergeOption)> ParseItemMergeOption() { + XmlReader reader = xmlReader.GetXmlReader(xmlReader.GetEntry("table/Server/itemMergeOptionBase.xml")); + var data = itemMergeOptionSerializer.Deserialize(reader) as ItemMergeOptionRoot; + Debug.Assert(data != null); + + foreach (MergeOption entry in data.mergeOption) { + yield return (entry.id, entry); + } + } } diff --git a/Maple2.File.Parser/Xml/Table/Server/ItemMergeOption.cs b/Maple2.File.Parser/Xml/Table/Server/ItemMergeOption.cs new file mode 100644 index 0000000..dd99ed6 --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/Server/ItemMergeOption.cs @@ -0,0 +1,49 @@ +using System.Xml.Serialization; +using M2dXmlGenerator; + +namespace Maple2.File.Parser.Xml.Table.Server; + +// ./data/server/table/Server/itemMergeOptionBase.xml +[XmlRoot("ms2")] +public class ItemMergeOptionRoot { + [XmlElement] public List mergeOption; +} + +public partial class MergeOption : IFeatureLocale { + [XmlAttribute] public int id; + + [XmlElement] public List slot; + + public partial class Slot { + [XmlAttribute] public int part = 1; + [XmlAttribute] public long consumeMeso; + [M2dArray] public string[] itemMaterial1 = Array.Empty(); + [M2dArray] public string[] itemMaterial2 = Array.Empty(); + [XmlElement] public List