From d63c1124fbc3b3e536e42affaa0c63d2fdc9b7cb Mon Sep 17 00:00:00 2001 From: Zin <62830952+Zintixx@users.noreply.github.com> Date: Mon, 16 Sep 2024 00:09:05 -0700 Subject: [PATCH] Wedding Tables --- Maple2.File.Parser/Enum/WeddingRewardLimit.cs | 8 +++ Maple2.File.Parser/Enum/WeddingRewardType.cs | 11 ++++ Maple2.File.Parser/Enum/WeddingSkillType.cs | 7 +++ Maple2.File.Parser/Maple2.File.Parser.csproj | 2 +- Maple2.File.Parser/TableParser.cs | 52 +++++++++++++++++++ Maple2.File.Parser/Xml/Table/WeddingExp.cs | 14 +++++ .../Xml/Table/WeddingPackage.cs | 36 +++++++++++++ Maple2.File.Parser/Xml/Table/WeddingReward.cs | 17 ++++++ Maple2.File.Parser/Xml/Table/WeddingSkill.cs | 24 +++++++++ Maple2.File.Tests/TableParserTest.cs | 36 +++++++++++++ 10 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 Maple2.File.Parser/Enum/WeddingRewardLimit.cs create mode 100644 Maple2.File.Parser/Enum/WeddingRewardType.cs create mode 100644 Maple2.File.Parser/Enum/WeddingSkillType.cs create mode 100644 Maple2.File.Parser/Xml/Table/WeddingExp.cs create mode 100644 Maple2.File.Parser/Xml/Table/WeddingPackage.cs create mode 100644 Maple2.File.Parser/Xml/Table/WeddingReward.cs create mode 100644 Maple2.File.Parser/Xml/Table/WeddingSkill.cs diff --git a/Maple2.File.Parser/Enum/WeddingRewardLimit.cs b/Maple2.File.Parser/Enum/WeddingRewardLimit.cs new file mode 100644 index 0000000..1825fbc --- /dev/null +++ b/Maple2.File.Parser/Enum/WeddingRewardLimit.cs @@ -0,0 +1,8 @@ +namespace Maple2.File.Parser.Enum; + +public enum WeddingRewardLimit { + none, + day, + week, + month, +} diff --git a/Maple2.File.Parser/Enum/WeddingRewardType.cs b/Maple2.File.Parser/Enum/WeddingRewardType.cs new file mode 100644 index 0000000..27f166e --- /dev/null +++ b/Maple2.File.Parser/Enum/WeddingRewardType.cs @@ -0,0 +1,11 @@ +namespace Maple2.File.Parser.Enum; + +public enum WeddingRewardType { + none, + marriedLife, + attendance, + coupleMessage, + marriageRegister, + weddingExpItem, + logoutPanelty, +} diff --git a/Maple2.File.Parser/Enum/WeddingSkillType.cs b/Maple2.File.Parser/Enum/WeddingSkillType.cs new file mode 100644 index 0000000..ee67cde --- /dev/null +++ b/Maple2.File.Parser/Enum/WeddingSkillType.cs @@ -0,0 +1,7 @@ +namespace Maple2.File.Parser.Enum; + +public enum WeddingSkillType { + none, + passive, + item, +} diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj index 785b24a..32e73d3 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.28 + 2.1.29 net8.0 README.md enable diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs index 72b03c4..7eaedf7 100644 --- a/Maple2.File.Parser/TableParser.cs +++ b/Maple2.File.Parser/TableParser.cs @@ -88,6 +88,10 @@ public class TableParser { private readonly XmlSerializer fieldMissionSerializer; private readonly XmlSerializer worldMapSerializer; private readonly XmlSerializer mapleSurvivalSkinInfoSerializer; + private readonly XmlSerializer weddingExpSerializer; + private readonly XmlSerializer weddingPackageSerializer; + private readonly XmlSerializer weddingRewardSerializer; + private readonly XmlSerializer weddingSkillSerializer; public TableParser(M2dReader xmlReader) { this.xmlReader = xmlReader; @@ -168,6 +172,10 @@ public TableParser(M2dReader xmlReader) { fieldMissionSerializer = new XmlSerializer(typeof(FieldMissionRoot)); worldMapSerializer = new XmlSerializer(typeof(WorldMapRoot)); mapleSurvivalSkinInfoSerializer = new XmlSerializer(typeof(MapleSurvivalSkinInfoRoot)); + weddingExpSerializer = new XmlSerializer(typeof(WeddingExpRoot)); + weddingPackageSerializer = new XmlSerializer(typeof(WeddingPackageRoot)); + weddingRewardSerializer = new XmlSerializer(typeof(WeddingRewardRoot)); + weddingSkillSerializer = new XmlSerializer(typeof(WeddingSkillRoot)); // var seen = new HashSet(); // this.bankTypeSerializer.UnknownAttribute += (sender, args) => { @@ -1225,4 +1233,48 @@ public IEnumerable ParseJobTable() { yield return (entry.id, entry); } } + + public IEnumerable<(int Grade, WeddingExp Exp)> ParseWeddingExp() { + string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/weddingexp.xml"))); + var reader = XmlReader.Create(new StringReader(xml)); + var data = weddingExpSerializer.Deserialize(reader) as WeddingExpRoot; + Debug.Assert(data != null); + + foreach (WeddingExp entry in data.v) { + yield return (entry.grade, entry); + } + } + + public IEnumerable<(int Grade, WeddingPackage Package)> ParseWeddingPackage() { + string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/weddingpackage.xml"))); + var reader = XmlReader.Create(new StringReader(xml)); + var data = weddingPackageSerializer.Deserialize(reader) as WeddingPackageRoot; + Debug.Assert(data != null); + + foreach (WeddingPackage entry in data.package) { + yield return (entry.id, entry); + } + } + + public IEnumerable<(WeddingRewardType Type, WeddingReward Reward)> ParseWeddingReward() { + string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/weddingreward.xml"))); + var reader = XmlReader.Create(new StringReader(xml)); + var data = weddingRewardSerializer.Deserialize(reader) as WeddingRewardRoot; + Debug.Assert(data != null); + + foreach (WeddingReward entry in data.v) { + yield return (entry.type, entry); + } + } + + public IEnumerable<(int Id, WeddingSkill Reward)> ParseWeddingSkill() { + string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/weddingskill.xml"))); + var reader = XmlReader.Create(new StringReader(xml)); + var data = weddingSkillSerializer.Deserialize(reader) as WeddingSkillRoot; + Debug.Assert(data != null); + + foreach (WeddingSkill entry in data.v) { + yield return (entry.id, entry); + } + } } diff --git a/Maple2.File.Parser/Xml/Table/WeddingExp.cs b/Maple2.File.Parser/Xml/Table/WeddingExp.cs new file mode 100644 index 0000000..9efc452 --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/WeddingExp.cs @@ -0,0 +1,14 @@ +using System.Xml.Serialization; + +namespace Maple2.File.Parser.Xml.Table; + +// ./data/xml/table/weddingexp.xml +[XmlRoot("ms2")] +public class WeddingExpRoot { + [XmlElement] public List v; +} + +public class WeddingExp { + [XmlAttribute] public int grade; + [XmlAttribute] public int value; +} diff --git a/Maple2.File.Parser/Xml/Table/WeddingPackage.cs b/Maple2.File.Parser/Xml/Table/WeddingPackage.cs new file mode 100644 index 0000000..457de01 --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/WeddingPackage.cs @@ -0,0 +1,36 @@ +using System.Xml.Serialization; +using M2dXmlGenerator; + +namespace Maple2.File.Parser.Xml.Table; + +// ./data/xml/table/weddingpackage.xml +[XmlRoot("ms2")] +public partial class WeddingPackageRoot { + [M2dFeatureLocale(Selector = "id")] private IList _package; +} + +public partial class WeddingPackage : IFeatureLocale { + [XmlAttribute] public int id; + [XmlAttribute] public int planner; + [XmlElement] public List weddingHall; +} + +public class WeddingHall { + [XmlAttribute] public int id; + [XmlAttribute] public int fieldID; + [XmlAttribute] public int nightFieldID; + [XmlAttribute] public byte grade; + [XmlAttribute] public int merat; + [XmlAttribute] public string videoPath = string.Empty; + [XmlAttribute] public string desc = string.Empty; + [XmlAttribute] public string mcillust = string.Empty; + [XmlElement] public List weddingItem; + [XmlElement] public List weddingCompleteItem; +} + +public class WeddingItem { + [XmlAttribute] public int itemID; + [XmlAttribute] public byte grade; + [XmlAttribute] public int count; + [XmlAttribute] public bool nightReward; +} diff --git a/Maple2.File.Parser/Xml/Table/WeddingReward.cs b/Maple2.File.Parser/Xml/Table/WeddingReward.cs new file mode 100644 index 0000000..ab214cd --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/WeddingReward.cs @@ -0,0 +1,17 @@ +using System.Xml.Serialization; +using M2dXmlGenerator; +using Maple2.File.Parser.Enum; + +namespace Maple2.File.Parser.Xml.Table; + +// ./data/xml/table/weddingreward.xml +[XmlRoot("ms2")] +public class WeddingRewardRoot { + [XmlElement] public List v; +} + +public partial class WeddingReward { + [M2dEnum] public WeddingRewardType type; + [XmlAttribute] public int rewardExp; + [M2dEnum] public WeddingRewardLimit rewardLimit; +} diff --git a/Maple2.File.Parser/Xml/Table/WeddingSkill.cs b/Maple2.File.Parser/Xml/Table/WeddingSkill.cs new file mode 100644 index 0000000..31fd54e --- /dev/null +++ b/Maple2.File.Parser/Xml/Table/WeddingSkill.cs @@ -0,0 +1,24 @@ +using System.Xml.Serialization; +using M2dXmlGenerator; +using Maple2.File.Parser.Enum; + +namespace Maple2.File.Parser.Xml.Table; + +// ./data/xml/table/weddingskill.xml +[XmlRoot("ms2")] +public partial class WeddingSkillRoot { + [M2dFeatureLocale(Selector = "id")] private IList _v; +} + +public partial class WeddingSkill : IFeatureLocale { + [XmlAttribute] public int id; + [M2dEnum] public WeddingSkillType type; + [XmlAttribute] public byte requireGrade; + [XmlAttribute] public int additionalEffectID; + [XmlAttribute] public float startValue; + [XmlAttribute] public float addValue; + [XmlAttribute] public int maxCount; + [XmlAttribute] public int itemID; + [XmlAttribute] public byte grade; + [XmlAttribute] public int count; +} diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs index 630a310..07fac14 100644 --- a/Maple2.File.Tests/TableParserTest.cs +++ b/Maple2.File.Tests/TableParserTest.cs @@ -772,4 +772,40 @@ public void TestMapleSurvivalSkinInfo() { continue; } } + + [TestMethod] + public void TestWeddingExp() { + var parser = new TableParser(TestUtils.XmlReader); + + foreach ((_, _) in parser.ParseWeddingExp()) { + continue; + } + } + + [TestMethod] + public void TestWeddingPackage() { + var parser = new TableParser(TestUtils.XmlReader); + + foreach ((_, _) in parser.ParseWeddingPackage()) { + continue; + } + } + + [TestMethod] + public void TestWeddingSkill() { + var parser = new TableParser(TestUtils.XmlReader); + + foreach ((_, _) in parser.ParseWeddingSkill()) { + continue; + } + } + + [TestMethod] + public void TestWeddingReward() { + var parser = new TableParser(TestUtils.XmlReader); + + foreach ((_, _) in parser.ParseWeddingReward()) { + continue; + } + } }