From 251b75efb64a1036007d8df98c51e96a97b63683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Fri, 7 Feb 2025 19:51:03 -0300 Subject: [PATCH 1/2] Parse Home Decoration Exp --- Maple2.File.Parser/Maple2.File.Parser.csproj | 2 +- Maple2.File.Parser/TableParser.cs | 13 +++++++++++ .../Xml/Table/MasteryUgcHousingRoot.cs | 22 +++++++++++++++++++ Maple2.File.Tests/TableParserTest.cs | 9 ++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 Maple2.File.Parser/Xml/Table/MasteryUgcHousingRoot.cs diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj index 4c68eb3..0d82b0d 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.1 + 2.2.2 net8.0 README.md enable diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs index 7eaedf7..cd5a971 100644 --- a/Maple2.File.Parser/TableParser.cs +++ b/Maple2.File.Parser/TableParser.cs @@ -70,6 +70,7 @@ public class TableParser { private readonly XmlSerializer adventureLevelMissionSerializer; private readonly XmlSerializer adventureLevelRewardSerializer; private readonly XmlSerializer ugcDesignSerializer; + private readonly XmlSerializer masteryUgcHousingSerializer; private readonly XmlSerializer bannerSerializer; private readonly XmlSerializer nameTagSymbolSerializer; private readonly XmlSerializer commonExpSerializer; @@ -154,6 +155,7 @@ public TableParser(M2dReader xmlReader) { adventureLevelMissionSerializer = new XmlSerializer(typeof(AdventureLevelMissionRoot)); adventureLevelRewardSerializer = new XmlSerializer(typeof(AdventureLevelRewardRoot)); ugcDesignSerializer = new XmlSerializer(typeof(UgcDesignRoot)); + masteryUgcHousingSerializer = new XmlSerializer(typeof(MasteryUgcHousingRoot)); bannerSerializer = new XmlSerializer(typeof(BannerRoot)); nameTagSymbolSerializer = new XmlSerializer(typeof(NameTagSymbolRoot)); commonExpSerializer = new XmlSerializer(typeof(CommonExpRoot)); @@ -1006,6 +1008,17 @@ public IEnumerable ParseJobTable() { } } + public IEnumerable<(int Id, MasteryUgcHousing)> ParseMasteryUgcHousing() { + string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/masteryugchousing.xml"))); + var reader = XmlReader.Create(new StringReader(xml)); + var data = masteryUgcHousingSerializer.Deserialize(reader) as MasteryUgcHousingRoot; + Debug.Assert(data != null); + + foreach (MasteryUgcHousing entry in data.MasteryUgcHousing.Entries) { + yield return (entry.grade, entry); + } + } + public IEnumerable<(int Id, Banner Banner)> ParseBanner() { string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/na/banner.xml"))); var reader = XmlReader.Create(new StringReader(xml)); diff --git a/Maple2.File.Parser/Xml/Table/MasteryUgcHousingRoot.cs b/Maple2.File.Parser/Xml/Table/MasteryUgcHousingRoot.cs new file mode 100644 index 0000000..c4e3c4e --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/MasteryUgcHousingRoot.cs @@ -0,0 +1,22 @@ +using System.Xml.Serialization; +using M2dXmlGenerator; + +namespace Maple2.File.Parser.Xml.Table; + +// ./data/xml/table/masteryugchousing.xml +[XmlRoot("ms2")] +public partial class MasteryUgcHousingRoot { + [XmlElement("masteryUGCHousing")] public MasteryUgcHousingList MasteryUgcHousing; +} + +public partial class MasteryUgcHousingList { + [XmlElement("v")] public List Entries; +} + +public partial class MasteryUgcHousing { + [XmlAttribute] public int grade; + [XmlAttribute] public int value; + [XmlAttribute] public int rewardJobItemID; + [XmlAttribute] public int rewardJobItemRank; + [XmlAttribute] public int rewardJobItemCount; +} diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs index 07fac14..fc539ad 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -597,6 +597,15 @@ public void TestUgcDesign() { } } + [TestMethod] + public void TestMasteryUgcHousing() { + var parser = new TableParser(TestUtils.XmlReader); + + foreach ((_, _) in parser.ParseMasteryUgcHousing()) { + continue; + } + } + [TestMethod] public void TestBanner() { var parser = new TableParser(TestUtils.XmlReader); From 5e3fc2b36a847a44343d5b5e0a148aaf53eaeb92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Fri, 7 Feb 2025 19:54:44 -0300 Subject: [PATCH 2/2] Update TableParser.cs --- Maple2.File.Parser/TableParser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs index cd5a971..bfc6b57 100644 --- a/Maple2.File.Parser/TableParser.cs +++ b/Maple2.File.Parser/TableParser.cs @@ -1008,7 +1008,7 @@ public IEnumerable ParseJobTable() { } } - public IEnumerable<(int Id, MasteryUgcHousing)> ParseMasteryUgcHousing() { + public IEnumerable<(int Id, MasteryUgcHousing)> ParseMasteryUgcHousing() { string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/masteryugchousing.xml"))); var reader = XmlReader.Create(new StringReader(xml)); var data = masteryUgcHousingSerializer.Deserialize(reader) as MasteryUgcHousingRoot;