コード例 #1
0
        public static bool IsQwestActive(Aim qwest, Pers pers)
        {
            // Проверка по выполненности
            if (qwest.IsDoneProperty)
            {
                qwest.NotAllowReqwirements = string.Empty;

                return(false);
            }

            var isEnabled    = true;
            var reqwirements = string.Empty;

            // Делаем квест недоступным, если дата начала не подходит
            if (qwest.BeginDate > MainViewModel.selectedTime)
            {
                return(false);

                isEnabled     = false;
                reqwirements += $"Дата начала {qwest.BeginDate.Date.ToShortDateString()}; ";
            }

            // Делаем недоступным если минимальный уровень перса меньше
            if (pers.PersLevelProperty < qwest.MinLevelProperty)
            {
                return(false);

                isEnabled     = false;
                reqwirements += "Недостаточный уровень персонажа; ";
            }

            // Делаем недоступными квесты, если связанные квесты не выполнены
            var reqAims = qwest.Needs.Where(n => n.IsDoneProperty == false).ToList();

            if (reqAims.Any())
            {
                return(false);

                isEnabled = false;
                foreach (var reqAim in reqAims)
                {
                    reqwirements += $"Квест \"{reqAim.NameOfProperty}\" должен быть выполнен; ";
                }
            }

            // Делаем недоступными квесты, если дочерние не выполнены
            var reqAimsChild = qwest.CompositeAims.Where(n => n.AimProperty.IsDoneProperty == false).ToList();

            if (reqAimsChild.Any())
            {
                return(false);

                isEnabled = false;
                foreach (var reqAim in reqAimsChild)
                {
                    reqwirements += $"Квест \"{reqAim.AimProperty.NameOfProperty}\" должен быть выполнен; ";
                }
            }

            // Прибавляем к этим скиллам все скиллы из его родительских квестов
            var allParrent = qwest.AllParrentAims.ToList();

            allParrent.Add(qwest);
            allParrent = allParrent.Distinct().ToList();
            var plusAbLinksOf = from linksOfTask in qwest.LinksOfTasks
                                from abiliti in pers.Abilitis
                                where
                                abiliti.NeedTasks
                                .Where(
                n =>
                n.TaskProperty == linksOfTask).Any(n => n.LevelProperty >= abiliti.CellValue &&
                                                   n.ToLevelProperty <= abiliti.CellValue)
                                select abiliti;



            // Проверка по связанным скиллам
            if (allParrent.All(n => n.AbilitiLinksOf.Union(plusAbLinksOf).All(q => !q.IsEnebledProperty)))
            {
                foreach (
                    var abilitiModel in
                    allParrent.SelectMany(q => q.AbilitiLinksOf).Where(n => n.IsEnebledProperty == false).ToList())
                {
                    return(false);

                    reqwirements += $"Навык \"{abilitiModel.NameOfProperty}\" должен быть активено; ";
                    isEnabled     = false;
                }
            }

            // Проверка по значениям требований скиллов
            StaticMetods.GetAbillsReq(qwest.NeedAbilities, ref reqwirements, ref isEnabled);

            // Проверка по значениям требований характеристик
            StaticMetods.GetCharactReq(qwest.NeedCharacts, ref reqwirements, ref isEnabled);

            // Проверка по скиллам
            GetSkillsReqvirements(qwest, pers, ref reqwirements, ref isEnabled);

            qwest.NotAllowReqwirements = reqwirements;

            if (qwest.IsAutoActiveProperty)
            {
                qwest.IsActiveProperty = true;
            }

            if (isEnabled == false)
            {
                qwest.IsActiveProperty = false;
            }

            return(qwest.IsActiveProperty);
        }