Exemple #1
0
        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);
        }
Exemple #2
0
    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);
    }