Skip to content

Commit 566b7ad

Browse files
Add DarkStream reward table parser
Parse table/darkstream.xml with M2dFeatureLocale for locale filtering. Bump version to 2.3.9. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f79f10b commit 566b7ad

4 files changed

Lines changed: 54 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.3.8</PackageVersion>
16+
<PackageVersion>2.3.9</PackageVersion>
1717
<TargetFramework>net8.0</TargetFramework>
1818
<PackageReadmeFile>README.md</PackageReadmeFile>
1919
<ImplicitUsings>enable</ImplicitUsings>

Maple2.File.Parser/TableParser.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ public class TableParser {
104104
private readonly XmlSerializer autoActionPricePackageSerializer;
105105
private readonly XmlSerializer pvpRankingDuelModeSerializer;
106106
private readonly XmlSerializer questGroupSerializer;
107+
private readonly XmlSerializer darkStreamSerializer;
107108

108109
private readonly string locale;
109110
private readonly string language;
@@ -202,6 +203,7 @@ public TableParser(M2dReader xmlReader, string language) {
202203
autoActionPricePackageSerializer = new XmlSerializer(typeof(AutoActionPricePackageRoot));
203204
pvpRankingDuelModeSerializer = new XmlSerializer(typeof(PvpRankingDuelModeRoot));
204205
questGroupSerializer = new XmlSerializer(typeof(QuestGroupRoot));
206+
darkStreamSerializer = new XmlSerializer(typeof(DarkStreamRoot));
205207

206208
locale = FeatureLocaleFilter.Locale.ToLower();
207209
this.language = language;
@@ -1575,4 +1577,14 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
15751577
yield return (entry.id, entry);
15761578
}
15771579
}
1580+
1581+
public IEnumerable<(int Round, DarkStreamReward Reward)> ParseDarkStream() {
1582+
XmlReader reader = xmlReader.GetXmlReader(xmlReader.GetEntry("table/darkstream.xml"));
1583+
var data = darkStreamSerializer.Deserialize(reader) as DarkStreamRoot;
1584+
Debug.Assert(data != null);
1585+
1586+
foreach (DarkStreamReward entry in data.reward) {
1587+
yield return (entry.round, entry);
1588+
}
1589+
}
15781590
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System.Xml.Serialization;
2+
using M2dXmlGenerator;
3+
4+
namespace Maple2.File.Parser.Xml.Table;
5+
6+
// ./data/xml/table/darkstream.xml
7+
[XmlRoot("ms2")]
8+
public partial class DarkStreamRoot {
9+
[M2dFeatureLocale(Selector = "round")] private IList<DarkStreamReward> _reward;
10+
}
11+
12+
public partial class DarkStreamReward : IFeatureLocale {
13+
[XmlAttribute] public int round;
14+
[XmlAttribute] public float expRate;
15+
[XmlAttribute] public int meso;
16+
[XmlAttribute] public int habi;
17+
[XmlAttribute] public string items = string.Empty;
18+
}

Maple2.File.Tests/TableParserTest.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,4 +739,27 @@ public void TestQuestGroup() {
739739
continue;
740740
}
741741
}
742+
743+
[TestMethod]
744+
public void TestDarkStream() {
745+
var results = new Dictionary<int, DarkStreamReward>();
746+
foreach ((int round, DarkStreamReward reward) in _parser.ParseDarkStream()) {
747+
results[round] = reward;
748+
}
749+
750+
// darkstream.xml has 31 entries (rounds 0–30) for the default (non-locale) set
751+
Assert.AreEqual(31, results.Count);
752+
Assert.IsTrue(results.ContainsKey(0));
753+
Assert.IsTrue(results.ContainsKey(30));
754+
755+
// Spot check round 0
756+
Assert.AreEqual(0.1f, results[0].expRate);
757+
Assert.AreEqual(100, results[0].meso);
758+
Assert.AreEqual(10, results[0].habi);
759+
760+
// Spot check round 30
761+
Assert.AreEqual(6f, results[30].expRate);
762+
Assert.AreEqual(70000, results[30].meso);
763+
Assert.AreEqual(2300, results[30].habi);
764+
}
742765
}

0 commit comments

Comments
 (0)