From fd6f4239e27e0c3ed8c74390696b39863e10d796 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Tue, 1 Nov 2022 00:49:20 -0700 Subject: [PATCH] fix: Adds FindItemOnLayer generic (#1223) --- Projects/Server/Geometry/Point2D.cs | 3 +- Projects/Server/Mobiles/Mobile.cs | 27 ++++------ .../Packets/OutgoingVendorBuyPackets.cs | 2 +- .../UOContent/Engines/ConPVP/DuelContext.cs | 5 +- .../UOContent/Engines/Craft/Core/CraftItem.cs | 50 ++++++++++++------- .../UOContent/Engines/Craft/Core/Enhance.cs | 18 +++---- .../Witch Apprentice/Mobiles/Blackheart.cs | 3 +- .../Items/Skill Items/Magical/Spellbook.cs | 13 ++--- .../UOContent/Items/Weapons/BaseWeapon.cs | 10 ++-- .../Items/Weapons/Ranged/BaseRanged.cs | 2 +- Projects/UOContent/Misc/AOS.cs | 2 +- .../Monsters/Humanoid/Magic/OrcishMage.cs | 15 ++---- .../Mobiles/Monsters/Humanoid/Melee/Orc.cs | 15 ++---- .../Monsters/Humanoid/Melee/OrcBomber.cs | 15 ++---- .../Monsters/Humanoid/Melee/OrcBrute.cs | 15 ++---- .../Monsters/Humanoid/Melee/OrcCaptain.cs | 15 ++---- .../Monsters/Humanoid/Melee/OrcishLord.cs | 15 ++---- .../Mobiles/Monsters/LBR/Meers/MeerMage.cs | 2 +- Projects/UOContent/Spells/Bushido/Evasion.cs | 38 +++++++------- .../UOContent/Spells/Ninjitsu/FocusAttack.cs | 16 +++--- 20 files changed, 112 insertions(+), 169 deletions(-) diff --git a/Projects/Server/Geometry/Point2D.cs b/Projects/Server/Geometry/Point2D.cs index f37e640b8..efa9dbcbc 100644 --- a/Projects/Server/Geometry/Point2D.cs +++ b/Projects/Server/Geometry/Point2D.cs @@ -68,8 +68,7 @@ public struct Point2D public bool Equals(Point2D other) => m_X == other.m_X && m_Y == other.m_Y; - public bool Equals(IPoint2D other) => - m_X == other?.X && m_Y == other.Y; + public bool Equals(IPoint2D other) => m_X == other?.X && m_Y == other.Y; public override bool Equals(object obj) => obj is Point2D other && Equals(other); diff --git a/Projects/Server/Mobiles/Mobile.cs b/Projects/Server/Mobiles/Mobile.cs index 61b7e43aa..9207e754f 100644 --- a/Projects/Server/Mobiles/Mobile.cs +++ b/Projects/Server/Mobiles/Mobile.cs @@ -1568,7 +1568,7 @@ public class Mobile : IHued, IComparable, ISpawnable, IObjectPropertyLis return m_BankBox; } - m_BankBox = FindItemOnLayer(Layer.Bank) as BankBox; + m_BankBox = FindItemOnLayer(Layer.Bank); if (m_BankBox == null) { @@ -1586,7 +1586,7 @@ public class Mobile : IHued, IComparable, ISpawnable, IObjectPropertyLis { if (m_Backpack?.Deleted != false || m_Backpack.Parent != this) { - m_Backpack = FindItemOnLayer(Layer.Backpack) as Container; + m_Backpack = FindItemOnLayer(Layer.Backpack); } return m_Backpack; @@ -7405,12 +7405,15 @@ public class Mobile : IHued, IComparable, ISpawnable, IObjectPropertyLis { if (m_BankBox?.Deleted != false || m_BankBox.Parent != this) { - m_BankBox = FindItemOnLayer(Layer.Bank) as BankBox; + m_BankBox = FindItemOnLayer(Layer.Bank); } return m_BankBox; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public T FindItemOnLayer(Layer layer) where T : Item => FindItemOnLayer(layer) as T; + public Item FindItemOnLayer(Layer layer) { var eq = Items; @@ -7420,6 +7423,7 @@ public class Mobile : IHued, IComparable, ISpawnable, IObjectPropertyLis { var item = eq[i]; + // TODO: We only allow 1 item per layer. It's an implicit contract. if (!item.Deleted && item.Layer == layer) { return item; @@ -7463,15 +7467,8 @@ public class Mobile : IHued, IComparable, ISpawnable, IObjectPropertyLis eable.Free(); } - public bool PlaceInBackpack(Item item) - { - if (item.Deleted) - { - return false; - } - - return Backpack?.TryDropItem(this, item, false) == true; - } + public bool PlaceInBackpack(Item item) => + !item.Deleted && Backpack?.TryDropItem(this, item, false) == true; public bool AddToBackpack(Item item) { @@ -7504,10 +7501,8 @@ public class Mobile : IHued, IComparable, ISpawnable, IObjectPropertyLis from == this || from.AccessLevel > AccessLevel && from.AccessLevel >= AccessLevel.GameMaster; public virtual bool CheckTrade( - Mobile to, Item item, SecureTradeContainer cont, bool message, bool checkItems, - int plusItems, int plusWeight - ) => - true; + Mobile to, Item item, SecureTradeContainer cont, bool message, bool checkItems, int plusItems, int plusWeight + ) => true; public virtual bool OpenTrade(Mobile from, Item offer = null) { diff --git a/Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs b/Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs index f5b13fdd2..8cf712767 100644 --- a/Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs +++ b/Projects/Server/Network/Packets/OutgoingVendorBuyPackets.cs @@ -90,7 +90,7 @@ public static class OutgoingVendorBuyPackets var writer = new SpanWriter(stackalloc byte[length]); writer.Write((byte)0x74); // Packet ID writer.Write((ushort)length); - writer.Write((vendor.FindItemOnLayer(Layer.ShopBuy) as Container)?.Serial ?? Serial.MinusOne); + writer.Write(vendor.FindItemOnLayer(Layer.ShopBuy)?.Serial ?? Serial.MinusOne); writer.Write((byte)list.Count); for (var i = 0; i < list.Count; ++i) diff --git a/Projects/UOContent/Engines/ConPVP/DuelContext.cs b/Projects/UOContent/Engines/ConPVP/DuelContext.cs index d0b270add..ad80786c0 100644 --- a/Projects/UOContent/Engines/ConPVP/DuelContext.cs +++ b/Projects/UOContent/Engines/ConPVP/DuelContext.cs @@ -717,10 +717,7 @@ namespace Server.Engines.ConPVP { mob.Resurrect(); - if (mob.FindItemOnLayer(Layer.OuterTorso) is DeathRobe robe) - { - robe.Delete(); - } + mob.FindItemOnLayer(Layer.OuterTorso)?.Delete(); if (cont is Corpse corpse) { diff --git a/Projects/UOContent/Engines/Craft/Core/CraftItem.cs b/Projects/UOContent/Engines/Craft/Core/CraftItem.cs index e993749e7..f89ec147b 100644 --- a/Projects/UOContent/Engines/Craft/Core/CraftItem.cs +++ b/Projects/UOContent/Engines/Craft/Core/CraftItem.cs @@ -1016,20 +1016,22 @@ namespace Server.Engines.Craft return; } - int checkResHue = 0, checkMaxAmount = 0; + var checkResHue = 0; + var checkMaxAmount = 0; TextDefinition checkMessage = null; + var consumeRes = ConsumeRes( + from, + typeRes, + craftSystem, + ref checkResHue, + ref checkMaxAmount, + ConsumeType.None, + ref checkMessage + ); + // Not enough resource to craft it - if (!(ConsumeRes( - from, - typeRes, - craftSystem, - ref checkResHue, - ref checkMaxAmount, - ConsumeType.None, - ref checkMessage - ) - && ConsumeAttributes(from, ref checkMessage, false))) + if (!(consumeRes && ConsumeAttributes(from, ref checkMessage, false))) { if (tool?.Deleted == false && tool.UsesRemaining > 0) { @@ -1058,9 +1060,18 @@ namespace Server.Engines.Craft if (CheckSkills(from, typeRes, craftSystem, ref ignored, out var allRequiredSkills)) { + consumeRes = ConsumeRes( + from, + typeRes, + craftSystem, + ref resHue, + ref maxAmount, + ConsumeType.All, + ref message + ); + // Not enough resource to craft it - if (!(ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref message) - && ConsumeAttributes(from, ref message, true))) + if (!(consumeRes && ConsumeAttributes(from, ref message, true))) { if (tool?.Deleted == false && tool.UsesRemaining > 0) { @@ -1083,13 +1094,16 @@ namespace Server.Engines.Craft tool.UsesRemaining--; - if (craftSystem is DefBlacksmithy && - from.FindItemOnLayer(Layer.OneHanded) is AncientSmithyHammer hammer && hammer != tool) + if (craftSystem is DefBlacksmithy) { - hammer.UsesRemaining--; - if (hammer.UsesRemaining < 1) + var hammer = from.FindItemOnLayer(Layer.OneHanded); + if (hammer != tool) { - hammer.Delete(); + hammer.UsesRemaining--; + if (hammer.UsesRemaining < 1) + { + hammer.Delete(); + } } } diff --git a/Projects/UOContent/Engines/Craft/Core/Enhance.cs b/Projects/UOContent/Engines/Craft/Core/Enhance.cs index 2ba478f5d..acde73673 100644 --- a/Projects/UOContent/Engines/Craft/Core/Enhance.cs +++ b/Projects/UOContent/Engines/Craft/Core/Enhance.cs @@ -84,9 +84,10 @@ namespace Server.Engines.Craft return EnhanceResult.BadResource; } - int resHue = 0, maxAmount = 0; + int resHue = 0; + int maxAmount = 0; - if (!craftItem.ConsumeRes( + var consumeRes = craftItem.ConsumeRes( from, resType, craftSystem, @@ -94,20 +95,19 @@ namespace Server.Engines.Craft ref maxAmount, ConsumeType.None, ref resMessage - )) + ); + + if (!consumeRes) { return EnhanceResult.NoResources; } if (craftSystem is DefBlacksmithy) { - if (from.FindItemOnLayer(Layer.OneHanded) is AncientSmithyHammer hammer) + var hammer = from.FindItemOnLayer(Layer.OneHanded); + if (hammer != null && --hammer.UsesRemaining < 1) { - hammer.UsesRemaining--; - if (hammer.UsesRemaining < 1) - { - hammer.Delete(); - } + hammer.Delete(); } } diff --git a/Projects/UOContent/Engines/Quests/Witch Apprentice/Mobiles/Blackheart.cs b/Projects/UOContent/Engines/Quests/Witch Apprentice/Mobiles/Blackheart.cs index 819439ced..87a0dd007 100644 --- a/Projects/UOContent/Engines/Quests/Witch Apprentice/Mobiles/Blackheart.cs +++ b/Projects/UOContent/Engines/Quests/Witch Apprentice/Mobiles/Blackheart.cs @@ -62,8 +62,7 @@ namespace Server.Engines.Quests.Hag { PlaySound(Utility.RandomBool() ? 0x42E : 0x43F); - var hat = player.FindItemOnLayer(Layer.Helm); - var tricorne = hat is TricorneHat; + var tricorne = player.FindItemOnLayer(Layer.Helm) != null; if (tricorne && player.BAC >= 20) { diff --git a/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs b/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs index 9de8c67d2..56a6d11da 100644 --- a/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs +++ b/Projects/UOContent/Items/Skill Items/Magical/Spellbook.cs @@ -530,20 +530,13 @@ namespace Server.Items return list; } - public static Spellbook FindEquippedSpellbook(Mobile from) => from.FindItemOnLayer(Layer.OneHanded) as Spellbook; + public static Spellbook FindEquippedSpellbook(Mobile from) => from.FindItemOnLayer(Layer.OneHanded); public static bool ValidateSpellbook(Spellbook book, int spellID, SpellbookType type) => book.SpellbookType == type && (spellID == -1 || book.HasSpell(spellID)); - public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted) - { - if (!Ethic.CheckTrade(from, to, newOwner, this)) - { - return false; - } - - return base.AllowSecureTrade(from, to, newOwner, accepted); - } + public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted) => + Ethic.CheckTrade(from, to, newOwner, this) && base.AllowSecureTrade(from, to, newOwner, accepted); public override bool CanEquip(Mobile from) { diff --git a/Projects/UOContent/Items/Weapons/BaseWeapon.cs b/Projects/UOContent/Items/Weapons/BaseWeapon.cs index bbd6fedcb..eb301ca07 100644 --- a/Projects/UOContent/Items/Weapons/BaseWeapon.cs +++ b/Projects/UOContent/Items/Weapons/BaseWeapon.cs @@ -1373,7 +1373,7 @@ namespace Server.Items return false; } - var shield = defender.FindItemOnLayer(Layer.TwoHanded) as BaseShield; + var shield = defender.FindItemOnLayer(Layer.TwoHanded); var parry = defender.Skills.Parry.Value; var bushidoNonRacial = defender.Skills.Bushido.NonRacialValue; @@ -1489,7 +1489,7 @@ namespace Server.Items defender.Stam += Utility.RandomMinMax(1, (int)(bushido / 5)); } - var shield = defender.FindItemOnLayer(Layer.TwoHanded) as BaseShield; + var shield = defender.FindItemOnLayer(Layer.TwoHanded); shield?.OnHit(this, damage); } @@ -1785,9 +1785,11 @@ namespace Server.Items out var direct ); - if (Core.ML && this is BaseRanged && attacker.FindItemOnLayer(Layer.Cloak) is BaseQuiver quiver) + if (Core.ML && this is BaseRanged) { - quiver.AlterBowDamage(ref phys, ref fire, ref cold, ref pois, ref nrgy, ref chaos, ref direct); + attacker + .FindItemOnLayer(Layer.Cloak) + ?.AlterBowDamage(ref phys, ref fire, ref cold, ref pois, ref nrgy, ref chaos, ref direct); } if (Consecrated) diff --git a/Projects/UOContent/Items/Weapons/Ranged/BaseRanged.cs b/Projects/UOContent/Items/Weapons/Ranged/BaseRanged.cs index f4cdc12bc..4d9d3ce7f 100644 --- a/Projects/UOContent/Items/Weapons/Ranged/BaseRanged.cs +++ b/Projects/UOContent/Items/Weapons/Ranged/BaseRanged.cs @@ -171,7 +171,7 @@ namespace Server.Items { if (attacker.Player) { - var quiver = attacker.FindItemOnLayer(Layer.Cloak) as BaseQuiver; + var quiver = attacker.FindItemOnLayer(Layer.Cloak); var pack = attacker.Backpack; if (quiver == null || Utility.Random(100) >= quiver.LowerAmmoCost) diff --git a/Projects/UOContent/Misc/AOS.cs b/Projects/UOContent/Misc/AOS.cs index 92fa43fdc..e08c66c0c 100644 --- a/Projects/UOContent/Misc/AOS.cs +++ b/Projects/UOContent/Misc/AOS.cs @@ -109,7 +109,7 @@ namespace Server if (archer && from != null) { - quiver = from.FindItemOnLayer(Layer.Cloak) as BaseQuiver; + quiver = from.FindItemOnLayer(Layer.Cloak); } int totalDamage; diff --git a/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/OrcishMage.cs b/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/OrcishMage.cs index b45d3f8db..e49c73d17 100644 --- a/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/OrcishMage.cs +++ b/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/OrcishMage.cs @@ -67,23 +67,14 @@ namespace Server.Mobiles AddLoot(LootPack.LowScrolls); } - public override bool IsEnemy(Mobile m) - { - if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask) - { - return false; - } - - return base.IsEnemy(m); - } + public override bool IsEnemy(Mobile m) => + (!m.Player || m.FindItemOnLayer(Layer.Helm) == null) && base.IsEnemy(m); public override void AggressiveAction(Mobile aggressor, bool criminal) { base.AggressiveAction(aggressor, criminal); - var item = aggressor.FindItemOnLayer(Layer.Helm); - - if (item is OrcishKinMask) + if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item) { AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0); item.Delete(); diff --git a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/Orc.cs b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/Orc.cs index 1c9556b47..4b6b26519 100644 --- a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/Orc.cs +++ b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/Orc.cs @@ -85,23 +85,14 @@ namespace Server.Mobiles AddLoot(LootPack.Meager); } - public override bool IsEnemy(Mobile m) - { - if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask) - { - return false; - } - - return base.IsEnemy(m); - } + public override bool IsEnemy(Mobile m) => + (!m.Player || m.FindItemOnLayer(Layer.Helm) == null) && base.IsEnemy(m); public override void AggressiveAction(Mobile aggressor, bool criminal) { base.AggressiveAction(aggressor, criminal); - var item = aggressor.FindItemOnLayer(Layer.Helm); - - if (item is OrcishKinMask) + if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item) { AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0); item.Delete(); diff --git a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcBomber.cs b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcBomber.cs index 1b2ff2afb..d869bd846 100644 --- a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcBomber.cs +++ b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcBomber.cs @@ -73,23 +73,14 @@ namespace Server.Mobiles AddLoot(LootPack.Meager); } - public override bool IsEnemy(Mobile m) - { - if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask) - { - return false; - } - - return base.IsEnemy(m); - } + public override bool IsEnemy(Mobile m) => + (!m.Player || m.FindItemOnLayer(Layer.Helm) == null) && base.IsEnemy(m); public override void AggressiveAction(Mobile aggressor, bool criminal) { base.AggressiveAction(aggressor, criminal); - var item = aggressor.FindItemOnLayer(Layer.Helm); - - if (item is OrcishKinMask) + if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item) { AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0); item.Delete(); diff --git a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcBrute.cs b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcBrute.cs index f29754476..1079238a9 100644 --- a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcBrute.cs +++ b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcBrute.cs @@ -74,23 +74,14 @@ namespace Server.Mobiles AddLoot(LootPack.Rich); } - public override bool IsEnemy(Mobile m) - { - if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask) - { - return false; - } - - return base.IsEnemy(m); - } + public override bool IsEnemy(Mobile m) => + (!m.Player || m.FindItemOnLayer(Layer.Helm) == null) && base.IsEnemy(m); public override void AggressiveAction(Mobile aggressor, bool criminal) { base.AggressiveAction(aggressor, criminal); - var item = aggressor.FindItemOnLayer(Layer.Helm); - - if (item is OrcishKinMask) + if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item) { AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0); item.Delete(); diff --git a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcCaptain.cs b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcCaptain.cs index 2130ec3a6..f954302da 100644 --- a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcCaptain.cs +++ b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcCaptain.cs @@ -85,23 +85,14 @@ namespace Server.Mobiles AddLoot(LootPack.Meager, 2); } - public override bool IsEnemy(Mobile m) - { - if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask) - { - return false; - } - - return base.IsEnemy(m); - } + public override bool IsEnemy(Mobile m) => + (!m.Player || m.FindItemOnLayer(Layer.Helm) == null) && base.IsEnemy(m); public override void AggressiveAction(Mobile aggressor, bool criminal) { base.AggressiveAction(aggressor, criminal); - var item = aggressor.FindItemOnLayer(Layer.Helm); - - if (item is OrcishKinMask) + if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item) { AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0); item.Delete(); diff --git a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcishLord.cs b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcishLord.cs index c6e6a0a62..6387d854f 100644 --- a/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcishLord.cs +++ b/Projects/UOContent/Mobiles/Monsters/Humanoid/Melee/OrcishLord.cs @@ -81,23 +81,14 @@ namespace Server.Mobiles // TODO: evil orc helm } - public override bool IsEnemy(Mobile m) - { - if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask) - { - return false; - } - - return base.IsEnemy(m); - } + public override bool IsEnemy(Mobile m) => + (!m.Player || m.FindItemOnLayer(Layer.Helm) == null) && base.IsEnemy(m); public override void AggressiveAction(Mobile aggressor, bool criminal) { base.AggressiveAction(aggressor, criminal); - var item = aggressor.FindItemOnLayer(Layer.Helm); - - if (item is OrcishKinMask) + if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item) { AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0); item.Delete(); diff --git a/Projects/UOContent/Mobiles/Monsters/LBR/Meers/MeerMage.cs b/Projects/UOContent/Mobiles/Monsters/LBR/Meers/MeerMage.cs index ce509df11..f07bdd16e 100644 --- a/Projects/UOContent/Mobiles/Monsters/LBR/Meers/MeerMage.cs +++ b/Projects/UOContent/Mobiles/Monsters/LBR/Meers/MeerMage.cs @@ -181,7 +181,7 @@ namespace Server.Mobiles return; } - if (m.FindItemOnLayer(Layer.TwoHanded) is Torch { Burning: true }) + if (m.FindItemOnLayer(Layer.TwoHanded)?.Burning == true) { StopEffect(m, true); return; diff --git a/Projects/UOContent/Spells/Bushido/Evasion.cs b/Projects/UOContent/Spells/Bushido/Evasion.cs index ec9a77b52..90a7e5b94 100644 --- a/Projects/UOContent/Spells/Bushido/Evasion.cs +++ b/Projects/UOContent/Spells/Bushido/Evasion.cs @@ -33,12 +33,24 @@ namespace Server.Spells.Bushido return false; } - if (caster.FindItemOnLayer(Layer.OneHanded) is not BaseWeapon weap) - { - weap = caster.FindItemOnLayer(Layer.TwoHanded) as BaseWeapon; - } + var weap = + caster.FindItemOnLayer(Layer.OneHanded) ?? + caster.FindItemOnLayer(Layer.TwoHanded); - if (weap != null) + if (weap == null) + { + if (caster.FindItemOnLayer(Layer.TwoHanded) is not BaseShield) + { + if (messages) + { + // You must have a weapon or a shield equipped to use this ability! + caster.SendLocalizedMessage(1062944); + } + + return false; + } + } + else { if (Core.ML && caster.Skills[weap.Skill].Base < 50) { @@ -51,15 +63,6 @@ namespace Server.Spells.Bushido return false; } } - else if (caster.FindItemOnLayer(Layer.TwoHanded) is not BaseShield) - { - if (messages) - { - caster.SendLocalizedMessage(1062944); // You must have a weapon or a shield equipped to use this ability! - } - - return false; - } if (!caster.CanBeginAction()) { @@ -76,10 +79,9 @@ namespace Server.Spells.Bushido public static bool CheckSpellEvasion(Mobile defender) { - if (defender.FindItemOnLayer(Layer.OneHanded) is not BaseWeapon weap) - { - weap = defender.FindItemOnLayer(Layer.TwoHanded) as BaseWeapon; - } + var weap = + defender.FindItemOnLayer(Layer.OneHanded) ?? + defender.FindItemOnLayer(Layer.TwoHanded); if (Core.ML) { diff --git a/Projects/UOContent/Spells/Ninjitsu/FocusAttack.cs b/Projects/UOContent/Spells/Ninjitsu/FocusAttack.cs index 98026294b..2d78be5db 100644 --- a/Projects/UOContent/Spells/Ninjitsu/FocusAttack.cs +++ b/Projects/UOContent/Spells/Ninjitsu/FocusAttack.cs @@ -12,22 +12,18 @@ namespace Server.Spells.Ninjitsu public override bool Validate(Mobile from) { - if (from.FindItemOnLayer(Layer.TwoHanded) is BaseShield) + var twoHanded = from.FindItemOnLayer(Layer.TwoHanded); + if (twoHanded is BaseShield) { from.SendLocalizedMessage(1063096); // You cannot use this ability while holding a shield. return false; } - Item handOne = from.FindItemOnLayer(Layer.OneHanded) as BaseWeapon; + var meleeWeapon = + twoHanded is BaseWeapon and not BaseRanged || + from.FindItemOnLayer(Layer.OneHanded) is BaseWeapon and not BaseRanged; - if (handOne != null && handOne is not BaseRanged) - { - return base.Validate(from); - } - - Item handTwo = from.FindItemOnLayer(Layer.TwoHanded) as BaseWeapon; - - if (handTwo != null && handTwo is not BaseRanged) + if (meleeWeapon) { return base.Validate(from); }