Ejemplo n.º 1
0
        /// <summary>
        /// Uses a list of reward systems to add rewards to the quest builder
        /// that are commensurate with the difficulty of the quest.
        /// </summary>
        /// <param name="questBuilder">QuestBuilder to receive reward offers.</param>
        /// <param name="entity">Quest giver entity.</param>
        /// <param name="goal">Goal step (determines quest difficulty).</param>
        /// <param name="rewardsUIContents">Text to introduce rewards.</param>
        /// <param name="rewardSystems">Reward systems from which to get rewards.</param>
        protected virtual void AddRewards(QuestBuilder questBuilder, QuestEntity entity, PlanStep goal, List <QuestContent> rewardsUIContents, List <RewardSystem> rewardSystems)
        {
            if (QuestGenerator.detailedDebug)
            {
                Debug.Log("Quest Machine: [Generator] Checking " + rewardSystems.Count + " reward systems for " + goal.fact.count + " " + goal.fact.entityType.name +
                          " (level " + goal.fact.entityType.level + ") on " + entity.name, entity);
            }
            questBuilder.AddOfferContents(QuestContent.CloneList <QuestContent>(rewardsUIContents).ToArray());

            var pointsRemaining = goal.fact.entityType.level * goal.fact.count;

            for (int i = 0; i < rewardSystems.Count; i++)
            {
                var rewardSystem = rewardSystems[i];
                if (rewardSystem == null)
                {
                    continue;
                }
                if (UnityEngine.Random.value > rewardSystem.probability)
                {
                    continue;
                }
                pointsRemaining = rewardSystem.DetermineReward(pointsRemaining, questBuilder.quest, goal.fact.entityType);
                if (pointsRemaining <= 0)
                {
                    break;
                }
            }
        }