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()));