using System; using Server; using Server.Spells; namespace Server.ACC.CSS.Systems.Druid { public abstract class DruidSpell : CSpell { public DruidSpell(Mobile caster, Item scroll, SpellInfo info) : base(caster, scroll, info) { } public abstract SpellCircle Circle { get; } public override bool ClearHandsOnCast { get { return false; } } public override SkillName CastSkill { get { return SkillName.AnimalLore; } } public override SkillName DamageSkill { get { return SkillName.AnimalTaming; } } public override TimeSpan CastDelayBase { get { return TimeSpan.FromSeconds(3 * CastDelaySecondsPerTick); } } public override void GetCastSkills(out double min, out double max) { min = RequiredSkill; max = RequiredSkill + 30.0; } public override int GetMana() { return RequiredMana; } public override TimeSpan GetCastDelay() { return TimeSpan.FromSeconds(CastDelay); } public virtual bool CheckResisted(Mobile target) { double n = GetResistPercent(target); n /= 100.0; if (n <= 0.0) return false; if (n >= 1.0) return true; int maxSkill = (1 + (int)Circle) * 10; //int maxSkill = 40; maxSkill += (1 + ((int)Circle / 6)) * 25; //maxSkill += (1 + (4 / 6)) * 25; if (target.Skills[SkillName.MagicResist].Value < maxSkill) target.CheckSkill(SkillName.MagicResist, 0.0, 120.0); return (n >= Utility.RandomDouble()); } public virtual double GetResistPercent(Mobile target) { return GetResistPercentForCircle(target, Circle); //return GetResistPercentForCircle(target, SpellCircle.Fourth); } public virtual double GetResistPercentForCircle(Mobile target, SpellCircle circle) { double firstPercent = target.Skills[SkillName.MagicResist].Value / 5.0; double secondPercent = target.Skills[SkillName.MagicResist].Value - (((Caster.Skills[CastSkill].Value - 20.0) / 5.0) + (1 + (int)circle) * 5.0); return (firstPercent > secondPercent ? firstPercent : secondPercent) / 2.0; // Seems should be about half of what stratics says. } } }