using System; using Server.Targeting; using Server.Engines.Harvest; namespace Server.Items { public class ProspectorsTool : BaseBashing, IUsesRemaining { private int m_UsesRemaining; [CommandProperty( AccessLevel.GameMaster )] public int UsesRemaining { get => m_UsesRemaining; set { m_UsesRemaining = value; InvalidateProperties(); } } public bool ShowUsesRemaining{ get => true; set{} } public override int LabelNumber => 1049065; // prospector's tool public override WeaponAbility PrimaryAbility => WeaponAbility.CrushingBlow; public override WeaponAbility SecondaryAbility => WeaponAbility.ShadowStrike; public override int AosStrengthReq => 40; public override int AosMinDamage => 13; public override int AosMaxDamage => 15; public override int AosSpeed => 33; public override int OldStrengthReq => 10; public override int OldMinDamage => 6; public override int OldMaxDamage => 8; public override int OldSpeed => 33; [Constructible] public ProspectorsTool() : base( 0xFB4 ) { Weight = 9.0; UsesRemaining = 50; } public ProspectorsTool( Serial serial ) : base( serial ) { } public override void OnDoubleClick( Mobile from ) { if ( IsChildOf( from.Backpack ) || Parent == from ) from.Target = new InternalTarget( this ); else from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. } public void Prospect( Mobile from, object toProspect ) { if ( !IsChildOf( from.Backpack ) && Parent != from ) { from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it. return; } HarvestSystem system = Mining.System; int tileID; Map map; Point3D loc; if ( !system.GetHarvestDetails( from, this, toProspect, out tileID, out map, out loc ) ) { from.SendLocalizedMessage( 1049048 ); // You cannot use your prospector tool on that. return; } HarvestDefinition def = system.GetDefinition( tileID ); if ( def == null || def.Veins.Length <= 1 ) { from.SendLocalizedMessage( 1049048 ); // You cannot use your prospector tool on that. return; } HarvestBank bank = def.GetBank( map, loc.X, loc.Y ); if ( bank == null ) { from.SendLocalizedMessage( 1049048 ); // You cannot use your prospector tool on that. return; } HarvestVein vein = bank.Vein, defaultVein = bank.DefaultVein; if ( vein == null || defaultVein == null ) { from.SendLocalizedMessage( 1049048 ); // You cannot use your prospector tool on that. return; } else if ( vein != defaultVein ) { from.SendLocalizedMessage( 1049049 ); // That ore looks to be prospected already. return; } int veinIndex = Array.IndexOf( def.Veins, vein ); if ( veinIndex < 0 ) { from.SendLocalizedMessage( 1049048 ); // You cannot use your prospector tool on that. } else if ( veinIndex >= (def.Veins.Length - 1) ) { from.SendLocalizedMessage( 1049061 ); // You cannot improve valorite ore through prospecting. } else { bank.Vein = def.Veins[veinIndex + 1]; from.SendLocalizedMessage( 1049050 + veinIndex ); --UsesRemaining; if ( UsesRemaining <= 0 ) { from.SendLocalizedMessage( 1049062 ); // You have used up your prospector's tool. Delete(); } } } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 1 ); // version writer.Write( (int) m_UsesRemaining ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); switch ( version ) { case 1: { m_UsesRemaining = reader.ReadInt(); break; } case 0: { m_UsesRemaining = 50; break; } } } private class InternalTarget : Target { private ProspectorsTool m_Tool; public InternalTarget( ProspectorsTool tool ) : base( 2, true, TargetFlags.None ) { m_Tool = tool; } protected override void OnTarget( Mobile from, object targeted ) { m_Tool.Prospect( from, targeted ); } } } }