public static void UpdateQuest(GameSession session, string code, string type, string target = "") { List <QuestStatus> questList = session.Player.QuestList.Where(x => x.Condition != null && x.Condition.Any(x => x.Type == type) && x.Started && !x.Completed).ToList(); foreach (QuestStatus quest in questList) { Condition condition = quest.Condition .FirstOrDefault(x => x.Codes != null && x.Codes.Length != 0 && x.Codes.Contains(code) && x.Target.Contains(target) && !x.Completed); if (condition == null) { continue; } if (condition.Goal != 0) { if (condition.Goal == condition.Current) { return; } } condition.Current++; if (condition.Current >= condition.Goal) { condition.Completed = true; } session.Send(QuestPacket.UpdateCondition(quest.Basic.Id, quest.Condition)); DatabaseManager.Quests.Update(quest); return; } }
public static void UpdateExplorationQuest(GameSession session, string code, string type) { List <QuestStatus> questList = session.Player.QuestList; foreach (QuestStatus quest in questList.Where(x => x.Basic.QuestType == QuestType.Exploration && x.Condition != null)) { QuestCondition condition = quest.Condition.Where(x => x.Type == type) .FirstOrDefault(x => x.Codes.Length != 0 && x.Codes.Contains(code)); if (condition == null) { continue; } if (condition.Goal != condition.Current) { condition.Current++; } session.Send(QuestPacket.UpdateCondition(quest.Basic.Id, quest.Condition.IndexOf(condition) + 1, condition.Current)); if (condition.Goal != condition.Current) // Quest completed { return; } quest.Completed = true; quest.CompleteTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); session.Player.Levels.GainExp(quest.Reward.Exp); session.Player.Wallet.Meso.Modify(quest.Reward.Money); session.Send(QuestPacket.CompleteQuest(quest.Basic.Id, false)); return; } }
/// <summary> /// Increase the current condition value by 1. /// If the condition value is already at the maximum, the condition is completed. /// Send the respective quest packets to the player. /// </summary> private static void UpdateConditions(this IEnumerable <Condition> relevantConditions, GameSession session, QuestStatus quest) { foreach (Condition condition in relevantConditions) { if (condition.Goal != 0 && condition.Goal == condition.Current) { continue; } condition.Current++; if (condition.Current >= condition.Goal) { condition.Completed = true; } session.Send(QuestPacket.UpdateCondition(quest.Basic.Id, quest.Condition)); if (!condition.Completed || quest.Basic.QuestType is not QuestType.Exploration) { continue; } quest.State = QuestState.Completed; quest.AmountCompleted++; quest.CompleteTimestamp = TimeInfo.Now(); session.Player.Levels.GainExp(quest.Reward.Exp); session.Player.Wallet.Meso.Modify(quest.Reward.Money); session.Send(QuestPacket.CompleteQuest(quest.Basic.Id, false)); DatabaseManager.Quests.Update(quest); } }
public static void UpdateExplorationQuest(GameSession session, string code, string type) { List <QuestStatus> quests = session.Player.QuestList.Where(quest => quest.Basic.QuestType == QuestType.Exploration && quest.Condition is not null && !quest.Completed && quest.Started && quest.Condition.Any(condition => condition.Type == type && condition.Codes.Contains(code))) .ToList(); foreach (QuestStatus quest in quests) { Condition condition = quest.Condition.FirstOrDefault(condition => condition.Type == type && condition.Codes.Contains(code) && !condition.Completed); if (condition == null) { continue; } condition.Current++; if (condition.Current >= condition.Goal) { condition.Completed = true; } session.Send(QuestPacket.UpdateCondition(quest.Basic.Id, quest.Condition)); if (!condition.Completed) { return; } quest.Completed = true; quest.CompleteTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); DatabaseManager.Quests.Update(quest); session.Player.Levels.GainExp(quest.Reward.Exp); session.Player.Wallet.Meso.Modify(quest.Reward.Money); session.Send(QuestPacket.CompleteQuest(quest.Basic.Id, false)); return; } }
public static void UpdateQuest(GameSession session, string code, string type) { List <QuestStatus> questList = session.Player.QuestList; foreach (QuestStatus quest in questList.Where(x => x.Condition != null)) { QuestCondition condition = quest.Condition.Where(x => x.Type == type).FirstOrDefault(x => x.Codes != null && x.Codes.Length != 0 && x.Codes.Contains(code)); if (condition == null) { continue; } if (condition.Goal == condition.Current) { return; } condition.Current++; session.Send(QuestPacket.UpdateCondition(quest.Basic.Id, quest.Condition.IndexOf(condition) + 1, condition.Current)); return; } }
public static void UpdateQuest(GameSession session, string code, string type, string target = "") { IEnumerable <QuestStatus> questList = session.Player.QuestData.Values.Where(quest => quest.Condition is not null && quest.State is QuestState.Started && quest.Condition.Any(condition => condition.Codes is not null && condition.Target is not null && condition.Type == type && condition.Codes.Contains(code) && (condition.Target.Contains(target) || condition.Target.Count == 0))); foreach (QuestStatus quest in questList) { Condition condition = quest.Condition.FirstOrDefault(condition => condition.Codes.Contains(code) && (condition.Target.Contains(target) || condition.Target.Count == 0) && !condition.Completed); if (condition == null) { continue; } if (condition.Goal != 0) { if (condition.Goal == condition.Current) { return; } } condition.Current++; if (condition.Current >= condition.Goal) { condition.Completed = true; } session.Send(QuestPacket.UpdateCondition(quest.Basic.Id, quest.Condition)); DatabaseManager.Quests.Update(quest); } }