Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
    /// <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);
        }
    }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
        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;
            }
        }
Beispiel #6
0
    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);
        }
    }