Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
172
Scripts/Mobiles/AI/Magical AI/MysticAI.cs
Normal file
172
Scripts/Mobiles/AI/Magical AI/MysticAI.cs
Normal file
@@ -0,0 +1,172 @@
|
||||
#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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user