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;
+ }
+ }
}