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