Skip to content

Commit

Permalink
Enchant Table (#32)
Browse files Browse the repository at this point in the history
  • Loading branch information
Zintixx authored Aug 11, 2024
1 parent 128d570 commit 1a9a0cc
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 3 deletions.
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.1.25</PackageVersion>
<PackageVersion>2.1.26</PackageVersion>
<TargetFramework>net8.0</TargetFramework>
<PackageReadmeFile>README.md</PackageReadmeFile>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
12 changes: 12 additions & 0 deletions Maple2.File.Parser/ServerTableParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public class ServerTableParser {
private readonly XmlSerializer gameEventSerializer;
private readonly XmlSerializer unlimitedEnchantOptionSerializer;
private readonly XmlSerializer itemMergeOptionSerializer;
private readonly XmlSerializer enchantOptionSerializer;

public ServerTableParser(M2dReader xmlReader) {
this.xmlReader = xmlReader;
Expand Down Expand Up @@ -77,6 +78,7 @@ public ServerTableParser(M2dReader xmlReader) {
gameEventSerializer = new XmlSerializer(typeof(GameEventRoot));
unlimitedEnchantOptionSerializer = new XmlSerializer(typeof(UnlimitedEnchantOptionRoot));
itemMergeOptionSerializer = new XmlSerializer(typeof(ItemMergeOptionRoot));
enchantOptionSerializer = new XmlSerializer(typeof(EnchantOptionRoot));

// var seen = new HashSet<string>();
// this.bankTypeSerializer.UnknownAttribute += (sender, args) => {
Expand Down Expand Up @@ -590,4 +592,14 @@ public ServerTableParser(M2dReader xmlReader) {
yield return (entry.id, entry);
}
}

public IEnumerable<(int Id, EnchantOption EnchantOption)> ParseEnchantOption() {
XmlReader reader = xmlReader.GetXmlReader(xmlReader.GetEntry("table/Server/enchantOptionTable.xml"));
var data = enchantOptionSerializer.Deserialize(reader) as EnchantOptionRoot;
Debug.Assert(data != null);

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

namespace Maple2.File.Parser.Xml.Table.Server;

// ./data/server/table/Server/enchantOptionTable.xml
[XmlRoot("ms2")]
public class EnchantOptionRoot {
[XmlElement] public List<EnchantOption> option;
}

public partial class EnchantOption {
[XmlAttribute] public int id;
[XmlAttribute] public int slot;
[XmlAttribute] public int grade;
[XmlAttribute] public int rank;
[XmlAttribute] public float rate;
[XmlAttribute] public int minLv;
[XmlAttribute] public int maxLv;
[M2dArray] public int[] option = Array.Empty<int>();
}
18 changes: 16 additions & 2 deletions Maple2.File.Parser/Xml/Table/Server/ItemMergeOption.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class ItemMergeOptionRoot {
[XmlElement] public List<MergeOption> mergeOption;
}

public partial class MergeOption : IFeatureLocale {
public partial class MergeOption {
[XmlAttribute] public int id;

[XmlElement] public List<Slot> slot;
Expand All @@ -22,7 +22,7 @@ public partial class Slot {
[XmlElement] public List<Option> option;
}

public partial class Option {
public class Option {
[XmlAttribute] public string optionName = string.Empty;
[XmlAttribute] public int min;
[XmlAttribute] public int idx0_max;
Expand All @@ -45,5 +45,19 @@ public partial class Option {
[XmlAttribute] public int idx8_weight;
[XmlAttribute] public int idx9_max;
[XmlAttribute] public int idx9_weight;

public (int, int) this[int i] => i switch {
0 => (idx0_max, idx0_weight),
1 => (idx1_max, idx1_weight),
2 => (idx2_max, idx2_weight),
3 => (idx3_max, idx3_weight),
4 => (idx4_max, idx4_weight),
5 => (idx5_max, idx5_weight),
6 => (idx6_max, idx6_weight),
7 => (idx7_max, idx7_weight),
8 => (idx8_max, idx8_weight),
9 => (idx9_max, idx9_weight),
_ => throw new ArgumentOutOfRangeException(nameof(i), i, "Invalid option index."),
};
}
}
9 changes: 9 additions & 0 deletions Maple2.File.Tests/ServerTableParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -372,4 +372,13 @@ public void TestItemMergeOption() {
continue;
}
}

[TestMethod]
public void TestEnchantOption() {
var parser = new ServerTableParser(TestUtils.ServerReader);

foreach ((_, _) in parser.ParseEnchantOption()) {
continue;
}
}
}

0 comments on commit 1a9a0cc

Please sign in to comment.