diff --git a/Maple2.File.Parser/Maple2.File.Parser.csproj b/Maple2.File.Parser/Maple2.File.Parser.csproj
index 82c3367..de3094f 100644
--- a/Maple2.File.Parser/Maple2.File.Parser.csproj
+++ b/Maple2.File.Parser/Maple2.File.Parser.csproj
@@ -13,7 +13,7 @@
MapleStory2, File, Parser, m2d, xml
true
- 2.4.0
+ 2.4.1
net8.0
README.md
enable
diff --git a/Maple2.File.Parser/TableParser.cs b/Maple2.File.Parser/TableParser.cs
index f97e4c5..e55ba32 100644
--- a/Maple2.File.Parser/TableParser.cs
+++ b/Maple2.File.Parser/TableParser.cs
@@ -33,6 +33,7 @@ public class TableParser {
private readonly XmlSerializer guildHouseSerializer;
private readonly XmlSerializer guildNpcSerializer;
private readonly XmlSerializer guildPropertySerializer;
+ private readonly XmlSerializer guildQuestRewardFactorSerializer;
private readonly XmlSerializer instrumentCategoryInfoSerializer;
private readonly XmlSerializer instrumentInfoSerializer;
private readonly XmlSerializer interactObjectSerializer;
@@ -132,6 +133,7 @@ public TableParser(M2dReader xmlReader, string language) {
guildHouseSerializer = new XmlSerializer(typeof(GuildHouseRoot));
guildNpcSerializer = new XmlSerializer(typeof(GuildNpcRoot));
guildPropertySerializer = new XmlSerializer(typeof(GuildPropertyRoot));
+ guildQuestRewardFactorSerializer = new XmlSerializer(typeof(GuildQuestRewardFactorRoot));
instrumentCategoryInfoSerializer = new XmlSerializer(typeof(InstrumentCategoryInfoRoot));
instrumentInfoSerializer = new XmlSerializer(typeof(InstrumentInfoRoot));
interactObjectSerializer = new XmlSerializer(typeof(InteractObjectRoot));
@@ -469,6 +471,16 @@ public IEnumerable ParseUnitedWeeklyReward() {
}
}
+ public IEnumerable<(int Id, GuildQuestRewardFactor Factor)> ParseGuildQuestRewardFactor() {
+ XmlReader reader = xmlReader.GetXmlReader(xmlReader.GetEntry("table/guildquestrewardfactor.xml"));
+ var data = guildQuestRewardFactorSerializer.Deserialize(reader) as GuildQuestRewardFactorRoot;
+ Debug.Assert(data != null);
+
+ foreach (GuildQuestRewardFactor factor in data.guildNpc) {
+ yield return (factor.level, factor);
+ }
+ }
+
public IEnumerable<(int Id, InstrumentCategoryInfo Info)> ParseInstrumentCategoryInfo() {
XmlReader reader = xmlReader.GetXmlReader(xmlReader.GetEntry("table/instrumentcategoryinfo.xml"));
var data = instrumentCategoryInfoSerializer.Deserialize(reader) as InstrumentCategoryInfoRoot;
diff --git a/Maple2.File.Parser/Xml/Table/GuildQuestRewardFactor.cs b/Maple2.File.Parser/Xml/Table/GuildQuestRewardFactor.cs
new file mode 100644
index 0000000..c3150e7
--- /dev/null
+++ b/Maple2.File.Parser/Xml/Table/GuildQuestRewardFactor.cs
@@ -0,0 +1,19 @@
+using System.Xml.Serialization;
+using M2dXmlGenerator;
+
+namespace Maple2.File.Parser.Xml.Table;
+
+// ./data/xml/table/guildquestrewardfactor.xml
+[XmlRoot("ms2")]
+public partial class GuildQuestRewardFactorRoot {
+ [M2dFeatureLocale(Selector = "level")] private IList _guildNpc;
+}
+
+public partial class GuildQuestRewardFactor : IFeatureLocale {
+ [XmlAttribute] public int level;
+ [XmlAttribute] public float guildExpFactor;
+ [XmlAttribute] public float userExpFactor;
+ [XmlAttribute] public float guildFundFactor;
+ [XmlAttribute] public float userMesoFactor;
+ [XmlAttribute] public float GuildCoinFactor;
+}
diff --git a/Maple2.File.Tests/TableParserTest.cs b/Maple2.File.Tests/TableParserTest.cs
index 1a4e05e..b16d37d 100644
--- a/Maple2.File.Tests/TableParserTest.cs
+++ b/Maple2.File.Tests/TableParserTest.cs
@@ -191,6 +191,13 @@ public void TestGuildProperty() {
}
}
+ [TestMethod]
+ public void TestGuildQuestRewardFactor() {
+ foreach ((_, _) in _parser.ParseGuildQuestRewardFactor()) {
+ continue;
+ }
+ }
+
[TestMethod]
public void TestParseInstrumentCategoryInfo() {
foreach ((_, _) in _parser.ParseInstrumentCategoryInfo()) {