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