using Server.Engines.VeteranRewards; using Server.Gumps; using Server.Mobiles; using Server.Network; using Server.Targeting; namespace Server.Items { public class WeaponEngravingTool : Item, IUsesRemaining, IRewardItem { private bool m_IsRewardItem; private int m_UsesRemaining; [Constructible] public WeaponEngravingTool() : this(10) { } [Constructible] public WeaponEngravingTool(int uses) : base(0x32F8) { LootType = LootType.Blessed; Weight = 1.0; m_UsesRemaining = uses; } public WeaponEngravingTool(Serial serial) : base(serial) { } public override int LabelNumber => 1076158; // Weapon Engraving Tool [CommandProperty(AccessLevel.GameMaster)] public bool IsRewardItem { get => m_IsRewardItem; set { m_IsRewardItem = value; InvalidateProperties(); } } [CommandProperty(AccessLevel.GameMaster)] public int UsesRemaining { get => m_UsesRemaining; set { m_UsesRemaining = value; InvalidateProperties(); } } public virtual bool ShowUsesRemaining { get => true; set { } } public override void OnDoubleClick(Mobile from) { if (m_IsRewardItem && !RewardSystem.CheckIsUsableBy(from, this, null)) return; if (m_UsesRemaining > 0) { from.SendLocalizedMessage(1072357); // Select an object to engrave. from.Target = new TargetWeapon(this); } else { if (from.Skills.Tinkering.Value == 0) { from.SendLocalizedMessage( 1076179); // Since you have no tinkering skill, you will need to find an NPC tinkerer to repair this for you. } else if (from.Skills.Tinkering.Value < 75.0) { from.SendLocalizedMessage( 1076178); // Your tinkering skill is too low to fix this yourself. An NPC tinkerer can help you repair this for a fee. } else { Item diamond = from.Backpack.FindItemByType(typeof(BlueDiamond)); if (diamond != null) from.SendGump(new ConfirmGump(this, null)); else from.SendLocalizedMessage( 1076166); // You do not have a blue diamond needed to recharge the engraving tool. } from.SendLocalizedMessage(1076163); // There are no charges left on this engraving tool. } } public override void GetProperties(ObjectPropertyList list) { base.GetProperties(list); if (m_IsRewardItem) list.Add(1076224); // 8th Year Veteran Reward if (ShowUsesRemaining) list.Add(1060584, m_UsesRemaining.ToString()); // uses remaining: ~1_val~ } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write(0); // version writer.Write(m_UsesRemaining); writer.Write(m_IsRewardItem); } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); m_UsesRemaining = reader.ReadInt(); m_IsRewardItem = reader.ReadBool(); } public virtual void Recharge(Mobile from, Mobile guildmaster) { if (from.Backpack != null) { Item diamond = from.Backpack.FindItemByType(typeof(BlueDiamond)); if (guildmaster != null) { if (m_UsesRemaining <= 0) { if (diamond != null && Banker.Withdraw(from, 100000)) { diamond.Consume(); UsesRemaining = 10; guildmaster.Say(1076165); // Your weapon engraver should be good as new! } else { guildmaster.Say( 1076167); // You need a 100,000 gold and a blue diamond to recharge the weapon engraver. } } else { guildmaster.Say( 1076164); // I can only help with this if you are carrying an engraving tool that needs repair. } } else { if (from.Skills.Tinkering.Value == 0) { from.SendLocalizedMessage( 1076179); // Since you have no tinkering skill, you will need to find an NPC tinkerer to repair this for you. } else if (from.Skills.Tinkering.Value < 75.0) { from.SendLocalizedMessage( 1076178); // Your tinkering skill is too low to fix this yourself. An NPC tinkerer can help you repair this for a fee. } else if (diamond != null) { diamond.Consume(); if (Utility.RandomDouble() < from.Skills.Tinkering.Value / 100) { UsesRemaining = 10; from.SendLocalizedMessage(1076165); // Your weapon engraver should be good as new! ????? } else { from.SendLocalizedMessage( 1076175); // You cracked the diamond attempting to fix the weapon engraver. } } else { from.SendLocalizedMessage( 1076166); // You do not have a blue diamond needed to recharge the engraving tool. } } } } public static WeaponEngravingTool Find(Mobile from) { return from.Backpack?.FindItemByType(typeof(WeaponEngravingTool)) as WeaponEngravingTool; } private class TargetWeapon : Target { private WeaponEngravingTool m_Tool; public TargetWeapon(WeaponEngravingTool tool) : base(-1, true, TargetFlags.None) { m_Tool = tool; } protected override void OnTarget(Mobile from, object targeted) { if (m_Tool == null || m_Tool.Deleted) return; if (targeted is BaseWeapon item) { from.CloseGump(typeof(InternalGump)); from.SendGump(new InternalGump(m_Tool, item)); } else { from.SendLocalizedMessage(1072309); // The selected item cannot be engraved by this engraving tool. } } } private class InternalGump : Gump { private BaseWeapon m_Target; private WeaponEngravingTool m_Tool; public InternalGump(WeaponEngravingTool tool, BaseWeapon target) : base(0, 0) { m_Tool = tool; m_Target = target; Closable = true; Disposable = true; Dragable = true; Resizable = false; AddBackground(50, 50, 400, 300, 0xA28); AddPage(0); AddHtmlLocalized(50, 70, 400, 20, 1072359, 0x0, false, false); //