Esempio n. 1
0
        /// <summary>
        /// Gets final chance value based on caster level and effect settings.
        /// </summary>
        /// <returns>Chance value.</returns>
        public int ChanceValue()
        {
            int casterLevel = (caster) ? FormulaHelper.CalculateCasterLevel(caster.Entity, this) : 1;

            //Debug.LogFormat("{5} ChanceValue {0} = base + plus * (level/chancePerLevel) = {1} + {2} * ({3}/{4})", settings.ChanceBase + settings.ChancePlus * (int)Mathf.Floor(casterLevel / settings.ChancePerLevel), settings.ChanceBase, settings.ChancePlus, casterLevel, settings.ChancePerLevel, Key);
            return(settings.ChanceBase + settings.ChancePlus * (int)Mathf.Floor(casterLevel / settings.ChancePerLevel));
        }
Esempio n. 2
0
        void SetDuration()
        {
            int casterLevel = (caster) ? FormulaHelper.CalculateCasterLevel(caster.Entity, this) : 1;

            if (Properties.SupportDuration)
            {
                // Multiplier clamped at 1 or player can lose a round depending on spell settings and level
                int durationPerLevelMultiplier = (int)Mathf.Floor(casterLevel / settings.DurationPerLevel);
                if (durationPerLevelMultiplier < 1)
                {
                    durationPerLevelMultiplier = 1;
                }
                roundsRemaining = settings.DurationBase + settings.DurationPlus * durationPerLevelMultiplier;
            }
            else
            {
                roundsRemaining = 0;
            }

            //Debug.LogFormat("Effect '{0}' will run for {1} magic rounds", Key, roundsRemaining);
        }
Esempio n. 3
0
        protected int GetMagnitude(DaggerfallEntityBehaviour caster = null)
        {
            if (caster == null)
            {
                Debug.LogWarningFormat("GetMagnitude() for {0} has no caster. Using caster level 1 for magnitude.", Properties.Key);
            }

            if (manager == null)
            {
                Debug.LogWarningFormat("GetMagnitude() for {0} has no parent manager.", Properties.Key);
            }

            int magnitude = 0;

            if (Properties.SupportMagnitude)
            {
                int casterLevel   = (caster) ? FormulaHelper.CalculateCasterLevel(caster.Entity, this) : 1;
                int baseMagnitude = UnityEngine.Random.Range(settings.MagnitudeBaseMin, settings.MagnitudeBaseMax + 1);
                int plusMagnitude = UnityEngine.Random.Range(settings.MagnitudePlusMin, settings.MagnitudePlusMax + 1);
                int multiplier    = (int)Mathf.Floor(casterLevel / settings.MagnitudePerLevel);
                magnitude = baseMagnitude + plusMagnitude * multiplier;
            }

            int initialMagnitude = magnitude;

            if (ParentBundle.targetType != TargetTypes.CasterOnly)
            {
                magnitude = FormulaHelper.ModifyEffectAmount(this, manager.EntityBehaviour.Entity, magnitude);
            }

            // Output "Save versus spell made." when magnitude is fully reduced to 0 by saving throw
            if (initialMagnitude > 0 && magnitude == 0)
            {
                DaggerfallUI.AddHUDText(TextManager.Instance.GetLocalizedText("saveVersusSpellMade"));
            }

            return(magnitude);
        }