public QuestRewardsCollection QuestRewards(string questId) { QuestRewardsCollection result = default(QuestRewardsCollection); Dictionary <string, QuestDefinition> knownQuests = Service.Get <QuestService>().knownQuests; if (knownQuests.ContainsKey(questId)) { QuestDefinition questDefinition = knownQuests[questId]; if ((bool)questDefinition.StartReward) { result.StartReward = questDefinition.StartReward.ToReward(); } if ((bool)questDefinition.CompleteReward) { result.CompleteReward = questDefinition.CompleteReward.ToReward(); } result.ObjectiveRewards = new Dictionary <string, Reward>(); if (questDefinition.ObjectiveRewards.Length > 0) { Quest activeQuest = Service.Get <QuestService>().ActiveQuest; if (activeQuest != null) { foreach (KeyValuePair <string, int> objectiveRewardIndex in activeQuest.ObjectiveRewardIndexes) { if (objectiveRewardIndex.Value >= 0 && objectiveRewardIndex.Value < questDefinition.ObjectiveRewards.Length) { result.ObjectiveRewards.Add(objectiveRewardIndex.Key, questDefinition.ObjectiveRewards[objectiveRewardIndex.Value].ToReward()); } } } } } return(result); }
public static QuestChangeResponse SetStatus(QuestStatus status, string questId, OfflineDatabase offlineDatabase, IOfflineDefinitionLoader offlineDefinitions) { QuestChangeResponse questChangeResponse = new QuestChangeResponse(); QuestStates questStates = offlineDatabase.Read <QuestStates>(); QuestStates.QuestState questState = null; int num = -1; for (int i = 0; i < questStates.Quests.Count; i++) { if (questStates.Quests[i].questId == questId) { questState = questStates.Quests[i]; num = i; break; } } QuestRewardsCollection questRewardsCollection = offlineDefinitions.QuestRewards(questId); Reward reward = null; if (questState == null) { reward = questRewardsCollection.StartReward; if (reward != null) { if (reward.isEmpty()) { reward = null; } else { offlineDefinitions.AddReward(reward, questChangeResponse); } } questState = new QuestStates.QuestState(); questState.questId = questId; } if (status == QuestStatus.ACTIVE) { for (int i = 0; i < questStates.Quests.Count; i++) { if (questStates.Quests[i].status == QuestStatus.ACTIVE) { questStates.Quests[i].status = QuestStatus.SUSPENDED; } } if (questState.status == QuestStatus.COMPLETED) { questState.completedObjectives.Clear(); } } if (status == QuestStatus.COMPLETED) { int timesCompleted = questState.timesCompleted; if (timesCompleted == 0) { questState.completedTime = DateTime.UtcNow; reward = questRewardsCollection.CompleteReward; if (reward != null) { if (reward.isEmpty()) { reward = null; } else { offlineDefinitions.AddReward(reward, questChangeResponse); } } } questState.timesCompleted = timesCompleted + 1; } questState.status = status; if (num >= 0) { questStates.Quests[num] = questState; } else { questStates.Quests.Add(questState); } offlineDatabase.Write(questStates); JsonService jsonService = Service.Get <JsonService>(); if (reward != null) { questChangeResponse.reward = jsonService.Deserialize <RewardJsonReader>(jsonService.Serialize(RewardJsonWritter.FromReward(reward))); } questChangeResponse.questId = questId; questChangeResponse.questStateCollection = new SignedResponse <QuestStateCollection> { Data = SetProgressOperation.GetQuestStateCollection(questStates, offlineDefinitions, includeComplete: false) }; return(questChangeResponse); }