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)); }
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); }
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); }); }
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)); }
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); }
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; } }
public override void AfterCriteriaTreeUpdate(CriteriaTree tree, Player referencePlayer) { }
public bool CriteriaTreeHasCriteriaWithType(CriteriaTree tree, IEnumerable <CriteriaType> types) { return((tree.Criteria != null && types.Contains(tree.Criteria.Type)) || tree.Children.Any(child => CriteriaTreeHasCriteriaWithType(child, types))); }
public bool CriteriaTreeHasChildCriteriaType(CriteriaTree criteriaTree, CriteriaType type) { return((criteriaTree.Criteria != null && criteriaTree.Criteria.Type == type) || criteriaTree.Children.Any(child => CriteriaTreeHasChildCriteriaType(child, type))); }
public bool CriteriaTreeHasChildCriteriaId(CriteriaTree criteriaTree, uint criteriaId) { return(criteriaTree.Children.Any(child => child.CriteriaId == criteriaId) || criteriaTree.Children.Any(child => CriteriaTreeHasChildCriteriaId(child, criteriaId))); }
public bool CriteriaTreeHasChildCriteriaTreeDescription(CriteriaTree criteriaTree, string description) { return(criteriaTree.Children.Any(child => child.Description.ToLower().Contains(description)) || criteriaTree.Children.Any(child => CriteriaTreeHasChildCriteriaTreeDescription(child, description))); }