public Quest(QuestAsRead toCopy) { Name = toCopy.Name; QuestType = toCopy.QuestType; LevelRequirement = toCopy.LevelRequirement; World = toCopy.World; UniqueID = toCopy.UniqueID; DiscoveredConditions = toCopy.DiscoveredConditions; AvailableConditions = toCopy.AvailableConditions; Reward = toCopy.Reward; GUID = toCopy.GUID; ObjectivesAsRead = toCopy.ObjectivesAsRead; Subquests = new List <Quest>(); if (ObjectivesAsRead != null) { foreach (QuestObjective qo in ObjectivesAsRead) { Subquests.Add(FromObjective(qo)); } } SubquestsAsRead = toCopy.SubquestsAsRead; if (SubquestsAsRead != null) { foreach (QuestAsRead sub in SubquestsAsRead) { Subquests.Add(new Quest(sub)); } } _status = QuestStatusState.NotFound; Done = false; DiscoverPrompt = toCopy.DiscoverPrompt; AutomaticConditions = toCopy.AutomaticConditions; StrictConditions = toCopy.StrictConditions; HideConditions = toCopy.HideConditions; }
private bool CheckCondition(QuestGUIDState hc) { QuestStatusState CurrentStatus = Statuses[GUIDToUniqueID[hc.Value]]; QuestStatusState StatusForBeingAvailable = hc.ActiveState; if (CurrentStatus >= StatusForBeingAvailable) { return(true); } return(false); }
private bool DetermineIfAvailable(Quest q) { if (q.Status == QuestStatusState.Success) { return(true); } if (!onlyAccessible) { return(true); } if (q.QuestType == "event" && !includeEvents) { return(false); } if (q.AvailableConditions.Count == 0) { return(true); } if (q.HideConditions != null) { if (AnyStatesAreMet(q.HideConditions)) { return(false); } } bool AllAreMet = true; //if all are met, then this condition is met foreach (QuestCondition qc in q.AvailableConditions) { bool ThisConditionMet = false; //if any are met, then this condition is met if (AnyStatesAreMet(qc.GUIDStates)) { if (q.QuestType == "race") { ThisConditionMet = includeRaces; } if (q.QuestType == "treasure") { ThisConditionMet = includeTreasure; } else { ThisConditionMet = true; } } AllAreMet = AllAreMet && ThisConditionMet; } foreach (QuestCondition qc in q.StrictConditions) { bool ThisConditionMet = false; //if any are met, then this condition is met foreach (QuestGUIDState qs in qc.GUIDStates) { QuestStatusState CurrentStatus = Statuses[GUIDToUniqueID[qs.Value]]; QuestStatusState StatusForBeingAvailable = qs.ActiveState; if (CurrentStatus >= StatusForBeingAvailable) { if (q.QuestType == "event") { ThisConditionMet = includeEvents; } else if (q.QuestType == "race") { ThisConditionMet = includeRaces; } else if (q.QuestType == "treasure") { ThisConditionMet = includeTreasure; } else { ThisConditionMet = true; } } } AllAreMet = AllAreMet && ThisConditionMet; } //if any are NOT met, then the quest is not available return(AllAreMet); }