ModernUO/Scripts/Items/Weapons/Abilities/Disarm.cs
2009-06-28 03:36:42 +00:00

84 lines
No EOL
2.3 KiB
C#

using System;
namespace Server.Items
{
/// <summary>
/// This attack allows you to disarm your foe.
/// Now in Age of Shadows, a successful Disarm leaves the victim unable to re-arm another weapon for several seconds.
/// </summary>
public class Disarm : WeaponAbility
{
public Disarm()
{
}
public override int BaseMana{ get{ return 20; } }
// No longer active in pub21:
/*public override bool CheckSkills( Mobile from )
{
if ( !base.CheckSkills( from ) )
return false;
if ( !(from.Weapon is Fists) )
return true;
Skill skill = from.Skills[SkillName.ArmsLore];
if ( skill != null && skill.Base >= 80.0 )
return true;
from.SendLocalizedMessage( 1061812 ); // You lack the required skill in armslore to perform that attack!
return false;
}*/
public override bool RequiresTactics( Mobile from )
{
BaseWeapon weapon = from.Weapon as BaseWeapon;
if ( weapon == null )
return false;
return weapon.Skill != SkillName.Wrestling;
}
public static readonly TimeSpan BlockEquipDuration = TimeSpan.FromSeconds( 5.0 );
public override void OnHit( Mobile attacker, Mobile defender, int damage )
{
if ( !Validate( attacker ) )
return;
ClearCurrentAbility( attacker );
Item toDisarm = defender.FindItemOnLayer( Layer.OneHanded );
if ( toDisarm == null || !toDisarm.Movable )
toDisarm = defender.FindItemOnLayer( Layer.TwoHanded );
Container pack = defender.Backpack;
if ( pack == null || (toDisarm != null && !toDisarm.Movable) )
{
attacker.SendLocalizedMessage( 1004001 ); // You cannot disarm your opponent.
}
else if (toDisarm == null || toDisarm is BaseShield || toDisarm is Spellbook && !Core.ML )
{
attacker.SendLocalizedMessage( 1060849 ); // Your target is already unarmed!
}
else if ( CheckMana( attacker, true ) )
{
attacker.SendLocalizedMessage( 1060092 ); // You disarm their weapon!
defender.SendLocalizedMessage( 1060093 ); // Your weapon has been disarmed!
defender.PlaySound( 0x3B9 );
defender.FixedParticles( 0x37BE, 232, 25, 9948, EffectLayer.LeftHand );
pack.DropItem( toDisarm );
BaseWeapon.BlockEquip( defender, BlockEquipDuration );
}
}
}
}