Skip to content

Commit

Permalink
Implementing item rewards upon accepting quests. (#826)
Browse files Browse the repository at this point in the history
* Implementing item rewards on accept quests

* Fix formatting issues

---------

Co-authored-by: Gabriel Fiuza <gabriel.fiuza@iaudit.com.br>
  • Loading branch information
icegabriel and Gabriel Fiuza committed May 28, 2023
1 parent 9c26432 commit 8208b69
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 19 deletions.
10 changes: 10 additions & 0 deletions GameDataParser/Parsers/QuestParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,13 @@ protected override List<QuestMetadata> Parse()

List<Reward.Item> essentialItem = data.completeReward.essentialItem;
List<Reward.Item> essentialJobItem = data.completeReward.essentialJobItem;
List<Reward.Item> acceptEssentialItem = data.acceptReward.essentialItem;

if (FeatureLocaleFilter.FeatureEnabled("GlobalQuestRewardItem"))
{
essentialItem = data.completeReward.globalEssentialItem.Count == 0 ? essentialItem : data.completeReward.globalEssentialItem;
essentialJobItem = data.completeReward.globalEssentialJobItem.Count == 0 ? essentialJobItem : data.completeReward.globalEssentialJobItem;
acceptEssentialItem = data.acceptReward.globalEssentialItem.Count == 0 ? acceptEssentialItem : data.acceptReward.globalEssentialItem;
}

metadata.RewardItem = essentialItem.Where(x => x.code != 0).Select(x => new QuestRewardItem()
Expand All @@ -103,6 +106,13 @@ protected override List<QuestMetadata> Parse()
Rank = (byte) x.rank
}).ToList());

metadata.AcceptRewardItem = acceptEssentialItem.Where(x => x.code != 0).Select(x => new QuestRewardItem()
{
Code = x.code,
Count = x.count,
Rank = (byte) x.rank
}).ToList();

quests.Add(metadata);
}

Expand Down
18 changes: 10 additions & 8 deletions Maple2Storage/Types/Metadata/QuestMetadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,24 @@ public class QuestMetadata
[XmlElement(Order = 4)]
public int CompleteNpc;
[XmlElement(Order = 5)]
public QuestReward Reward = new();
public List<QuestRewardItem> AcceptRewardItem = new();
[XmlElement(Order = 6)]
public List<QuestRewardItem> RewardItem = new();
public QuestReward Reward = new();
[XmlElement(Order = 7)]
public List<int> ProgressMap = new();
public List<QuestRewardItem> RewardItem = new();
[XmlElement(Order = 8)]
public QuestNpc Npc = new();
public List<int> ProgressMap = new();
[XmlElement(Order = 9)]
public QuestDungeon Dungeon = new();
public QuestNpc Npc = new();
[XmlElement(Order = 10)]
public QuestSummonPortal SummonPortal = new();
public QuestDungeon Dungeon = new();
[XmlElement(Order = 11)]
public List<QuestCondition> Condition = new();
public QuestSummonPortal SummonPortal = new();
[XmlElement(Order = 12)]
public QuestDispatch Dispatch = new();
public List<QuestCondition> Condition = new();
[XmlElement(Order = 13)]
public QuestDispatch Dispatch = new();
[XmlElement(Order = 14)]
public string Name = "";
}

Expand Down
28 changes: 17 additions & 11 deletions MapleServer2/PacketHandlers/Game/QuestHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ private static void HandleSkyFortressTeleport(GameSession session)
private static void HandleAcceptQuest(GameSession session, PacketReader packet)
{
int questId = packet.ReadInt();
int objectId = packet.ReadInt();

if (!session.Player.QuestData.TryGetValue(questId, out QuestStatus questStatus))
{
Expand All @@ -81,15 +80,30 @@ private static void HandleAcceptQuest(GameSession session, PacketReader packet)
questStatus.State = QuestState.Started;
questStatus.StartTimestamp = TimeInfo.Now();
questStatus.Accepted = true;

AddRewardItemToPlayerInventory(session, questStatus.AcceptRewardItems);

DatabaseManager.Quests.Update(questStatus);
session.Send(QuestPacket.AcceptQuest(questStatus));
TrophyManager.OnAcceptQuest(session.Player, questId);
}

private static void AddRewardItemToPlayerInventory(GameSession session, IEnumerable<QuestRewardItem> rewardItems)
{
foreach (QuestRewardItem reward in rewardItems)
{
Item newItem = new(reward.Code, reward.Count, reward.Rank);
List<int> limitJobRequirements = ItemMetadataStorage.GetMetadata(reward.Code).Limit.JobRequirements;
if (limitJobRequirements.Contains((int) session.Player.JobCode) || limitJobRequirements.Contains(0))
{
session.Player.Inventory.AddItem(session, newItem, true);
}
}
}

private static void HandleCompleteQuest(GameSession session, PacketReader packet)
{
int questId = packet.ReadInt();
int objectId = packet.ReadInt();

if (!session.Player.QuestData.TryGetValue(questId, out QuestStatus questStatus))
{
Expand All @@ -108,15 +122,7 @@ private static void HandleCompleteQuest(GameSession session, PacketReader packet
session.Player.Levels.GainExp(questStatus.Reward.Exp);
session.Player.Wallet.Meso.Modify(questStatus.Reward.Money);

foreach (QuestRewardItem reward in questStatus.RewardItems)
{
Item newItem = new(reward.Code, reward.Count, reward.Rank);
List<int> limitJobRequirements = ItemMetadataStorage.GetMetadata(reward.Code).Limit.JobRequirements;
if (limitJobRequirements.Contains((int) session.Player.JobCode) || limitJobRequirements.Contains(0))
{
session.Player.Inventory.AddItem(session, newItem, true);
}
}
AddRewardItemToPlayerInventory(session, questStatus.RewardItems);

DatabaseManager.Quests.Update(questStatus);
session.Send(QuestPacket.CompleteQuest(questId, true));
Expand Down
2 changes: 2 additions & 0 deletions MapleServer2/Types/QuestStatus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public class QuestStatus
public long CompleteNpcId { get; private set; }
public QuestReward Reward { get; private set; }

public List<QuestRewardItem> AcceptRewardItems { get; private set; }
public List<QuestRewardItem> RewardItems { get; private set; }
public readonly long CharacterId;

Expand Down Expand Up @@ -67,6 +68,7 @@ private void SetMetadataValues(QuestMetadata metadata)
StartNpcId = metadata.StartNpc;
CompleteNpcId = metadata.CompleteNpc;
Reward = metadata.Reward;
AcceptRewardItems = metadata.AcceptRewardItem;
RewardItems = metadata.RewardItem;
}

Expand Down

0 comments on commit 8208b69

Please sign in to comment.