using System; using System.Collections; using Server.Network; using Server.Items; using Server.Mobiles; using Server.Targeting; using Server.SkillHandlers; namespace Server.Spells.Ninjitsu { public class Backstab : NinjaMove { public Backstab() { } public override int BaseMana{ get{ return 30; } } public override double RequiredSkill{ get{ return Core.ML ? 40.0 : 20.0; } } public override TextDefinition AbilityMessage{ get{ return new TextDefinition( 1063089 ); } } // You prepare to Backstab your opponent. public override double GetDamageScalar( Mobile attacker, Mobile defender ) { double ninjitsu = attacker.Skills[SkillName.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 ) { bool valid = Validate( attacker ) && CheckMana( attacker, true ); if( valid ) { attacker.BeginAction( typeof( Stealth ) ); Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), delegate { attacker.EndAction( typeof( Stealth ) ); } ); } return valid; } public override bool ValidatesDuringHit { get { return false; } } 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(); } } }