Пример #1
0
        public override bool CanCompleteCriteriaTree(CriteriaTree tree)
        {
            ScenarioStepRecord step = tree.ScenarioStep;

            if (step == null)
            {
                return(false);
            }

            if (step.ScenarioID != _data.Entry.Id)
            {
                return(false);
            }

            if (step.IsBonusObjective())
            {
                return(!IsComplete());
            }

            if (step != GetStep())
            {
                return(false);
            }

            return(true);
        }
        public override bool CanUpdateCriteriaTree(Criteria criteria, CriteriaTree tree, Player referencePlayer)
        {
            QuestObjective objective = tree.QuestObjective;

            if (objective == null)
            {
                return(false);
            }

            if (HasCompletedObjective(objective))
            {
                Log.outTrace(LogFilter.Player, $"QuestObjectiveCriteriaMgr.CanUpdateCriteriaTree: (Id: {criteria.Id} Type {criteria.Entry.Type} Quest Objective {objective.Id}) Objective already completed");
                return(false);
            }

            if (_owner.GetQuestStatus(objective.QuestID) != QuestStatus.Incomplete)
            {
                Log.outTrace(LogFilter.Achievement, $"QuestObjectiveCriteriaMgr.CanUpdateCriteriaTree: (Id: {criteria.Id} Type {criteria.Entry.Type} Quest Objective {objective.Id}) Not on quest");
                return(false);
            }

            Quest quest = Global.ObjectMgr.GetQuestTemplate(objective.QuestID);

            if (_owner.GetGroup() && _owner.GetGroup().IsRaidGroup() && !quest.IsAllowedInRaid(referencePlayer.GetMap().GetDifficultyID()))
            {
                Log.outTrace(LogFilter.Achievement, $"QuestObjectiveCriteriaMgr.CanUpdateCriteriaTree: (Id: {criteria.Id} Type {criteria.Entry.Type} Quest Objective {objective.Id}) Quest cannot be completed in raid group");
                return(false);
            }

            return(base.CanUpdateCriteriaTree(criteria, tree, referencePlayer));
        }
Пример #3
0
        public override bool CanUpdateCriteriaTree(Criteria criteria, CriteriaTree tree, Player referencePlayer)
        {
            ScenarioStepRecord step = tree.ScenarioStep;

            if (step == null)
            {
                return(false);
            }

            if (step.ScenarioID != _data.Entry.Id)
            {
                return(false);
            }

            ScenarioStepRecord currentStep = GetStep();

            if (currentStep == null)
            {
                return(false);
            }

            if (step.IsBonusObjective())
            {
                return(true);
            }

            return(currentStep == step);
        }
Пример #4
0
        public void Add(CriteriaTree criteriaTree)
        {
            if (CriteriaTrees.ContainsKey(criteriaTree.Id))
            {
                return;
            }

            CriteriaTrees.Add(criteriaTree.Id, criteriaTree);
        }
        public override void CompletedCriteriaTree(CriteriaTree tree, Player referencePlayer)
        {
            QuestObjective objective = tree.QuestObjective;

            if (objective == null)
            {
                return;
            }

            CompletedObjective(objective, referencePlayer);
        }
        public override bool CanCompleteCriteriaTree(CriteriaTree tree)
        {
            QuestObjective objective = tree.QuestObjective;

            if (objective == null)
            {
                return(false);
            }

            return(base.CanCompleteCriteriaTree(tree));
        }
        public void ResetCriteriaTree(uint criteriaTreeId)
        {
            CriteriaTree tree = Global.CriteriaMgr.GetCriteriaTree(criteriaTreeId);

            if (tree == null)
            {
                return;
            }

            CriteriaManager.WalkCriteriaTree(tree, criteriaTree =>
            {
                RemoveCriteriaProgress(criteriaTree.Criteria);
            });
        }
