91 lines
2.3 KiB
C#
91 lines
2.3 KiB
C#
using System;
|
||
|
||
namespace Server.Spells.Mysticism
|
||
{
|
||
public abstract class MysticSpell : Spell
|
||
{
|
||
public abstract double RequiredSkill { get; }
|
||
public abstract int RequiredMana { get; }
|
||
|
||
public override SkillName CastSkill => SkillName.Mysticism;
|
||
|
||
/*
|
||
* As per OSI Publish 64:
|
||
* Imbuing is not the only skill associated with Mysticism now.
|
||
* Players can use EITHER their Focus skill or Imbuing skill.
|
||
* Evaluate Intelligence no longer has any effect on a Mystic’s spell power.
|
||
*/
|
||
public override double GetDamageSkill( Mobile m )
|
||
{
|
||
return Math.Max( m.Skills[SkillName.Imbuing].Value, m.Skills[SkillName.Focus].Value );
|
||
}
|
||
|
||
public override int GetDamageFixed( Mobile m )
|
||
{
|
||
return Math.Max( m.Skills[SkillName.Imbuing].Fixed, m.Skills[SkillName.Focus].Fixed );
|
||
}
|
||
|
||
public MysticSpell( Mobile caster, Item scroll, SpellInfo info )
|
||
: base( caster, scroll, info )
|
||
{
|
||
}
|
||
|
||
public override void GetCastSkills( out double min, out double max )
|
||
{
|
||
// As per Mysticism page at the UO Herald Playguide
|
||
// This means that we have 25% success chance at min Required Skill
|
||
|
||
min = RequiredSkill - 12.5;
|
||
max = RequiredSkill + 37.5;
|
||
}
|
||
|
||
public override int GetMana()
|
||
{
|
||
return RequiredMana;
|
||
}
|
||
|
||
public override bool CheckCast()
|
||
{
|
||
if ( !base.CheckCast() )
|
||
return false;
|
||
|
||
int mana = ScaleMana( RequiredMana );
|
||
|
||
if ( Caster.Mana < mana )
|
||
{
|
||
Caster.SendLocalizedMessage( 1060174, mana.ToString() ); // You must have at least ~1_MANA_REQUIREMENT~ Mana to use this ability.
|
||
return false;
|
||
}
|
||
|
||
if ( Caster.Skills[CastSkill].Value < RequiredSkill )
|
||
{
|
||
Caster.SendLocalizedMessage( 1063013, $"{RequiredSkill.ToString("F1")}\t{CastSkill.ToString()}\t "); // You need at least ~1_SKILL_REQUIREMENT~ ~2_SKILL_NAME~ skill to use that ability.
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
public override void OnBeginCast()
|
||
{
|
||
base.OnBeginCast();
|
||
|
||
SendCastEffect();
|
||
}
|
||
|
||
public virtual void SendCastEffect()
|
||
{
|
||
Caster.FixedEffect( 0x37C4, 10, (int) ( GetCastDelay().TotalSeconds * 28 ), 0x66C, 3 );
|
||
}
|
||
|
||
public static double GetBaseSkill( Mobile m )
|
||
{
|
||
return m.Skills[SkillName.Mysticism].Value;
|
||
}
|
||
|
||
public static double GetBoostSkill( Mobile m )
|
||
{
|
||
return Math.Max( m.Skills[SkillName.Imbuing].Value, m.Skills[SkillName.Focus].Value );
|
||
}
|
||
}
|
||
}
|