Example #1
0
        private void HandleVisUse(Magus mage, CharacterAbilityBase charAbility, double remainingTotal, double desire, ConsideredActions alreadyConsidered, IList<string> log )
        {
            // see if the mage has enough vis of this type
            double stockpile = mage.GetVisCount(charAbility.Ability);
            double visNeed = 0.5 + (charAbility.Value / 10.0);
            double baseDesire = desire * charAbility.GetValueGain(mage.VisStudyRate) / remainingTotal;
            // if so, assume vis will return an average of 6XP + aura
            if (stockpile > visNeed)
            {
                log.Add("Studying vis for " + charAbility.Ability.AbilityName + " worth " + baseDesire.ToString("0.00"));
                VisStudying visStudy = new VisStudying(charAbility.Ability, baseDesire);
                alreadyConsidered.Add(visStudy);
                // TODO: how do we decrement the cost of the vis?
            }
            else if(baseDesire > 0.01 && (DueDate == null || DueDate > 1))
            {
                // only try to extract the vis now if there's sufficient time to do so
                List<Ability> visType = new List<Ability>();
                visType.Add(charAbility.Ability);
                VisCondition visCondition = new VisCondition(visType, visNeed - stockpile, baseDesire, (byte)(Tier + 1), DueDate == null ? null : DueDate - 1);
                visCondition.ModifyActionList(mage, alreadyConsidered, log);
                if(baseDesire > 0.04 && (DueDate == null || DueDate > 4))
                {
                    // we have enough time and interest to consider finding a new aura and building a new lab in it

                }
            }
        }
Example #2
0
        public void ModifyActionList(Character character, ConsideredActions alreadyConsidered, IList<string> log)
        {
            if (character.GetType() == typeof(Magus))
            {
                Magus mage = (Magus)character;
                Desire = CalculateDesire(mage);
                double visNeed = character.SeasonalAge / 20.0;
                VisCondition visCondition = new VisCondition(_artsRequired, visNeed, Desire, Tier, DueDate == null ? null : DueDate - 1);

                bool visComplete = visCondition.IsComplete(character);
                bool labComplete = _hasLabCondition.IsComplete(character);

                if (!visComplete)
                {
                    visCondition.ModifyActionList(character, alreadyConsidered, log);
                }
                if (!labComplete)
                {
                    _hasLabCondition.Desire = Desire;
                    _hasLabCondition.ModifyActionList(character, alreadyConsidered, log);
                }
                if (visComplete && labComplete)
                {
                    //effectively, every five points of lab total is worth a decade of effectiveness
                    double dueDateDesire = Desire / (Tier + 1);
                    if (DueDate != null)
                    {
                        if (DueDate == 0)
                        {
                            log.Add("Not enough time to perform longevity ritual");
                            return;
                        }
                        dueDateDesire /= (double)DueDate;
                    }
                    if (DueDate == null || DueDate < 4)
                    {
                        log.Add("Performing longevity ritual worth " + dueDateDesire.ToString("0.00"));
                        alreadyConsidered.Add(new LongevityRitual(Abilities.MagicTheory, dueDateDesire));
                    }
                    double labTotalDesire = mage.GetLabTotal(MagicArtPairs.CrVi, Activity.DistillVis) * 8;
                    if (DueDate != null)
                    {
                        labTotalDesire /= (double)DueDate;
                    }
                    // every point of lab total is effectively two years
                    LongevityRitualAbilitiesHelper helper =
                        new LongevityRitualAbilitiesHelper(labTotalDesire, (byte)(Tier + 1), DueDate == null ? null : DueDate - 1);
                    helper.ModifyActionList(character, alreadyConsidered, log);
                }
            }
        }
Example #3
0
 public void ModifyVisNeeds(Character character, VisDesire[] desires)
 {
     double visNeed = character.SeasonalAge / 20.0;
     VisCondition visCondition = new VisCondition(_artsRequired, visNeed, Desire, Tier, DueDate == null ? null : DueDate - 1);
     visCondition.ModifyVisNeeds(character, desires);
 }
Example #4
0
 public IList<BookDesire> GetBookNeeds(Character character)
 {
     if(!IsComplete(character))
     {
         List<BookDesire> booksDesired = new List<BookDesire>();
         var bookNeeds = _hasLabCondition.GetBookNeeds(character);
         if (bookNeeds != null)
         {
             booksDesired.AddRange(bookNeeds);
         }
         double visNeed = character.SeasonalAge / 20.0;
         VisCondition visCondition = new VisCondition(_artsRequired, visNeed, Desire, Tier, DueDate == null ? null : DueDate - 1);
         if (!visCondition.IsComplete(character))
         {
             bookNeeds = visCondition.GetBookNeeds(character);
             if (bookNeeds != null)
             {
                 booksDesired.AddRange(bookNeeds);
             }
         }
         return booksDesired;
     }
     return null;
 }