#region References using Server.Spells; using Server.Spells.Mysticism; #endregion namespace Server.Mobiles { public class MysticAI : MageAI { public override SkillName CastSkill { get { return SkillName.Mysticism; } } public override bool UsesMagery { get { return m_Mobile.Skills[SkillName.Magery].Base >= 20.0 && !m_Mobile.Controlled; } } public MysticAI(BaseCreature m) : base(m) { } public override Spell GetRandomDamageSpell() { if (UsesMagery && 0.5 > Utility.RandomDouble()) { return base.GetRandomDamageSpell(); } var mana = m_Mobile.Mana; var select = 1; if (mana >= 50) select = 5; else if (mana >= 20) select = 3; else if (mana >= 9) select = 2; switch (Utility.Random(select)) { case 0: return new NetherBoltSpell(m_Mobile, null); case 1: return new EagleStrikeSpell(m_Mobile, null); case 2: return new BombardSpell(m_Mobile, null); case 3: return new HailStormSpell(m_Mobile, null); case 4: return new NetherCycloneSpell(m_Mobile, null); } return null; } public override Spell GetRandomCurseSpell() { if (UsesMagery && 0.5 > Utility.RandomDouble()) { return base.GetRandomCurseSpell(); } var mana = m_Mobile.Mana; var select = 1; if (mana >= 40) select = 4; else if (mana >= 14) select = 3; else if (mana >= 8) select = 2; switch (Utility.Random(select)) { case 0: return new PurgeMagicSpell(m_Mobile, null); case 1: return new SleepSpell(m_Mobile, null); case 2: return new MassSleepSpell(m_Mobile, null); case 3: return new SpellPlagueSpell(m_Mobile, null); } return null; } public override Spell GetHealSpell() { if (UsesMagery && 0.5 > Utility.RandomDouble()) { return base.GetHealSpell(); } if (m_Mobile.Mana >= 20) return new CleansingWindsSpell(m_Mobile, null); return null; } public override Spell GetCureSpell() { if (UsesMagery) { return base.GetCureSpell(); } return null; } public override Spell GetRandomBuffSpell() { if (UsesMagery) { return base.GetRandomBuffSpell(); } return null; } public override Spell RandomCombatSpell() { var spell = CheckCastHealingSpell(); if (spell != null) return spell; switch (Utility.Random(6)) { case 0: // Curse { m_Mobile.DebugSay("Cursing Thou!"); spell = GetRandomCurseSpell(); break; } case 1: case 2: case 3: case 4: case 5: // damage { m_Mobile.DebugSay("Just doing damage"); spell = GetRandomDamageSpell(); } break; } return spell; } protected override bool ProcessTarget() { var t = m_Mobile.Target; if (t == null) return false; if (t is HailStormSpell.InternalTarget || t is NetherCycloneSpell.InternalTarget) { if (m_Mobile.Combatant != null && m_Mobile.InRange(m_Mobile.Combatant.Location, 8)) { t.Invoke(m_Mobile, m_Mobile.Combatant); } else t.Invoke(m_Mobile, m_Mobile); return true; } return base.ProcessTarget(); } } }