Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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.3.1</PackageVersion>
<PackageVersion>2.3.2</PackageVersion>
<TargetFramework>net8.0</TargetFramework>
<PackageReadmeFile>README.md</PackageReadmeFile>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
73 changes: 43 additions & 30 deletions Maple2.File.Parser/TableParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ public class TableParser {
private readonly XmlSerializer smartPushSerializer;
private readonly XmlSerializer seasonDataSerializer;
private readonly XmlSerializer statStringSerializer;
private readonly XmlSerializer autoActionPricePackageSerializer;

private readonly string locale;
private readonly string language;
Expand Down Expand Up @@ -196,6 +197,7 @@ public TableParser(M2dReader xmlReader, string language) {
smartPushSerializer = new XmlSerializer(typeof(SmartPushRoot));
seasonDataSerializer = new XmlSerializer(typeof(SeasonDataRoot));
statStringSerializer = new XmlSerializer(typeof(StatStringRoot));
autoActionPricePackageSerializer = new XmlSerializer(typeof(AutoActionPricePackageRoot));

locale = FeatureLocaleFilter.Locale.ToLower();
this.language = language;
Expand Down Expand Up @@ -799,9 +801,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(individualItemDrop => new {
individualItemDrop.individualDropBoxID,
individualItemDrop.dropGroup
})
individualItemDrop.individualDropBoxID,
individualItemDrop.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand Down Expand Up @@ -833,9 +835,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
dropbox.individualDropBoxID,
dropbox.dropGroup
})
dropbox.individualDropBoxID,
dropbox.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand All @@ -849,9 +851,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
dropbox.individualDropBoxID,
dropbox.dropGroup
})
dropbox.individualDropBoxID,
dropbox.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand All @@ -865,9 +867,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
dropbox.individualDropBoxID,
dropbox.dropGroup
})
dropbox.individualDropBoxID,
dropbox.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand All @@ -881,9 +883,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
dropbox.individualDropBoxID,
dropbox.dropGroup
})
dropbox.individualDropBoxID,
dropbox.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand All @@ -897,9 +899,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
dropbox.individualDropBoxID,
dropbox.dropGroup
})
dropbox.individualDropBoxID,
dropbox.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand All @@ -913,9 +915,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
dropbox.individualDropBoxID,
dropbox.dropGroup
})
dropbox.individualDropBoxID,
dropbox.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand All @@ -929,9 +931,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
dropbox.individualDropBoxID,
dropbox.dropGroup
})
dropbox.individualDropBoxID,
dropbox.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand All @@ -945,9 +947,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
dropbox.individualDropBoxID,
dropbox.dropGroup
})
dropbox.individualDropBoxID,
dropbox.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand All @@ -961,9 +963,9 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
var data = individualItemDropSerializer.Deserialize(reader) as IndividualItemDropRoot;
Debug.Assert(data != null);
var groups = data.individualDropBox.GroupBy(dropbox => new {
dropbox.individualDropBoxID,
dropbox.dropGroup
})
dropbox.individualDropBoxID,
dropbox.dropGroup
})
.ToDictionary(group => group.Key, group => group.ToList());
foreach (var group in groups) {
yield return (group.Key.individualDropBoxID, group.Value.GroupBy(drop => drop.dropGroup).ToDictionary(drop => drop.Key, drop => drop.ToList()));
Expand Down Expand Up @@ -1539,4 +1541,15 @@ public IEnumerable<JobTableNew> ParseJobTableNew() {
yield return (entry.id, entry);
}
}

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

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

namespace Maple2.File.Parser.Xml.Table;

// ./data/xml/table/{locale}/autoactionpricepackage.xml
[XmlRoot("ms2")]
public class AutoActionPricePackageRoot {
[XmlElement] public List<AutoActionPricePackage> package;
}

public class AutoActionPricePackage {
[XmlAttribute] public string content = string.Empty;
[XmlAttribute] public int id;
[XmlAttribute] public int duration;
[XmlAttribute] public int merat;
}
7 changes: 7 additions & 0 deletions Maple2.File.Tests/TableParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -718,5 +718,12 @@ public void TestSeasonData() {
continue;
}
}

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

Loading