From 24eb54e4198e24529cc7164f786585d898c38398 Mon Sep 17 00:00:00 2001
From: Zin <62830952+Zintixx@users.noreply.github.com>
Date: Sun, 8 Jun 2025 00:53:35 -0700
Subject: [PATCH 1/3] Parse Auto Action Table
---
Maple2.File.Parser/Maple2.File.Parser.csproj | 2 +-
Maple2.File.Parser/TableParser.cs | 73 +++++++++++--------
.../Xml/Table/AutoActionPricePackage.cs | 16 ++++
Maple2.File.Tests/TableParserTest.cs | 7 ++
4 files changed, 67 insertions(+), 31 deletions(-)
create mode 100644 Maple2.File.Parser/Xml/Table/AutoActionPricePackage.cs
diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj
index 015673c..50686d0 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.3.1
+ 2.3.2
net8.0
README.md
enable
diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs
index f7394c0..19d7571 100644
--- a/Maple2.File.Parser/TableParser.cs
+++ b/Maple2.File.Parser/TableParser.cs
@@ -101,6 +101,7 @@ public class TableParser {
private readonly XmlSerializer smartPushSerializer;
private readonly XmlSerializer seasonDataSerializer;
private readonly XmlSerializer statStringSerializer;
+ private readonly XmlSerializer autoActionPricePackageSerializer;
private readonly string locale;
private readonly string language;
@@ -196,6 +197,7 @@ public TableParser(M2dReader xmlReader, string language) {
smartPushSerializer = new XmlSerializer(typeof(SmartPushRoot));
seasonDataSerializer = new XmlSerializer(typeof(SeasonDataRoot));
statStringSerializer = new XmlSerializer(typeof(StatStringRoot));
+ autoActionPricePackageSerializer = new XmlSerializer(typeof(AutoActionPricePackageRoot));
locale = FeatureLocaleFilter.Locale.ToLower();
this.language = language;
@@ -799,9 +801,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(individualItemDrop => new {
- individualItemDrop.individualDropBoxID,
- individualItemDrop.dropGroup
- })
+ individualItemDrop.individualDropBoxID,
+ individualItemDrop.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -833,9 +835,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -849,9 +851,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -865,9 +867,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -881,9 +883,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -897,9 +899,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -913,9 +915,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -929,9 +931,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -945,9 +947,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -961,9 +963,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -1539,4 +1541,15 @@ public IEnumerable ParseJobTableNew() {
yield return (entry.id, entry);
}
}
+
+ public IEnumerable<(int Id, AutoActionPricePackage Data)> ParseAutoActionPricePackage() {
+ string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/autoactionpricepackage.xml")));
+ var reader = XmlReader.Create(new StringReader(xml));
+ var data = autoActionPricePackageSerializer.Deserialize(reader) as AutoActionPricePackageRoot;
+ Debug.Assert(data != null);
+
+ foreach (AutoActionPricePackage entry in data.package) {
+ yield return (entry.id, entry);
+ }
+ }
}
diff --git a/Maple2.File.Parser/Xml/Table/AutoActionPricePackage.cs b/Maple2.File.Parser/Xml/Table/AutoActionPricePackage.cs
new file mode 100644
index 0000000..eb8db45
--- /dev/null
+++ b/Maple2.File.Parser/Xml/Table/AutoActionPricePackage.cs
@@ -0,0 +1,16 @@
+using System.Xml.Serialization;
+
+namespace Maple2.File.Parser.Xml.Table;
+
+// ./data/xml/table/{locale}/autoactionpricepackage.xml
+[XmlRoot("ms2")]
+public class AutoActionPricePackageRoot {
+ [XmlElement] public List package;
+}
+
+public class AutoActionPricePackage {
+ [XmlAttribute] public string content = string.Empty;
+ [XmlAttribute] public int id;
+ [XmlAttribute] public int duration;
+ [XmlAttribute] public int merat;
+}
diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs
index ec779ba..3930e64 100644
--- a/Maple2.File.Tests/TableParserTest.cs
+++ b/Maple2.File.Tests/TableParserTest.cs
@@ -718,5 +718,12 @@ public void TestSeasonData() {
continue;
}
}
+
+ [TestMethod]
+ public void TestAutoActionPackage() {
+ foreach ((_, _) in _parser.ParseAutoActionPricePackage()) {
+ continue;
+ }
+ }
}
From 8f6020cac8c1c914c3278fc0ea243ca546aa3aa5 Mon Sep 17 00:00:00 2001
From: Zin <62830952+Zintixx@users.noreply.github.com>
Date: Sun, 8 Jun 2025 01:10:15 -0700
Subject: [PATCH 2/3] tiny fix
---
Maple2.File.Parser/Xml/Table/AutoActionPricePackage.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Maple2.File.Parser/Xml/Table/AutoActionPricePackage.cs b/Maple2.File.Parser/Xml/Table/AutoActionPricePackage.cs
index eb8db45..6da642d 100644
--- a/Maple2.File.Parser/Xml/Table/AutoActionPricePackage.cs
+++ b/Maple2.File.Parser/Xml/Table/AutoActionPricePackage.cs
@@ -12,5 +12,6 @@ public class AutoActionPricePackage {
[XmlAttribute] public string content = string.Empty;
[XmlAttribute] public int id;
[XmlAttribute] public int duration;
- [XmlAttribute] public int merat;
+ [XmlAttribute] public long merat;
+ [XmlAttribute] public long meso;
}
From b95e72a8fc3080b614a31a68a2ca8faeeb31fde8 Mon Sep 17 00:00:00 2001
From: Zin <62830952+Zintixx@users.noreply.github.com>
Date: Sun, 8 Jun 2025 11:40:28 -0700
Subject: [PATCH 3/3] formatting
---
Maple2.File.Parser/TableParser.cs | 60 +++++++++++++++----------------
1 file changed, 30 insertions(+), 30 deletions(-)
diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs
index 19d7571..d81b1a7 100644
--- a/Maple2.File.Parser/TableParser.cs
+++ b/Maple2.File.Parser/TableParser.cs
@@ -801,9 +801,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(individualItemDrop => new {
- individualItemDrop.individualDropBoxID,
- individualItemDrop.dropGroup
- })
+ individualItemDrop.individualDropBoxID,
+ individualItemDrop.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -835,9 +835,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -851,9 +851,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -867,9 +867,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -883,9 +883,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -899,9 +899,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -915,9 +915,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -931,9 +931,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -947,9 +947,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
@@ -963,9 +963,9 @@ public IEnumerable ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
- dropbox.individualDropBoxID,
- dropbox.dropGroup
- })
+ dropbox.individualDropBoxID,
+ dropbox.dropGroup
+ })
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));