diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj
index 6f7971f..9cd53c6 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.20
+ 2.1.21
net8.0
README.md
enable
diff --git a/Maple2.File.Parser/ServerTableParser.cs b/Maple2.File.Parser/ServerTableParser.cs
index 8c13838..7509476 100644
--- a/Maple2.File.Parser/ServerTableParser.cs
+++ b/Maple2.File.Parser/ServerTableParser.cs
@@ -38,6 +38,7 @@ public class ServerTableParser {
private readonly XmlSerializer adventureIdExpTableSerializer;
private readonly XmlSerializer adventureExpTableSerializer;
private readonly XmlSerializer timeEventDataSerializer;
+ private readonly XmlSerializer oxQuizSerializer;
public ServerTableParser(M2dReader xmlReader) {
this.xmlReader = xmlReader;
@@ -69,6 +70,7 @@ public ServerTableParser(M2dReader xmlReader) {
adventureIdExpTableSerializer = new XmlSerializer(typeof(AdventureIdExpTableRoot));
adventureExpTableSerializer = new XmlSerializer(typeof(AdventureExpTableRoot));
timeEventDataSerializer = new XmlSerializer(typeof(TimeEventDataRoot));
+ oxQuizSerializer = new XmlSerializer(typeof(OxQuizRoot));
// var seen = new HashSet();
// this.bankTypeSerializer.UnknownAttribute += (sender, args) => {
@@ -540,4 +542,15 @@ public ServerTableParser(M2dReader xmlReader) {
yield return (entry.id, entry);
}
}
+
+ public IEnumerable<(int Id, OxQuiz Quiz)> ParseOxQuiz() {
+ string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/Server/OxQuiz.xml")));
+ var reader = XmlReader.Create(new StringReader(xml));
+ var data = oxQuizSerializer.Deserialize(reader) as OxQuizRoot;
+ Debug.Assert(data != null);
+
+ foreach (OxQuiz entry in data.OxQuiz) {
+ yield return (entry.quizID, entry);
+ }
+ }
}
diff --git a/Maple2.File.Parser/Xml/Table/Server/OxQuiz.cs b/Maple2.File.Parser/Xml/Table/Server/OxQuiz.cs
new file mode 100644
index 0000000..bd98322
--- /dev/null
+++ b/Maple2.File.Parser/Xml/Table/Server/OxQuiz.cs
@@ -0,0 +1,20 @@
+using System.Xml.Serialization;
+using M2dXmlGenerator;
+
+namespace Maple2.File.Parser.Xml.Table.Server;
+
+// ./data/server/table/Server/OxQuiz.xml
+[XmlRoot("ms2")]
+public class OxQuizRoot {
+ [XmlElement] public List OxQuiz;
+}
+
+public class OxQuiz {
+ [XmlAttribute] public int quizID;
+ [XmlAttribute] public int categoryID;
+ [XmlAttribute] public string categoryStr = string.Empty;
+ [XmlAttribute] public string quizStr = string.Empty;
+ [XmlAttribute] public int level;
+ [XmlAttribute] public bool answer;
+ [XmlAttribute] public string answerStr = string.Empty;
+}
diff --git a/Maple2.File.Tests/ServerTableParserTest.cs b/Maple2.File.Tests/ServerTableParserTest.cs
index ecec84a..6b4c8f4 100644
--- a/Maple2.File.Tests/ServerTableParserTest.cs
+++ b/Maple2.File.Tests/ServerTableParserTest.cs
@@ -332,9 +332,17 @@ public void TestAdventureExp() {
public void TestTimeEventData() {
var parser = new ServerTableParser(TestUtils.ServerReader);
- var timedEventData = parser.ParseTimeEventData();
foreach ((_, _) in parser.ParseTimeEventData()) {
continue;
}
}
+
+ [TestMethod]
+ public void TestOxQuiz() {
+ var parser = new ServerTableParser(TestUtils.ServerReader);
+
+ foreach ((_, _) in parser.ParseOxQuiz()) {
+ continue;
+ }
+ }
}