Skip to content

Commit

Permalink
Server Item Options (#38)
Browse files Browse the repository at this point in the history
  • Loading branch information
Zintixx authored Sep 23, 2024
1 parent 9a98964 commit 3b6ec51
Show file tree
Hide file tree
Showing 6 changed files with 134 additions and 1 deletion.
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.30</PackageVersion>
<PackageVersion>2.1.31</PackageVersion>
<TargetFramework>net8.0</TargetFramework>
<PackageReadmeFile>README.md</PackageReadmeFile>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
39 changes: 39 additions & 0 deletions Maple2.File.Parser/ServerTableParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ public class ServerTableParser {
private readonly XmlSerializer enchantOptionSerializer;
private readonly XmlSerializer shopMeretSerializer;
private readonly XmlSerializer shopMeretCustomSerializer;
private readonly XmlSerializer itemOptionProbabilitySerializer;
private readonly XmlSerializer itemOptionVariationSerializer;
private readonly XmlSerializer itemOptionRandomSerializer;

public ServerTableParser(M2dReader xmlReader) {
this.xmlReader = xmlReader;
Expand Down Expand Up @@ -83,6 +86,9 @@ public ServerTableParser(M2dReader xmlReader) {
enchantOptionSerializer = new XmlSerializer(typeof(EnchantOptionRoot));
shopMeretSerializer = new XmlSerializer(typeof(ShopMeretRoot));
shopMeretCustomSerializer = new XmlSerializer(typeof(ShopMeretCustomRoot));
itemOptionProbabilitySerializer = new XmlSerializer(typeof(ItemOptionProbabilityRoot));
itemOptionVariationSerializer = new XmlSerializer(typeof(ItemOptionVariationRoot));
itemOptionRandomSerializer = new XmlSerializer(typeof(ItemOptionRandomRoot));

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

public IEnumerable<(string Name, ItemOptionProbability Option)> ParseItemOptionProbability() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/Server/itemOptionProbability.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = itemOptionProbabilitySerializer.Deserialize(reader) as ItemOptionProbabilityRoot;
Debug.Assert(data != null);

foreach (ItemOptionProbability option in data.option) {
yield return (option.name, option);
}
}

public IEnumerable<(int Id, ItemOptionVariation Option)> ParseItemOptionVariation() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/Server/itemOptionVariation.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = itemOptionVariationSerializer.Deserialize(reader) as ItemOptionVariationRoot;
Debug.Assert(data != null);

foreach (ItemOptionVariation option in data.option) {
yield return (option.id, option);
}
}

public IEnumerable<(int Id, ItemOptionRandom Option)> ParseItemOptionRandom() {
string xml = Sanitizer.RemoveEmpty(xmlReader.GetString(xmlReader.GetEntry("table/Server/ItemOptionRandom.xml")));
var reader = XmlReader.Create(new StringReader(xml));
var data = itemOptionRandomSerializer.Deserialize(reader) as ItemOptionRandomRoot;
Debug.Assert(data != null);

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

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

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

public partial class ItemOptionProbability {
[XmlAttribute] public string name = string.Empty;
[XmlAttribute] public int weaponProbability;
[XmlAttribute] public int armorProbability;
[XmlAttribute] public int accProbability;
[XmlAttribute] public int petProbability;
}
25 changes: 25 additions & 0 deletions Maple2.File.Parser/Xml/Table/Server/ItemOptionRandom.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System.Xml.Serialization;

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

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

public class ItemOptionRandom {
[XmlAttribute] public int code;
[XmlAttribute] public int statGroup;
[XmlAttribute] public int levelGroupID;
[XmlAttribute] public int pickCount;
[XmlAttribute] public bool isRarePickOne;
[XmlAttribute] public int copyID;
[XmlElement] public List<ItemOptionStat> v;

public class ItemOptionStat {
[XmlAttribute] public string name = string.Empty;
[XmlAttribute] public int weight = 1;
[XmlAttribute] public int statID;
}
}
25 changes: 25 additions & 0 deletions Maple2.File.Parser/Xml/Table/Server/ItemOptionVariation.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System.Xml.Serialization;

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

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

public class ItemOptionVariation {
[XmlAttribute] public int id;
[XmlAttribute] public int multipleID;
[XmlAttribute] public int groupType;
[XmlAttribute] public string name = string.Empty;
[XmlAttribute] public int levelGroupID;
[XmlAttribute] public int highStat;
[XmlAttribute] public int isRateType;
[XmlElement] public List<ItemOptionStat> v;

public class ItemOptionStat {
[XmlAttribute] public int stat;
[XmlAttribute] public int weight = 1;
}
}
27 changes: 27 additions & 0 deletions Maple2.File.Tests/ServerTableParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -408,4 +408,31 @@ public void TestMeretShopCustom() {
continue;
}
}

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

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

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

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

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

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

0 comments on commit 3b6ec51

Please sign in to comment.