using System; using Server.SkillHandlers; namespace Server.Spells.Ninjitsu; public class Backstab : NinjaMove { public override int BaseMana => 30; public override double RequiredSkill => Core.ML ? 40.0 : 20.0; // You prepare to Backstab your opponent. public override TextDefinition AbilityMessage { get; } = 1063089; public override bool ValidatesDuringHit => false; public override double GetDamageScalar(Mobile attacker, Mobile defender) { var ninjitsu = attacker.Skills.Ninjitsu.Value; return 1.0 + ninjitsu / 360 + Tracking.GetStalkingBonus(attacker, defender) / 100; } public override bool Validate(Mobile from) { if (!from.Hidden || from.AllowedStealthSteps <= 0) { from.SendLocalizedMessage(1063087); // You must be in stealth mode to use this ability. return false; } return base.Validate(from); } public override bool OnBeforeSwing(Mobile attacker, Mobile defender) { var valid = Validate(attacker) && CheckMana(attacker, true); if (valid) { attacker.BeginAction(); Timer.StartTimer(TimeSpan.FromSeconds(5.0), attacker.EndAction); } return valid; } public override void OnHit(Mobile attacker, Mobile defender, int damage) { // Validates before swing ClearCurrentMove(attacker); attacker.SendLocalizedMessage(1063090); // You quickly stab your opponent as you come out of hiding! defender.FixedParticles(0x37B9, 1, 5, 0x251D, 0x651, 0, EffectLayer.Waist); attacker.RevealingAction(); CheckGain(attacker); } public override void OnMiss(Mobile attacker, Mobile defender) { ClearCurrentMove(attacker); attacker.SendLocalizedMessage(1063161); // You failed to properly use the element of surprise. attacker.RevealingAction(); } }