diff --git a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/AncientSmithyHammer.cs b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/AncientSmithyHammer.cs index 065f67e84..0b7a0a89e 100644 --- a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/AncientSmithyHammer.cs +++ b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/AncientSmithyHammer.cs @@ -1,124 +1,93 @@ +using ModernUO.Serialization; using Server.Engines.Craft; -namespace Server.Items +namespace Server.Items; + +[SerializationGenerator(0, false)] +[Flippable(0x13E4, 0x13E3)] +public partial class AncientSmithyHammer : BaseTool { - [Flippable(0x13E4, 0x13E3)] - public class AncientSmithyHammer : BaseTool + private SkillMod _skillMod; + + [Constructible] + public AncientSmithyHammer(int bonus, int uses = 600) : base(uses, 0x13E4) { - private int m_Bonus; - private SkillMod m_SkillMod; + _bonus = bonus; + Weight = 8.0; + Layer = Layer.OneHanded; + Hue = 0x482; + } - [Constructible] - public AncientSmithyHammer(int bonus, int uses = 600) : base(uses, 0x13E4) + [SerializableProperty(0)] + [CommandProperty(AccessLevel.GameMaster)] + public int Bonus + { + get => _bonus; + set { - m_Bonus = bonus; - Weight = 8.0; - Layer = Layer.OneHanded; - Hue = 0x482; - } + _bonus = value; + InvalidateProperties(); + this.MarkDirty(); - public AncientSmithyHammer(Serial serial) : base(serial) - { - } - - [CommandProperty(AccessLevel.GameMaster)] - public int Bonus - { - get => m_Bonus; - set + if (_bonus == 0) { - m_Bonus = value; - InvalidateProperties(); + _skillMod?.Remove(); - if (m_Bonus == 0) - { - m_SkillMod?.Remove(); - - m_SkillMod = null; - } - else if (m_SkillMod == null && Parent is Mobile mobile) - { - m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, "AncientSmithyHammer", true, m_Bonus); - mobile.AddSkillMod(m_SkillMod); - } - else if (m_SkillMod != null) - { - m_SkillMod.Value = m_Bonus; - } + _skillMod = null; } - } - - public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem; - public override int LabelNumber => 1045127; // ancient smithy hammer - - public override void OnAdded(IEntity parent) - { - base.OnAdded(parent); - - if (m_Bonus != 0 && parent is Mobile mobile) + else if (_skillMod == null && Parent is Mobile mobile) { - m_SkillMod?.Remove(); - - m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, "AncientSmithyHammer", true, m_Bonus); - mobile.AddSkillMod(m_SkillMod); + _skillMod = new DefaultSkillMod(SkillName.Blacksmith, "AncientSmithyHammer", true, _bonus); + mobile.AddSkillMod(_skillMod); } - } - - public override void OnRemoved(IEntity parent) - { - base.OnRemoved(parent); - - m_SkillMod?.Remove(); - - m_SkillMod = null; - } - - public override void GetProperties(IPropertyList list) - { - base.GetProperties(list); - - if (m_Bonus != 0) + else if (_skillMod != null) { - list.Add(1060451, $"{1042354:#}\t{m_Bonus}"); // ~1_skillname~ +~2_val~ - } - } - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.Write(0); // version - - writer.Write(m_Bonus); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) - { - case 0: - { - m_Bonus = reader.ReadInt(); - break; - } - } - - if (m_Bonus != 0 && Parent is Mobile mobile) - { - m_SkillMod?.Remove(); - - m_SkillMod = new DefaultSkillMod(SkillName.Blacksmith, "AncientSmithyHammer", true, m_Bonus); - mobile.AddSkillMod(m_SkillMod); - } - - if (Hue == 0) - { - Hue = 0x482; + _skillMod.Value = _bonus; } } } + + public override CraftSystem CraftSystem => DefBlacksmithy.CraftSystem; + public override int LabelNumber => 1045127; // ancient smithy hammer + + public override void OnAdded(IEntity parent) + { + base.OnAdded(parent); + + if (_bonus != 0 && parent is Mobile mobile) + { + _skillMod?.Remove(); + + _skillMod = new DefaultSkillMod(SkillName.Blacksmith, "AncientSmithyHammer", true, _bonus); + mobile.AddSkillMod(_skillMod); + } + } + + public override void OnRemoved(IEntity parent) + { + base.OnRemoved(parent); + + _skillMod?.Remove(); + _skillMod = null; + } + + public override void GetProperties(IPropertyList list) + { + base.GetProperties(list); + + if (_bonus != 0) + { + list.Add(1060451, $"{1042354:#}\t{_bonus}"); // ~1_skillname~ +~2_val~ + } + } + + [AfterDeserialization] + private void AfterDeserialization() + { + if (_bonus != 0 && Parent is Mobile mobile) + { + _skillMod = new DefaultSkillMod(SkillName.Blacksmith, "AncientSmithyHammer", true, _bonus); + mobile.AddSkillMod(_skillMod); + } + } } diff --git a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/ColoredAnvil.cs b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/ColoredAnvil.cs index 229e433f8..991175beb 100644 --- a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/ColoredAnvil.cs +++ b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/ColoredAnvil.cs @@ -1,40 +1,18 @@ +using ModernUO.Serialization; using Server.Engines.Craft; -namespace Server.Items +namespace Server.Items; + +[Anvil] +[SerializationGenerator(0, false)] +[Flippable(0xFAF, 0xFB0)] +public partial class ColoredAnvil : Item { - [Anvil, Flippable(0xFAF, 0xFB0)] - public class ColoredAnvil : Item + [Constructible] + public ColoredAnvil() : base(0xFAF) { - [Constructible] - public ColoredAnvil() : this( - CraftResources.GetHue( - (CraftResource)Utility.RandomMinMax((int)CraftResource.DullCopper, (int)CraftResource.Valorite) - ) - ) - { - } - - [Constructible] - public ColoredAnvil(int hue) : base(0xFAF) - { - Hue = hue; - Weight = 20; - } - - public ColoredAnvil(Serial serial) : base(serial) - { - } - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - writer.Write(0); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - var version = reader.ReadInt(); - } + // TODO: Color weighted by rarity? + Hue = CraftResources.GetRandomResource(CraftResource.DullCopper, CraftResource.Valorite)?.Hue ?? 0; + Weight = 20; } } diff --git a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/GlovesOfMining.cs b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/GlovesOfMining.cs index 65aefb647..91dcc09bd 100644 --- a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/GlovesOfMining.cs +++ b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/GlovesOfMining.cs @@ -1,242 +1,171 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +[Flippable(0x13c6, 0x13ce)] +public partial class LeatherGlovesOfMining : BaseGlovesOfMining { - [Flippable(0x13c6, 0x13ce)] - public class LeatherGlovesOfMining : BaseGlovesOfMining + [Constructible] + public LeatherGlovesOfMining(int bonus) : base(bonus, 0x13C6) => Weight = 1; + + public override int BasePhysicalResistance => 2; + public override int BaseFireResistance => 4; + public override int BaseColdResistance => 3; + public override int BasePoisonResistance => 3; + public override int BaseEnergyResistance => 3; + + public override int InitMinHits => 30; + public override int InitMaxHits => 40; + + public override int AosStrReq => 20; + public override int OldStrReq => 10; + + public override int ArmorBase => 13; + + public override ArmorMaterialType MaterialType => ArmorMaterialType.Leather; + public override CraftResource DefaultResource => CraftResource.RegularLeather; + + public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All; + + public override int LabelNumber => 1045122; // leather blacksmith gloves of mining +} + +[SerializationGenerator(0, false)] +[Flippable(0x13d5, 0x13dd)] +public partial class StuddedGlovesOfMining : BaseGlovesOfMining +{ + [Constructible] + public StuddedGlovesOfMining(int bonus) : base(bonus, 0x13D5) => Weight = 2; + + public override int BasePhysicalResistance => 2; + public override int BaseFireResistance => 4; + public override int BaseColdResistance => 3; + public override int BasePoisonResistance => 3; + public override int BaseEnergyResistance => 4; + + public override int InitMinHits => 35; + public override int InitMaxHits => 45; + + public override int AosStrReq => 25; + public override int OldStrReq => 25; + + public override int ArmorBase => 16; + + public override ArmorMaterialType MaterialType => ArmorMaterialType.Studded; + public override CraftResource DefaultResource => CraftResource.RegularLeather; + + public override int LabelNumber => 1045123; // studded leather blacksmith gloves of mining +} + +[SerializationGenerator(0, false)] +[Flippable(0x13eb, 0x13f2)] +public partial class RingmailGlovesOfMining : BaseGlovesOfMining +{ + [Constructible] + public RingmailGlovesOfMining(int bonus) : base(bonus, 0x13EB) => Weight = 1; + + public override int BasePhysicalResistance => 3; + public override int BaseFireResistance => 3; + public override int BaseColdResistance => 1; + public override int BasePoisonResistance => 5; + public override int BaseEnergyResistance => 3; + + public override int InitMinHits => 40; + public override int InitMaxHits => 50; + + public override int AosStrReq => 40; + public override int OldStrReq => 20; + + public override int OldDexBonus => -1; + + public override int ArmorBase => 22; + + public override ArmorMaterialType MaterialType => ArmorMaterialType.Ringmail; + + public override int LabelNumber => 1045124; // ringmail blacksmith gloves of mining +} + +[SerializationGenerator(0, false)] +public abstract partial class BaseGlovesOfMining : BaseArmor +{ + private SkillMod _skillMod; + + public BaseGlovesOfMining(int bonus, int itemID) : base(itemID) { - [Constructible] - public LeatherGlovesOfMining(int bonus) : base(bonus, 0x13C6) => Weight = 1; + _bonus = bonus; - public LeatherGlovesOfMining(Serial serial) : base(serial) + // TODO: Color weighted by rarity? + Hue = CraftResources.GetRandomResource(CraftResource.DullCopper, CraftResource.Valorite)?.Hue ?? 0; + } + + [SerializableProperty(0)] + [CommandProperty(AccessLevel.GameMaster)] + public int Bonus + { + get => _bonus; + set { - } + _bonus = value; + InvalidateProperties(); + this.MarkDirty(); - public override int BasePhysicalResistance => 2; - public override int BaseFireResistance => 4; - public override int BaseColdResistance => 3; - public override int BasePoisonResistance => 3; - public override int BaseEnergyResistance => 3; + if (_bonus == 0) + { + _skillMod?.Remove(); - public override int InitMinHits => 30; - public override int InitMaxHits => 40; - - public override int AosStrReq => 20; - public override int OldStrReq => 10; - - public override int ArmorBase => 13; - - public override ArmorMaterialType MaterialType => ArmorMaterialType.Leather; - public override CraftResource DefaultResource => CraftResource.RegularLeather; - - public override ArmorMeditationAllowance DefMedAllowance => ArmorMeditationAllowance.All; - - public override int LabelNumber => 1045122; // leather blacksmith gloves of mining - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - writer.Write(0); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - var version = reader.ReadInt(); + _skillMod = null; + } + else if (_skillMod == null && Parent is Mobile mobile) + { + _skillMod = new DefaultSkillMod(SkillName.Mining, "MiningGloves", true, _bonus); + mobile.AddSkillMod(_skillMod); + } + else if (_skillMod != null) + { + _skillMod.Value = _bonus; + } } } - [Flippable(0x13d5, 0x13dd)] - public class StuddedGlovesOfMining : BaseGlovesOfMining + public override void OnAdded(IEntity parent) { - [Constructible] - public StuddedGlovesOfMining(int bonus) : base(bonus, 0x13D5) => Weight = 2; + base.OnAdded(parent); - public StuddedGlovesOfMining(Serial serial) : base(serial) + if (_bonus != 0 && parent is Mobile mobile) { - } + _skillMod?.Remove(); - public override int BasePhysicalResistance => 2; - public override int BaseFireResistance => 4; - public override int BaseColdResistance => 3; - public override int BasePoisonResistance => 3; - public override int BaseEnergyResistance => 4; - - public override int InitMinHits => 35; - public override int InitMaxHits => 45; - - public override int AosStrReq => 25; - public override int OldStrReq => 25; - - public override int ArmorBase => 16; - - public override ArmorMaterialType MaterialType => ArmorMaterialType.Studded; - public override CraftResource DefaultResource => CraftResource.RegularLeather; - - public override int LabelNumber => 1045123; // studded leather blacksmith gloves of mining - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - writer.Write(0); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - var version = reader.ReadInt(); + _skillMod = new DefaultSkillMod(SkillName.Mining, "MiningGloves", true, _bonus); + mobile.AddSkillMod(_skillMod); } } - [Flippable(0x13eb, 0x13f2)] - public class RingmailGlovesOfMining : BaseGlovesOfMining + public override void OnRemoved(IEntity parent) { - [Constructible] - public RingmailGlovesOfMining(int bonus) : base(bonus, 0x13EB) => Weight = 1; + base.OnRemoved(parent); - public RingmailGlovesOfMining(Serial serial) : base(serial) + _skillMod?.Remove(); + _skillMod = null; + } + + public override void GetProperties(IPropertyList list) + { + base.GetProperties(list); + + if (_bonus != 0) { - } - - public override int BasePhysicalResistance => 3; - public override int BaseFireResistance => 3; - public override int BaseColdResistance => 1; - public override int BasePoisonResistance => 5; - public override int BaseEnergyResistance => 3; - - public override int InitMinHits => 40; - public override int InitMaxHits => 50; - - public override int AosStrReq => 40; - public override int OldStrReq => 20; - - public override int OldDexBonus => -1; - - public override int ArmorBase => 22; - - public override ArmorMaterialType MaterialType => ArmorMaterialType.Ringmail; - - public override int LabelNumber => 1045124; // ringmail blacksmith gloves of mining - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - writer.Write(0); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - var version = reader.ReadInt(); + list.Add(1062005, _bonus); // mining bonus +~1_val~ } } - public abstract class BaseGlovesOfMining : BaseArmor + [AfterDeserialization] + private void AfterDeserialization() { - private int m_Bonus; - private SkillMod m_SkillMod; - - public BaseGlovesOfMining(int bonus, int itemID) : base(itemID) + if (_bonus != 0 && Parent is Mobile mobile) { - m_Bonus = bonus; - - Hue = CraftResources.GetHue( - (CraftResource)Utility.RandomMinMax((int)CraftResource.DullCopper, (int)CraftResource.Valorite) - ); - } - - public BaseGlovesOfMining(Serial serial) : base(serial) - { - } - - [CommandProperty(AccessLevel.GameMaster)] - public int Bonus - { - get => m_Bonus; - set - { - m_Bonus = value; - InvalidateProperties(); - - if (m_Bonus == 0) - { - m_SkillMod?.Remove(); - - m_SkillMod = null; - } - else if (m_SkillMod == null && Parent is Mobile mobile) - { - m_SkillMod = new DefaultSkillMod(SkillName.Mining, "MiningGloves", true, m_Bonus); - mobile.AddSkillMod(m_SkillMod); - } - else if (m_SkillMod != null) - { - m_SkillMod.Value = m_Bonus; - } - } - } - - public override void OnAdded(IEntity parent) - { - base.OnAdded(parent); - - if (m_Bonus != 0 && parent is Mobile mobile) - { - m_SkillMod?.Remove(); - - m_SkillMod = new DefaultSkillMod(SkillName.Mining, "MiningGloves", true, m_Bonus); - mobile.AddSkillMod(m_SkillMod); - } - } - - public override void OnRemoved(IEntity parent) - { - base.OnRemoved(parent); - - m_SkillMod?.Remove(); - - m_SkillMod = null; - } - - public override void GetProperties(IPropertyList list) - { - base.GetProperties(list); - - if (m_Bonus != 0) - { - list.Add(1062005, m_Bonus); // mining bonus +~1_val~ - } - } - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.Write(0); // version - - writer.Write(m_Bonus); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) - { - case 0: - { - m_Bonus = reader.ReadInt(); - break; - } - } - - if (m_Bonus != 0 && Parent is Mobile mobile) - { - m_SkillMod?.Remove(); - - m_SkillMod = new DefaultSkillMod(SkillName.Mining, "MiningGloves", true, m_Bonus); - mobile.AddSkillMod(m_SkillMod); - } + _skillMod = new DefaultSkillMod(SkillName.Mining, "MiningGloves", true, _bonus); + mobile.AddSkillMod(_skillMod); } } } diff --git a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/PowderOfTemperament.cs b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/PowderOfTemperament.cs index 209da9950..fc898fd20 100644 --- a/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/PowderOfTemperament.cs +++ b/Projects/UOContent/Items/Special/Bulk Order Rewards/Blacksmithy/PowderOfTemperament.cs @@ -1,196 +1,157 @@ +using ModernUO.Serialization; using Server.Network; using Server.Targeting; -namespace Server.Items +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class PowderOfTemperament : Item, IUsesRemaining { - public class PowderOfTemperament : Item, IUsesRemaining + [InvalidateProperties] + [SerializableField(0)] + [SerializedCommandProperty(AccessLevel.GameMaster)] + private int _usesRemaining; + + [Constructible] + public PowderOfTemperament(int charges = 10) : base(4102) { - private int m_UsesRemaining; + Weight = 1.0; + Hue = 2419; + UsesRemaining = charges; + } - [Constructible] - public PowderOfTemperament(int charges = 10) : base(4102) + public override int LabelNumber => 1049082; // powder of fortifying + + bool IUsesRemaining.ShowUsesRemaining + { + get => true; + set { } + } + + public override void GetProperties(IPropertyList list) + { + base.GetProperties(list); + + list.Add(1060584, _usesRemaining); // uses remaining: ~1_val~ + } + + public virtual void DisplayDurabilityTo(Mobile m) + { + LabelToAffix(m, 1017323, AffixType.Append, $": {_usesRemaining}"); // Durability + } + + public override void OnSingleClick(Mobile from) + { + DisplayDurabilityTo(from); + + base.OnSingleClick(from); + } + + public override void OnDoubleClick(Mobile from) + { + if (IsChildOf(from.Backpack)) { - Weight = 1.0; - Hue = 2419; - UsesRemaining = charges; + from.Target = new InternalTarget(this); } - - public PowderOfTemperament(Serial serial) : base(serial) + else { + from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. } + } - public override int LabelNumber => 1049082; // powder of fortifying + private class InternalTarget : Target + { + private readonly PowderOfTemperament _powder; - [CommandProperty(AccessLevel.GameMaster)] - public int UsesRemaining + public InternalTarget(PowderOfTemperament powder) : base(2, false, TargetFlags.None) => _powder = powder; + + protected override void OnTarget(Mobile from, object targeted) { - get => m_UsesRemaining; - set + if (_powder?.Deleted != false || _powder.UsesRemaining <= 0) { - m_UsesRemaining = value; - InvalidateProperties(); + from.SendLocalizedMessage(1049086); // You have used up your powder of temperament. + return; } - } - bool IUsesRemaining.ShowUsesRemaining - { - get => true; - set { } - } - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.Write(0); - writer.Write(m_UsesRemaining); - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - - switch (version) + if (targeted is not (Item item and IDurability wearable)) { - case 0: - { - m_UsesRemaining = reader.ReadInt(); - break; - } + from.SendLocalizedMessage(1049083); // You cannot use the powder on that item. + return; } - } - public override void GetProperties(IPropertyList list) - { - base.GetProperties(list); - - list.Add(1060584, m_UsesRemaining); // uses remaining: ~1_val~ - } - - public virtual void DisplayDurabilityTo(Mobile m) - { - LabelToAffix(m, 1017323, AffixType.Append, $": {m_UsesRemaining}"); // Durability - } - - public override void OnSingleClick(Mobile from) - { - DisplayDurabilityTo(from); - - base.OnSingleClick(from); - } - - public override void OnDoubleClick(Mobile from) - { - if (IsChildOf(from.Backpack)) + if (!wearable.CanFortify) { - from.Target = new InternalTarget(this); + from.SendLocalizedMessage(1049083); // You cannot use the powder on that item. + return; + } + + if (!item.IsChildOf(from.Backpack) && (!Core.ML || item.Parent != from) || + !_powder.IsChildOf(from.Backpack)) + { + from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. + return; + } + + var origMaxHP = wearable.MaxHitPoints; + var origCurHP = wearable.HitPoints; + + if (origMaxHP <= 0) + { + from.SendLocalizedMessage(1049083); // You cannot use the powder on that item. + return; + } + + var initMaxHP = Core.AOS ? 255 : wearable.InitMaxHits; + + wearable.UnscaleDurability(); + + if (wearable.MaxHitPoints >= initMaxHP) + { + from.SendLocalizedMessage(1049085); // The item cannot be improved any further. + wearable.ScaleDurability(); + return; + } + + var bonus = initMaxHP - wearable.MaxHitPoints; + + if (bonus > 10) + { + bonus = 10; + } + + wearable.MaxHitPoints += bonus; + wearable.HitPoints += bonus; + + wearable.ScaleDurability(); + + if (wearable.MaxHitPoints > 255) + { + wearable.MaxHitPoints = 255; + } + + if (wearable.HitPoints > 255) + { + wearable.HitPoints = 255; + } + + if (wearable.MaxHitPoints > origMaxHP) + { + from.SendLocalizedMessage(1049084); // You successfully use the powder on the item. + from.PlaySound(0x247); + + --_powder.UsesRemaining; + + if (_powder.UsesRemaining <= 0) + { + from.SendLocalizedMessage(1049086); // You have used up your powder of fortifying. + _powder.Delete(); + } } else { - from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. - } - } - - private class InternalTarget : Target - { - private readonly PowderOfTemperament m_Powder; - - public InternalTarget(PowderOfTemperament powder) : base(2, false, TargetFlags.None) => m_Powder = powder; - - protected override void OnTarget(Mobile from, object targeted) - { - if (m_Powder?.Deleted != false || m_Powder.UsesRemaining <= 0) - { - from.SendLocalizedMessage(1049086); // You have used up your powder of temperament. - return; - } - - if (targeted is Item item && item is IDurability wearable) - { - if (!wearable.CanFortify) - { - from.SendLocalizedMessage(1049083); // You cannot use the powder on that item. - return; - } - - if ((item.IsChildOf(from.Backpack) || Core.ML && item.Parent == from) && - m_Powder.IsChildOf(from.Backpack)) - { - var origMaxHP = wearable.MaxHitPoints; - var origCurHP = wearable.HitPoints; - - if (origMaxHP > 0) - { - var initMaxHP = Core.AOS ? 255 : wearable.InitMaxHits; - - wearable.UnscaleDurability(); - - if (wearable.MaxHitPoints < initMaxHP) - { - var bonus = initMaxHP - wearable.MaxHitPoints; - - if (bonus > 10) - { - bonus = 10; - } - - wearable.MaxHitPoints += bonus; - wearable.HitPoints += bonus; - - wearable.ScaleDurability(); - - if (wearable.MaxHitPoints > 255) - { - wearable.MaxHitPoints = 255; - } - - if (wearable.HitPoints > 255) - { - wearable.HitPoints = 255; - } - - if (wearable.MaxHitPoints > origMaxHP) - { - from.SendLocalizedMessage(1049084); // You successfully use the powder on the item. - from.PlaySound(0x247); - - --m_Powder.UsesRemaining; - - if (m_Powder.UsesRemaining <= 0) - { - from.SendLocalizedMessage(1049086); // You have used up your powder of fortifying. - m_Powder.Delete(); - } - } - else - { - wearable.MaxHitPoints = origMaxHP; - wearable.HitPoints = origCurHP; - from.SendLocalizedMessage(1049085); // The item cannot be improved any further. - } - } - else - { - from.SendLocalizedMessage(1049085); // The item cannot be improved any further. - wearable.ScaleDurability(); - } - } - else - { - from.SendLocalizedMessage(1049083); // You cannot use the powder on that item. - } - } - else - { - from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. - } - } - else - { - from.SendLocalizedMessage(1049083); // You cannot use the powder on that item. - } + wearable.MaxHitPoints = origMaxHP; + wearable.HitPoints = origCurHP; + from.SendLocalizedMessage(1049085); // The item cannot be improved any further. } } } diff --git a/Projects/UOContent/Items/Special/Community Collection/JesterHatofChuckles.cs b/Projects/UOContent/Items/Special/Community Collection/JesterHatofChuckles.cs index 068cec620..d731396ee 100644 --- a/Projects/UOContent/Items/Special/Community Collection/JesterHatofChuckles.cs +++ b/Projects/UOContent/Items/Special/Community Collection/JesterHatofChuckles.cs @@ -1,46 +1,30 @@ -namespace Server.Items +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0, false)] +public partial class JesterHatofChuckles : BaseHat { - public class JesterHatofChuckles : BaseHat + [Constructible] + public JesterHatofChuckles() : this(Utility.RandomList(0x13e, 0x03, 0x172, 0x3f)) { - [Constructible] - public JesterHatofChuckles() : this(Utility.RandomList(0x13e, 0x03, 0x172, 0x3f)) - { - } - - [Constructible] - public JesterHatofChuckles(int hue) : base(0x171C, hue) - { - Attributes.Luck = 150; - Weight = 1.0; - } - - public JesterHatofChuckles(Serial serial) : base(serial) - { - } - - public override int LabelNumber => 1073256; // Jester Hat of Chuckles - Museum of Vesper Replica 1073256 - - public override int BasePhysicalResistance => 12; - public override int BaseFireResistance => 12; - public override int BaseColdResistance => 12; - public override int BasePoisonResistance => 12; - public override int BaseEnergyResistance => 12; - - public override int InitMinHits => 100; - public override int InitMaxHits => 100; - - public override void Serialize(IGenericWriter writer) - { - base.Serialize(writer); - - writer.Write(0); // version - } - - public override void Deserialize(IGenericReader reader) - { - base.Deserialize(reader); - - var version = reader.ReadInt(); - } } + + [Constructible] + public JesterHatofChuckles(int hue) : base(0x171C, hue) + { + Attributes.Luck = 150; + Weight = 1.0; + } + + public override int LabelNumber => 1073256; // Jester Hat of Chuckles - Museum of Vesper Replica 1073256 + + public override int BasePhysicalResistance => 12; + public override int BaseFireResistance => 12; + public override int BaseColdResistance => 12; + public override int BasePoisonResistance => 12; + public override int BaseEnergyResistance => 12; + + public override int InitMinHits => 100; + public override int InitMaxHits => 100; } diff --git a/Projects/UOContent/Migrations/Server.Items.AncientSmithyHammer.v0.json b/Projects/UOContent/Migrations/Server.Items.AncientSmithyHammer.v0.json new file mode 100644 index 000000000..5e9471194 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.AncientSmithyHammer.v0.json @@ -0,0 +1,14 @@ +{ + "version": 0, + "type": "Server.Items.AncientSmithyHammer", + "properties": [ + { + "name": "Bonus", + "type": "int", + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "" + ] + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.BaseGlovesOfMining.v0.json b/Projects/UOContent/Migrations/Server.Items.BaseGlovesOfMining.v0.json new file mode 100644 index 000000000..367b71df7 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.BaseGlovesOfMining.v0.json @@ -0,0 +1,14 @@ +{ + "version": 0, + "type": "Server.Items.BaseGlovesOfMining", + "properties": [ + { + "name": "Bonus", + "type": "int", + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "" + ] + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.ColoredAnvil.v0.json b/Projects/UOContent/Migrations/Server.Items.ColoredAnvil.v0.json new file mode 100644 index 000000000..6e41f030c --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.ColoredAnvil.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.ColoredAnvil" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.JesterHatofChuckles.v0.json b/Projects/UOContent/Migrations/Server.Items.JesterHatofChuckles.v0.json new file mode 100644 index 000000000..5c94591f2 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.JesterHatofChuckles.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.JesterHatofChuckles" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.LeatherGlovesOfMining.v0.json b/Projects/UOContent/Migrations/Server.Items.LeatherGlovesOfMining.v0.json new file mode 100644 index 000000000..104c9e45e --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.LeatherGlovesOfMining.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.LeatherGlovesOfMining" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.PowderOfTemperament.v0.json b/Projects/UOContent/Migrations/Server.Items.PowderOfTemperament.v0.json new file mode 100644 index 000000000..180bf12ef --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.PowderOfTemperament.v0.json @@ -0,0 +1,14 @@ +{ + "version": 0, + "type": "Server.Items.PowderOfTemperament", + "properties": [ + { + "name": "UsesRemaining", + "type": "int", + "rule": "PrimitiveTypeMigrationRule", + "ruleArguments": [ + "" + ] + } + ] +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.RingmailGlovesOfMining.v0.json b/Projects/UOContent/Migrations/Server.Items.RingmailGlovesOfMining.v0.json new file mode 100644 index 000000000..b46a461fd --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.RingmailGlovesOfMining.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.RingmailGlovesOfMining" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.StuddedGlovesOfMining.v0.json b/Projects/UOContent/Migrations/Server.Items.StuddedGlovesOfMining.v0.json new file mode 100644 index 000000000..7de1272b3 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.StuddedGlovesOfMining.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.StuddedGlovesOfMining" +} \ No newline at end of file diff --git a/Projects/UOContent/Misc/ResourceInfo.cs b/Projects/UOContent/Misc/ResourceInfo.cs index 838dc1314..521216d58 100644 --- a/Projects/UOContent/Misc/ResourceInfo.cs +++ b/Projects/UOContent/Misc/ResourceInfo.cs @@ -773,32 +773,17 @@ namespace Server.Items } /// - /// Returns a value indiciating the type of ''. + /// Returns a value indicating the type of ''. /// - public static CraftResourceType GetType(CraftResource resource) - { - if (resource >= CraftResource.Iron && resource <= CraftResource.Valorite) + public static CraftResourceType GetType(CraftResource resource) => + resource switch { - return CraftResourceType.Metal; - } - - if (resource >= CraftResource.RegularLeather && resource <= CraftResource.BarbedLeather) - { - return CraftResourceType.Leather; - } - - if (resource >= CraftResource.RedScales && resource <= CraftResource.BlueScales) - { - return CraftResourceType.Scales; - } - - if (resource >= CraftResource.RegularWood && resource <= CraftResource.Frostwood) - { - return CraftResourceType.Wood; - } - - return CraftResourceType.None; - } + >= CraftResource.Iron and <= CraftResource.Valorite => CraftResourceType.Metal, + >= CraftResource.RegularLeather and <= CraftResource.BarbedLeather => CraftResourceType.Leather, + >= CraftResource.RedScales and <= CraftResource.BlueScales => CraftResourceType.Scales, + >= CraftResource.RegularWood and <= CraftResource.Frostwood => CraftResourceType.Wood, + _ => CraftResourceType.None + }; /// /// Returns the first in the series of resources for which '' @@ -851,6 +836,15 @@ namespace Server.Items return info?.Hue ?? 0; } + /// + /// Returns the of a random '' -or- null if an invalid + /// resource was specified. + /// + public static CraftResourceInfo GetRandomResource(CraftResource startResource, CraftResource endResource) => + GetInfo( + (CraftResource)Utility.RandomMinMax((int)startResource, (int)endResource) + ); + /// /// Returns the property of '' -or- an empty string if the /// resource specified was invalid.