Пример #8
0
        public override bool CanUpdateCriteriaTree(Criteria criteria, CriteriaTree tree, Player referencePlayer)
        {
            QuestObjective objective = tree.QuestObjective;

            if (objective == null)
            {
                return(false);
            }

            if (HasCompletedObjective(objective))
            {
                Log.outTrace(LogFilter.Player, "QuestObjectiveCriteriaMgr.CanUpdateCriteriaTree: (Id: {criteria.ID} Type {criteria.Entry.Type} Quest Objective {objective.ID}) Objective already completed");
                return(false);
            }

            return(base.CanUpdateCriteriaTree(criteria, tree, referencePlayer));
        }
Пример #9
0
        public override void CompletedCriteriaTree(CriteriaTree tree, Player referencePlayer)
        {
            ScenarioStepRecord step = tree.ScenarioStep;

            if (step == null)
            {
                return;
            }

            if (!step.IsBonusObjective() && step != GetStep())
            {
                return;
            }

            if (GetStepState(step) == ScenarioStepState.Done)
            {
                return;
            }

            SetStepState(step, ScenarioStepState.Done);
            CompleteStep(step);
        }
Пример #10
0
        public void LoadDB2Data()
        {
            _scenarioData.Clear();

            Dictionary <uint, Dictionary <byte, ScenarioStepRecord> > scenarioSteps = new Dictionary <uint, Dictionary <byte, ScenarioStepRecord> >();
            uint deepestCriteriaTreeSize = 0;

            foreach (ScenarioStepRecord step in CliDB.ScenarioStepStorage.Values)
            {
                if (!scenarioSteps.ContainsKey(step.ScenarioID))
                {
                    scenarioSteps[step.ScenarioID] = new Dictionary <byte, ScenarioStepRecord>();
                }

                scenarioSteps[step.ScenarioID][step.OrderIndex] = step;
                CriteriaTree tree = Global.CriteriaMgr.GetCriteriaTree(step.CriteriaTreeId);
                if (tree != null)
                {
                    uint criteriaTreeSize = 0;
                    CriteriaManager.WalkCriteriaTree(tree, treeFunc =>
                    {
                        ++criteriaTreeSize;
                    });
                    deepestCriteriaTreeSize = Math.Max(deepestCriteriaTreeSize, criteriaTreeSize);
                }
            }

            //ASSERT(deepestCriteriaTreeSize < MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE, "MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE must be at least {0}", deepestCriteriaTreeSize + 1);

            foreach (ScenarioRecord scenario in CliDB.ScenarioStorage.Values)
            {
                ScenarioData data = new ScenarioData();
                data.Entry = scenario;
                data.Steps = scenarioSteps.LookupByKey(scenario.Id);
                _scenarioData[scenario.Id] = data;
            }
        }
Пример #11
0
 public override void AfterCriteriaTreeUpdate(CriteriaTree tree, Player referencePlayer)
 {
 }
Пример #12
0
 public bool CriteriaTreeHasCriteriaWithType(CriteriaTree tree, IEnumerable <CriteriaType> types)
 {
     return((tree.Criteria != null && types.Contains(tree.Criteria.Type)) ||
            tree.Children.Any(child => CriteriaTreeHasCriteriaWithType(child, types)));
 }
Пример #13
0
 public bool CriteriaTreeHasChildCriteriaType(CriteriaTree criteriaTree, CriteriaType type)
 {
     return((criteriaTree.Criteria != null && criteriaTree.Criteria.Type == type) ||
            criteriaTree.Children.Any(child => CriteriaTreeHasChildCriteriaType(child, type)));
 }
Пример #14
0
 public bool CriteriaTreeHasChildCriteriaId(CriteriaTree criteriaTree, uint criteriaId)
 {
     return(criteriaTree.Children.Any(child => child.CriteriaId == criteriaId) ||
            criteriaTree.Children.Any(child => CriteriaTreeHasChildCriteriaId(child, criteriaId)));
 }
Пример #15
0
 public bool CriteriaTreeHasChildCriteriaTreeDescription(CriteriaTree criteriaTree, string description)
 {
     return(criteriaTree.Children.Any(child => child.Description.ToLower().Contains(description)) ||
            criteriaTree.Children.Any(child => CriteriaTreeHasChildCriteriaTreeDescription(child, description)));
 }