Skip to content

Commit 62e3829

Browse files
authored
Parse Season Data (#50)
1 parent f2e5609 commit 62e3829

4 files changed

Lines changed: 172 additions & 1 deletion

File tree

Maple2.File.Parser/Maple2.File.Parser.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<PackageTags>MapleStory2, File, Parser, m2d, xml</PackageTags>
1414
<!-- Use following lines to write the generated files to disk. -->
1515
<EmitCompilerGeneratedFiles Condition=" '$(Configuration)' == 'Debug' ">true</EmitCompilerGeneratedFiles>
16-
<PackageVersion>2.2.8</PackageVersion>
16+
<PackageVersion>2.2.9</PackageVersion>
1717
<TargetFramework>net8.0</TargetFramework>
1818
<PackageReadmeFile>README.md</PackageReadmeFile>
1919
<ImplicitUsings>enable</ImplicitUsings>

Maple2.File.Parser/TableParser.cs

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ public class TableParser {
9999
private readonly XmlSerializer weddingRewardSerializer;
100100
private readonly XmlSerializer weddingSkillSerializer;
101101
private readonly XmlSerializer smartPushSerializer;
102+
private readonly XmlSerializer seasonDataSerializer;
102103

103104
private readonly string locale;
104105

@@ -191,6 +192,7 @@ public TableParser(M2dReader xmlReader) {
191192
weddingRewardSerializer = new XmlSerializer(typeof(WeddingRewardRoot));
192193
weddingSkillSerializer = new XmlSerializer(typeof(WeddingSkillRoot));
193194
smartPushSerializer = new XmlSerializer(typeof(SmartPushRoot));
195+
seasonDataSerializer = new XmlSerializer(typeof(SeasonDataRoot));
194196

195197
locale = FeatureLocaleFilter.Locale.ToLower();
196198

@@ -1399,4 +1401,103 @@ public IEnumerable<JobTableKR> ParseJobTableKR() {
13991401
yield return (entry.id, entry);
14001402
}
14011403
}
1404+
1405+
public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataArcade() {
1406+
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_arcade.xml")));
1407+
var reader = XmlReader.Create(new StringReader(xml));
1408+
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
1409+
Debug.Assert(data != null);
1410+
1411+
foreach (SeasonData entry in data.Season) {
1412+
yield return (entry.seasonID, entry);
1413+
}
1414+
}
1415+
1416+
public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataBossColosseum() {
1417+
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_bosscolosseum.xml")));
1418+
var reader = XmlReader.Create(new StringReader(xml));
1419+
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
1420+
Debug.Assert(data != null);
1421+
1422+
foreach (SeasonData entry in data.Season) {
1423+
yield return (entry.seasonID, entry);
1424+
}
1425+
}
1426+
1427+
public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataDarkStream() {
1428+
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_darkstream.xml")));
1429+
var reader = XmlReader.Create(new StringReader(xml));
1430+
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
1431+
Debug.Assert(data != null);
1432+
1433+
foreach (SeasonData entry in data.Season) {
1434+
yield return (entry.seasonID, entry);
1435+
}
1436+
}
1437+
1438+
public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataGuildPvp() {
1439+
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_guildpvp.xml")));
1440+
var reader = XmlReader.Create(new StringReader(xml));
1441+
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
1442+
Debug.Assert(data != null);
1443+
1444+
foreach (SeasonData entry in data.Season) {
1445+
yield return (entry.seasonID, entry);
1446+
}
1447+
}
1448+
1449+
public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataMapleSurvival() {
1450+
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_maplesurvival.xml")));
1451+
var reader = XmlReader.Create(new StringReader(xml));
1452+
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
1453+
Debug.Assert(data != null);
1454+
1455+
foreach (SeasonData entry in data.Season) {
1456+
yield return (entry.seasonID, entry);
1457+
}
1458+
}
1459+
1460+
public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataMapleSurvivalSquad() {
1461+
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_maplesurvival_squad.xml")));
1462+
var reader = XmlReader.Create(new StringReader(xml));
1463+
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
1464+
Debug.Assert(data != null);
1465+
1466+
foreach (SeasonData entry in data.Season) {
1467+
yield return (entry.seasonID, entry);
1468+
}
1469+
}
1470+
1471+
public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataPvp() {
1472+
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_pvp.xml")));
1473+
var reader = XmlReader.Create(new StringReader(xml));
1474+
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
1475+
Debug.Assert(data != null);
1476+
1477+
foreach (SeasonData entry in data.Season) {
1478+
yield return (entry.seasonID, entry);
1479+
}
1480+
}
1481+
1482+
public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataUgcMapCommendation() {
1483+
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_ugcmapcommendation.xml")));
1484+
var reader = XmlReader.Create(new StringReader(xml));
1485+
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
1486+
Debug.Assert(data != null);
1487+
1488+
foreach (SeasonData entry in data.Season) {
1489+
yield return (entry.seasonID, entry);
1490+
}
1491+
}
1492+
1493+
public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataWorldChampion() {
1494+
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_worldchampion.xml")));
1495+
var reader = XmlReader.Create(new StringReader(xml));
1496+
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
1497+
Debug.Assert(data != null);
1498+
1499+
foreach (SeasonData entry in data.Season) {
1500+
yield return (entry.seasonID, entry);
1501+
}
1502+
}
14021503
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.Xml.Serialization;
2+
3+
namespace Maple2.File.Parser.Xml.Table;
4+
5+
// ./data/xml/table/na/seasondata_arcade.xml
6+
// ./data/xml/table/na/seasondata_bosscolosseum.xml
7+
// ./data/xml/table/na/seasondata_darkstream.xml
8+
// ./data/xml/table/na/seasondata_guildpvp.xml
9+
// ./data/xml/table/na/seasondata_maplesurvival.xml
10+
// ./data/xml/table/na/seasondata_maplesurvival_squad.xml
11+
// ./data/xml/table/na/seasondata_pvp.xml
12+
// ./data/xml/table/na/seasondata_ugcmapcommendation.xml
13+
// ./data/xml/table/na/seasondata_worldchampion.xml
14+
[XmlRoot("ms2")]
15+
public class SeasonDataRoot {
16+
[XmlElement] public List<SeasonData> Season;
17+
}
18+
19+
public partial class SeasonData {
20+
[XmlAttribute] public int seasonID;
21+
[XmlAttribute] public string seasonName = string.Empty;
22+
[XmlAttribute] public string eventStart = string.Empty;
23+
[XmlAttribute] public string eventEnd = string.Empty;
24+
[XmlAttribute] public int grade1;
25+
[XmlAttribute] public int grade2;
26+
[XmlAttribute] public int grade3;
27+
[XmlAttribute] public int grade4;
28+
[XmlAttribute] public int grade5;
29+
[XmlAttribute] public int grade6;
30+
[XmlAttribute] public int grade7;
31+
}

Maple2.File.Tests/TableParserTest.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,5 +678,44 @@ public void TestSmartPush() {
678678
continue;
679679
}
680680
}
681+
682+
[TestMethod]
683+
public void TestSeasonData() {
684+
foreach ((_, _) in _parser.ParseSeasonDataArcade()) {
685+
continue;
686+
}
687+
688+
foreach ((_, _) in _parser.ParseSeasonDataBossColosseum()) {
689+
continue;
690+
}
691+
692+
foreach ((_, _) in _parser.ParseSeasonDataDarkStream()) {
693+
continue;
694+
}
695+
696+
foreach ((_, _) in _parser.ParseSeasonDataGuildPvp()) {
697+
continue;
698+
}
699+
700+
foreach ((_, _) in _parser.ParseSeasonDataMapleSurvival()) {
701+
continue;
702+
}
703+
704+
foreach ((_, _) in _parser.ParseSeasonDataMapleSurvivalSquad()) {
705+
continue;
706+
}
707+
708+
foreach ((_, _) in _parser.ParseSeasonDataPvp()) {
709+
continue;
710+
}
711+
712+
foreach ((_, _) in _parser.ParseSeasonDataUgcMapCommendation()) {
713+
continue;
714+
}
715+
716+
foreach ((_, _) in _parser.ParseSeasonDataWorldChampion()) {
717+
continue;
718+
}
719+
}
681720
}
682721

0 commit comments

Comments
 (0)