/// <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)); }
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); }
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); }