From d7c8cda06ad7b6ff21b930c291ca7434a8e5da68 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Sat, 25 Jan 2025 17:40:17 -0800 Subject: [PATCH] feat: Simplifies honorable execution --- Projects/UOContent/Items/Aquarium/Aquarium.cs | 18 ++-- .../Spells/Bushido/HonorableExecution.cs | 101 +++++------------- 2 files changed, 32 insertions(+), 87 deletions(-) diff --git a/Projects/UOContent/Items/Aquarium/Aquarium.cs b/Projects/UOContent/Items/Aquarium/Aquarium.cs index 34990100a8..b22af11916 100644 --- a/Projects/UOContent/Items/Aquarium/Aquarium.cs +++ b/Projects/UOContent/Items/Aquarium/Aquarium.cs @@ -551,25 +551,21 @@ public int FoodNumber() => public virtual void KillFish(int amount) { - var toKill = new List(); + using var toKill = PooledRefList.Create(); for (var i = 0; i < Items.Count; i++) { - if (Items[i] is BaseFish) + if (Items[i] is BaseFish { Dead: false } fish) { - var fish = (BaseFish)Items[i]; - - if (!fish.Dead) - { - toKill.Add(fish); - } + toKill.Add(fish); } } - while (amount > 0 && toKill.Count > 0) + toKill.Shuffle(); + + for (var i = 0; i < amount; i++) { - var kill = toKill.TakeRandomElement(); - kill.Kill(); + (toKill[i] as BaseFish)!.Kill(); amount -= 1; LiveCreatures = Math.Max(LiveCreatures - 1, 0); diff --git a/Projects/UOContent/Spells/Bushido/HonorableExecution.cs b/Projects/UOContent/Spells/Bushido/HonorableExecution.cs index 935ad55be7..c9a3759e1d 100644 --- a/Projects/UOContent/Spells/Bushido/HonorableExecution.cs +++ b/Projects/UOContent/Spells/Bushido/HonorableExecution.cs @@ -42,7 +42,7 @@ public override void OnHit(Mobile attacker, Mobile defender, int damage) var swingBonus = Math.Max(1, (int)(bushido / 720.0)); - timer = new HonorableExecutionTimer(attacker, swingBonus); + timer = new HonorableExecutionTimer(TimeSpan.FromSeconds(20.0), attacker, swingBonus: swingBonus); (attacker as PlayerMobile)?.AddBuff( new BuffInfo( @@ -56,23 +56,20 @@ public override void OnHit(Mobile attacker, Mobile defender, int damage) } else { - var mods = new List - { - new ResistanceMod(ResistanceType.Physical, "PhysicalResistHonorableExecution", -40), - new ResistanceMod(ResistanceType.Fire, "FireResistHonorableExecution", -40), - new ResistanceMod(ResistanceType.Cold, "ColdResistHonorableExecution", -40), - new ResistanceMod(ResistanceType.Poison, "PoisonResistHonorableExecution", -40), - new ResistanceMod(ResistanceType.Energy, "EnergyResistHonorableExecution", -40) - }; + attacker.AddResistanceMod(new ResistanceMod(ResistanceType.Physical, "PhysicalResistHonorableExecution", -40)); + attacker.AddResistanceMod(new ResistanceMod(ResistanceType.Fire, "FireResistHonorableExecution", -40)); + attacker.AddResistanceMod(new ResistanceMod(ResistanceType.Cold, "ColdResistHonorableExecution", -40)); + attacker.AddResistanceMod(new ResistanceMod(ResistanceType.Poison, "PoisonResistHonorableExecution", -40)); + attacker.AddResistanceMod(new ResistanceMod(ResistanceType.Energy, "EnergyResistHonorableExecution", -40)); var resSpells = attacker.Skills.MagicResist.Value; if (resSpells > 0.0) { - mods.Add(new DefaultSkillMod(SkillName.MagicResist, "MagicResistHonorableExecution", true, -resSpells)); + attacker.AddSkillMod(new DefaultSkillMod(SkillName.MagicResist, "MagicResistHonorableExecution", true, -resSpells)); } - timer = new HonorableExecutionTimer(attacker, mods); + timer = new HonorableExecutionTimer(TimeSpan.FromSeconds(7.0), attacker, penalty: true); if (Core.HS) { @@ -101,9 +98,9 @@ public override void OnHit(Mobile attacker, Mobile defender, int damage) CheckGain(attacker); } - public static int GetSwingBonus(Mobile target) => _table.TryGetValue(target, out var info) ? info.m_SwingBonus : 0; + public static int GetSwingBonus(Mobile target) => _table.TryGetValue(target, out var info) ? info._swingBonus : 0; - public static bool IsUnderPenalty(Mobile target) => _table.TryGetValue(target, out var info) && info.m_Penalty; + public static bool IsUnderPenalty(Mobile target) => _table.TryGetValue(target, out var info) && info._penalty; public static void RemovePenalty(Mobile target) { @@ -115,81 +112,33 @@ public static void RemovePenalty(Mobile target) private class HonorableExecutionTimer : Timer { - public readonly Mobile m_Mobile; - public readonly List m_Mods; - public readonly bool m_Penalty; - public readonly int m_SwingBonus; - - public HonorableExecutionTimer(Mobile from, List mods) : this(TimeSpan.FromSeconds(7.0), from, 0, mods, mods != null) - { - } + public readonly Mobile _from; + public readonly bool _penalty; + public readonly int _swingBonus; - public HonorableExecutionTimer(Mobile from, int swingBonus) : this(TimeSpan.FromSeconds(20.0), from, swingBonus) + public HonorableExecutionTimer(TimeSpan duration, Mobile from, int swingBonus = 0, bool penalty = false) : base(duration) { - } - - public HonorableExecutionTimer( - TimeSpan duration, Mobile from, int swingBonus, List mods = null, bool penalty = false - ) : base(duration) - { - m_Mobile = from; - m_SwingBonus = swingBonus; - m_Mods = mods; - m_Penalty = penalty; - - Apply(); + _from = from; + _swingBonus = swingBonus; + _penalty = penalty; } protected override void OnTick() { - m_Mobile?.Delta(MobileDelta.WeaponDamage); - RemovePenalty(m_Mobile); - } - - public void Apply() - { - if (m_Mods == null) - { - return; - } - - for (var i = 0; i < m_Mods.Count; ++i) - { - var mod = m_Mods[i]; - - if (mod is ResistanceMod resistanceMod) - { - m_Mobile.AddResistanceMod(resistanceMod); - } - else if (mod is SkillMod skillMod) - { - m_Mobile.AddSkillMod(skillMod); - } - } + _from?.Delta(MobileDelta.WeaponDamage); + RemovePenalty(_from); } public void Clear() { Stop(); - if (m_Mods == null) - { - return; - } - - for (var i = 0; i < m_Mods.Count; ++i) - { - var mod = m_Mods[i]; - - if (mod is ResistanceMod resistanceMod) - { - m_Mobile?.RemoveResistanceMod(resistanceMod); - } - else if (mod is SkillMod skillMod) - { - m_Mobile?.RemoveSkillMod(skillMod); - } - } + _from.RemoveResistanceMod("PhysicalResistHonorableExecution"); + _from.RemoveResistanceMod("FireResistHonorableExecution"); + _from.RemoveResistanceMod("ColdResistHonorableExecution"); + _from.RemoveResistanceMod("PoisonResistHonorableExecution"); + _from.RemoveResistanceMod("EnergyResistHonorableExecution"); + _from.RemoveSkillMod("MagicResistHonorableExecution"); } } }