Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Maple2.File.Parser/Maple2.File.Parser.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<PackageTags>MapleStory2, File, Parser, m2d, xml</PackageTags>
<!-- Use following lines to write the generated files to disk. -->
<EmitCompilerGeneratedFiles Condition=" '$(Configuration)' == 'Debug' ">true</EmitCompilerGeneratedFiles>
<PackageVersion>2.2.8</PackageVersion>
<PackageVersion>2.2.9</PackageVersion>
<TargetFramework>net8.0</TargetFramework>
<PackageReadmeFile>README.md</PackageReadmeFile>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
101 changes: 101 additions & 0 deletions Maple2.File.Parser/TableParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ public class TableParser {
private readonly XmlSerializer weddingRewardSerializer;
private readonly XmlSerializer weddingSkillSerializer;
private readonly XmlSerializer smartPushSerializer;
private readonly XmlSerializer seasonDataSerializer;

private readonly string locale;

Expand Down Expand Up @@ -191,6 +192,7 @@ public TableParser(M2dReader xmlReader) {
weddingRewardSerializer = new XmlSerializer(typeof(WeddingRewardRoot));
weddingSkillSerializer = new XmlSerializer(typeof(WeddingSkillRoot));
smartPushSerializer = new XmlSerializer(typeof(SmartPushRoot));
seasonDataSerializer = new XmlSerializer(typeof(SeasonDataRoot));

locale = FeatureLocaleFilter.Locale.ToLower();

Expand Down Expand Up @@ -1399,4 +1401,103 @@ public IEnumerable<JobTableKR> ParseJobTableKR() {
yield return (entry.id, entry);
}
}

public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataArcade() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_arcade.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
Debug.Assert(data != null);

foreach (SeasonData entry in data.Season) {
yield return (entry.seasonID, entry);
}
}

public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataBossColosseum() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_bosscolosseum.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
Debug.Assert(data != null);

foreach (SeasonData entry in data.Season) {
yield return (entry.seasonID, entry);
}
}

public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataDarkStream() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_darkstream.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
Debug.Assert(data != null);

foreach (SeasonData entry in data.Season) {
yield return (entry.seasonID, entry);
}
}

public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataGuildPvp() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_guildpvp.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
Debug.Assert(data != null);

foreach (SeasonData entry in data.Season) {
yield return (entry.seasonID, entry);
}
}

public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataMapleSurvival() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_maplesurvival.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
Debug.Assert(data != null);

foreach (SeasonData entry in data.Season) {
yield return (entry.seasonID, entry);
}
}

public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataMapleSurvivalSquad() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_maplesurvival_squad.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
Debug.Assert(data != null);

foreach (SeasonData entry in data.Season) {
yield return (entry.seasonID, entry);
}
}

public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataPvp() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_pvp.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
Debug.Assert(data != null);

foreach (SeasonData entry in data.Season) {
yield return (entry.seasonID, entry);
}
}

public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataUgcMapCommendation() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_ugcmapcommendation.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
Debug.Assert(data != null);

foreach (SeasonData entry in data.Season) {
yield return (entry.seasonID, entry);
}
}

public IEnumerable<(int Id, SeasonData Data)> ParseSeasonDataWorldChampion() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry($"table/{locale}/seasondata_worldchampion.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = seasonDataSerializer.Deserialize(reader) as SeasonDataRoot;
Debug.Assert(data != null);

foreach (SeasonData entry in data.Season) {
yield return (entry.seasonID, entry);
}
}
}
31 changes: 31 additions & 0 deletions Maple2.File.Parser/Xml/Table/SeasonData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using System.Xml.Serialization;

namespace Maple2.File.Parser.Xml.Table;

// ./data/xml/table/na/seasondata_arcade.xml
// ./data/xml/table/na/seasondata_bosscolosseum.xml
// ./data/xml/table/na/seasondata_darkstream.xml
// ./data/xml/table/na/seasondata_guildpvp.xml
// ./data/xml/table/na/seasondata_maplesurvival.xml
// ./data/xml/table/na/seasondata_maplesurvival_squad.xml
// ./data/xml/table/na/seasondata_pvp.xml
// ./data/xml/table/na/seasondata_ugcmapcommendation.xml
// ./data/xml/table/na/seasondata_worldchampion.xml
[XmlRoot("ms2")]
public class SeasonDataRoot {
[XmlElement] public List<SeasonData> Season;
}

public partial class SeasonData {
[XmlAttribute] public int seasonID;
[XmlAttribute] public string seasonName = string.Empty;
[XmlAttribute] public string eventStart = string.Empty;
[XmlAttribute] public string eventEnd = string.Empty;
[XmlAttribute] public int grade1;
[XmlAttribute] public int grade2;
[XmlAttribute] public int grade3;
[XmlAttribute] public int grade4;
[XmlAttribute] public int grade5;
[XmlAttribute] public int grade6;
[XmlAttribute] public int grade7;
}
39 changes: 39 additions & 0 deletions Maple2.File.Tests/TableParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -678,5 +678,44 @@ public void TestSmartPush() {
continue;
}
}

[TestMethod]
public void TestSeasonData() {
foreach ((_, _) in _parser.ParseSeasonDataArcade()) {
continue;
}

foreach ((_, _) in _parser.ParseSeasonDataBossColosseum()) {
continue;
}

foreach ((_, _) in _parser.ParseSeasonDataDarkStream()) {
continue;
}

foreach ((_, _) in _parser.ParseSeasonDataGuildPvp()) {
continue;
}

foreach ((_, _) in _parser.ParseSeasonDataMapleSurvival()) {
continue;
}

foreach ((_, _) in _parser.ParseSeasonDataMapleSurvivalSquad()) {
continue;
}

foreach ((_, _) in _parser.ParseSeasonDataPvp()) {
continue;
}

foreach ((_, _) in _parser.ParseSeasonDataUgcMapCommendation()) {
continue;
}

foreach ((_, _) in _parser.ParseSeasonDataWorldChampion()) {
continue;
}
}
}

Loading