using System; using System.Collections.Generic; using Server.Mobiles; using Server.Network; using Server.Engines.Craft; using Server.Engines.Harvest; using Server.ContextMenus; namespace Server.Items { public interface IUsesRemaining { int UsesRemaining{ get; set; } bool ShowUsesRemaining{ get; set; } } public abstract class BaseHarvestTool : Item, IUsesRemaining, ICraftable { private Mobile m_Crafter; private ToolQuality m_Quality; private int m_UsesRemaining; [CommandProperty( AccessLevel.GameMaster )] public Mobile Crafter { get{ return m_Crafter; } set{ m_Crafter = value; InvalidateProperties(); } } [CommandProperty( AccessLevel.GameMaster )] public ToolQuality Quality { get{ return m_Quality; } set{ UnscaleUses(); m_Quality = value; InvalidateProperties(); ScaleUses(); } } [CommandProperty( AccessLevel.GameMaster )] public int UsesRemaining { get { return m_UsesRemaining; } set { m_UsesRemaining = value; InvalidateProperties(); } } public void ScaleUses() { m_UsesRemaining = (m_UsesRemaining * GetUsesScalar()) / 100; InvalidateProperties(); } public void UnscaleUses() { m_UsesRemaining = (m_UsesRemaining * 100) / GetUsesScalar(); } public int GetUsesScalar() { if ( m_Quality == ToolQuality.Exceptional ) return 200; return 100; } public bool ShowUsesRemaining{ get{ return true; } set{} } public abstract HarvestSystem HarvestSystem{ get; } public BaseHarvestTool( int itemID ) : this( 50, itemID ) { } public BaseHarvestTool( int usesRemaining, int itemID ) : base( itemID ) { m_UsesRemaining = usesRemaining; m_Quality = ToolQuality.Regular; } public override void GetProperties( ObjectPropertyList list ) { base.GetProperties( list ); if ( m_Quality == ToolQuality.Exceptional ) list.Add( 1060636 ); // exceptional list.Add( 1060584, m_UsesRemaining.ToString() ); // uses remaining: ~1_val~ } public virtual void DisplayDurabilityTo( Mobile m ) { LabelToAffix( m, 1017323, AffixType.Append, ": " + m_UsesRemaining.ToString() ); // Durability } public override void OnSingleClick( Mobile from ) { DisplayDurabilityTo( from ); base.OnSingleClick( from ); } public override void OnDoubleClick( Mobile from ) { if ( IsChildOf( from.Backpack ) || Parent == from ) HarvestSystem.BeginHarvesting( from, this ); else from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. } public BaseHarvestTool( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 1 ); // version writer.Write( (Mobile) m_Crafter ); writer.Write( (int) m_Quality ); writer.Write( (int) m_UsesRemaining ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 1: { m_Crafter = reader.ReadMobile(); m_Quality = (ToolQuality) reader.ReadInt(); goto case 0; } case 0: { m_UsesRemaining = reader.ReadInt(); break; } } } #region ICraftable Members public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) { Quality = (ToolQuality)quality; if ( makersMark ) Crafter = from; return quality; } #endregion } }