public double GetValueGain(double experience, double levelLimit = 0) { CharacterAbilityBase copy = MakeCopy(); copy.AddExperience(experience, levelLimit); return(copy.Value - Value); }
public virtual double GetAbilityMaximumFromReading(Ability ability) { CharacterAbilityBase charAbility = GetAbility(ability).MakeCopy(); double value = charAbility.Value; var books = GetReadableBooksFromCollection(ability); IBook summa = books.Where(b => b.Level < 1000).OrderBy(b => b.Level).FirstOrDefault(); if (summa != null && summa.Level > value) { charAbility.AddExperience(1000, summa.Level); } foreach (IBook book in books.Where(b => b.Level == 1000)) { charAbility.AddExperience(book.Quality); } return(charAbility.Value); }
public virtual void ReadBook(IBook book) { Log.Add("Reading " + book.Title); CharacterAbilityBase ability = GetAbility(book.Topic); bool previouslyRead = _booksRead.Contains(book); if (!previouslyRead || (book.Level != 1000 && ability.Value < book.Level)) { ability.AddExperience(book.Quality, book.Level); } if (!previouslyRead) { _booksRead.Add(book); } }
public override void Act(Character character) { Magus mage = ConfirmCharacterIsMage(character); // determine the amount of vis needed CharacterAbilityBase charAbility = mage.GetAbility(Art); double visNeeded = 0.5 + (charAbility.Value / 10.0); // decrement the used vis mage.UseVis(Art, visNeeded); // add experience ushort roll = Die.Instance.RollExplodingDie(); double aura = mage.Covenant != null && mage.Covenant.Aura != null ? mage.Covenant.Aura.Strength : 0; double gain = roll + aura; character.Log.Add("Studying " + visNeeded.ToString("0.000") + " pawns of " + Art.AbilityName + " vis."); character.Log.Add("Gained " + gain + " experience."); charAbility.AddExperience(gain); }