diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj
index 5d775f0..cad8c65 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.2.4
+ 2.2.5
net8.0
README.md
enable
diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs
index 55dca0c..3a4da61 100644
--- a/Maple2.File.Parser/TableParser.cs
+++ b/Maple2.File.Parser/TableParser.cs
@@ -94,6 +94,7 @@ public class TableParser {
private readonly XmlSerializer weddingPackageSerializer;
private readonly XmlSerializer weddingRewardSerializer;
private readonly XmlSerializer weddingSkillSerializer;
+ private readonly XmlSerializer smartPushSerializer;
public TableParser(M2dReader xmlReader) {
this.xmlReader = xmlReader;
@@ -180,6 +181,7 @@ public TableParser(M2dReader xmlReader) {
weddingPackageSerializer = new XmlSerializer(typeof(WeddingPackageRoot));
weddingRewardSerializer = new XmlSerializer(typeof(WeddingRewardRoot));
weddingSkillSerializer = new XmlSerializer(typeof(WeddingSkillRoot));
+ smartPushSerializer = new XmlSerializer(typeof(SmartPushRoot));
// var seen = new HashSet();
// this.bankTypeSerializer.UnknownAttribute += (sender, args) => {
@@ -1303,4 +1305,15 @@ public IEnumerable ParseJobTable() {
yield return (entry.id, entry);
}
}
+
+ public IEnumerable<(int Id, SmartPush Button)> ParseSmartPush() {
+ string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/na/smartpush.xml")));
+ var reader = XmlReader.Create(new StringReader(xml));
+ var data = smartPushSerializer.Deserialize(reader) as SmartPushRoot;
+ Debug.Assert(data != null);
+
+ foreach (SmartPush entry in data.push) {
+ yield return (entry.id, entry);
+ }
+ }
}
diff --git a/Maple2.File.Parser/Xml/Table/SmartPush.cs b/Maple2.File.Parser/Xml/Table/SmartPush.cs
new file mode 100644
index 0000000..7f9beba
--- /dev/null
+++ b/Maple2.File.Parser/Xml/Table/SmartPush.cs
@@ -0,0 +1,20 @@
+using System.Xml.Serialization;
+using M2dXmlGenerator;
+
+namespace Maple2.File.Parser.Xml.Table;
+
+// ./data/xml/table/na/smartpush.xml
+[XmlRoot("ms2")]
+public partial class SmartPushRoot {
+ [M2dFeatureLocale(Selector = "id")] private IList _push;
+}
+
+public partial class SmartPush : IFeatureLocale {
+ [XmlAttribute] public int id;
+ [XmlAttribute] public string content = string.Empty;
+ [XmlAttribute] public string actionType = string.Empty;
+ [XmlAttribute] public int actionValue;
+ [XmlAttribute] public long requireMeret;
+ [XmlAttribute] public string[] requiredItem = Array.Empty();
+ [XmlAttribute] public string imgPath = string.Empty;
+}
diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs
index 111e597..e15fa34 100644
--- a/Maple2.File.Tests/TableParserTest.cs
+++ b/Maple2.File.Tests/TableParserTest.cs
@@ -826,4 +826,13 @@ public void TestWeddingReward() {
continue;
}
}
+
+ [TestMethod]
+ public void TestSmartPush() {
+ var parser = new TableParser(TestUtils.XmlReader);
+
+ foreach ((_, _) in parser.ParseSmartPush()) {
+ continue;
+ }
+ }
}