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