using System; using Server; using Server.Targeting; using Server.Items; namespace Server.Items { public class EnchantedWhetstone : Item { private int m_Uses; [CommandProperty( AccessLevel.GameMaster )] public int Uses { get { return m_Uses; } set { m_Uses = value; InvalidateProperties(); } } [Constructable] public EnchantedWhetstone() : base( 0x1F14 ) { Name = "an enchanted whetstone"; Hue = 1150; Weight = 1.0; m_Uses = 3; } public override void OnDoubleClick( Mobile from ) { if ( !IsChildOf( from.Backpack ) ) { from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. return; } from.SendMessage( "Target the weapon you wish to flawlessly repair." ); from.Target = new InternalTarget( this ); } public override void OnSingleClick( Mobile from ) { base.OnSingleClick( from ); this.LabelTo( from, String.Format( "[Charges: {0}]", m_Uses ) ); } private class InternalTarget : Target { private EnchantedWhetstone m_Stone; public InternalTarget( EnchantedWhetstone stone ) : base( 1, false, TargetFlags.None ) { m_Stone = stone; } protected override void OnTarget( Mobile from, object targeted ) { if ( m_Stone.Deleted ) return; if ( !m_Stone.IsChildOf( from.Backpack ) ) { from.SendLocalizedMessage( 1042001 ); return; } if ( targeted is BaseWeapon ) { BaseWeapon weapon = (BaseWeapon)targeted; if ( weapon.HitPoints >= weapon.MaxHitPoints ) { from.SendMessage( 33, "That weapon is already in perfect condition." ); return; } // Flawless repair without lowering maximum durability weapon.HitPoints = weapon.MaxHitPoints; from.PlaySound( 0x2A ); // Sharpening sound from.SendMessage( 63, "You flawlessly restore the weapon to its maximum durability!" ); m_Stone.Uses--; if ( m_Stone.Uses <= 0 ) { from.SendMessage( 33, "The enchanted whetstone crumbles to dust." ); m_Stone.Delete(); } } else { from.SendMessage( 33, "This whetstone can only be used on weapons." ); } } } public EnchantedWhetstone( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version writer.Write( (int) m_Uses ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); m_Uses = reader.ReadInt(); } } }