예제 #1
0
 public static EffectException GetException(Ingredient ingredient, Effect effect)
 {
     return(exceptions.Find(e => e.ingredient == ingredient.name && e.effect == effect.name));
 }
예제 #2
0
 float GetPoisonerPerk(Effect effect)
 {
     return(!effect.beneficial && poisonerPerk && HighestValueEffect.poisonous ? 25.0f : 0);
 }
예제 #3
0
        float GetRelativeValue(Effect effect)
        {
            #region magnitude
            float mag = effect.baseMag;
            if (effect.powerAffectsMagnitude)
            {
                mag  = effect.baseMag;
                mag *= fAlchemyIngredientInitMult;
                mag *= (1.0f + (fAlchemySkillFactor - 1.0f) * (alchemySkill / 100.0f)); //* (1.0f + (alchemySkill / 200.0f))
                mag *= (1.0f + fortifyAlchemy / 100.0f);
                mag *= (1.0f + alchemistPerk / 100.0f);
                mag *= (1.0f + GetPhysicianPerk(effect) / 100.0f);
                mag *= (1.0f + (seekerOfShadows ? 10.0f : 0) / 100.0f);
            }
            //apply exception
            IEnumerable <EffectException> exceptions = this.exceptions.Where(e => e.effect == effect.name);
            if (exceptions != null && exceptions.Count() > 0)
            {
                float multiplier = exceptions.Max(e => e.magnitude);
                if (multiplier == 1)
                {
                    multiplier = exceptions.Min(e => e.magnitude);
                }
                mag *= multiplier;
            }
            #endregion

            #region duration
            float durCalcFactor = 1.0f;
            if (effect.baseDur == 0 || effect.baseDur < 0)
            {
                durCalcFactor = 1.0f;
            }
            if (effect.powerAffectsDuration)
            {
                durCalcFactor = fAlchemyIngredientInitMult *
                                (1.0f + (fAlchemySkillFactor - 1.0f) * (float)alchemySkill / 100.0f) *
                                (1.0f + (float)fortifyAlchemy / 100.0f) *
                                (1.0f + (float)alchemistPerk / 100.0f) *
                                (1.0f + GetPhysicianPerk(effect) / 100.0f);
            }
            float dur = effect.baseDur * durCalcFactor;
            #endregion

            float magnitudeFactor = 1.0f,
                  durationFactor  = 1.0f;
            if (mag > 0)
            {
                magnitudeFactor = mag;
            }
            if (dur > 0)
            {
                durationFactor = dur / 10.0f;
            }
            float value = effect.baseCost * (float)Math.Pow(magnitudeFactor * durationFactor, 1.1);

            //apply exception
            if (exceptions != null && exceptions.Count() > 0)
            {
                float multiplier = exceptions.Max(e => e.value);
                if (multiplier == 1)
                {
                    multiplier = exceptions.Min(e => e.value);
                }
                value *= multiplier;
            }
            return(value);
        }
예제 #4
0
 float GetBenefactorPerk(Effect effect)
 {
     return(effect.beneficial && benefactorPerk && HighestValueEffect.beneficial ? 25.0f : 0);
 }