using Server.Items; namespace Server.Spells.Ninjitsu; public class FocusAttack : NinjaMove { public override int BaseMana => Core.ML ? 10 : 20; public override double RequiredSkill => Core.ML ? 30.0 : 60; // You prepare to focus all of your abilities into your next strike. public override TextDefinition AbilityMessage { get; } = 1063095; public override bool Validate(Mobile from) { var twoHanded = from.FindItemOnLayer(Layer.TwoHanded); if (twoHanded is BaseShield) { from.SendLocalizedMessage(1063096); // You cannot use this ability while holding a shield. return false; } var meleeWeapon = twoHanded is BaseWeapon and not BaseRanged || from.FindItemOnLayer(Layer.OneHanded) is BaseWeapon and not BaseRanged; if (meleeWeapon) { return base.Validate(from); } from.SendLocalizedMessage(1063097); // You must be wielding a melee weapon without a shield to use this ability. return false; } public override double GetDamageScalar(Mobile attacker, Mobile defender) { var ninjitsu = attacker.Skills.Ninjitsu.Value; return 1.0 + ninjitsu * ninjitsu / 43636; } public override double GetPropertyBonus(Mobile attacker) { var ninjitsu = attacker.Skills.Ninjitsu.Value; var bonus = ninjitsu * ninjitsu / 43636; return 1.0 + (bonus * 3 + 0.01); } public override bool OnBeforeDamage(Mobile attacker, Mobile defender) => Validate(attacker) && CheckMana(attacker, true); public override void OnHit(Mobile attacker, Mobile defender, int damage) { ClearCurrentMove(attacker); attacker.SendLocalizedMessage(1063098); // You focus all of your abilities and strike with deadly force! attacker.PlaySound(0x510); CheckGain(attacker); } }