From 42bcf3c95ae6c799ccac9379997ac5e625212e15 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Fri, 24 Feb 2023 16:05:16 -0800 Subject: [PATCH] fix: Fixes stack overflow from death explosion (#1346) --- .../UOContent/Mobiles/Abilities/DeathExplosion.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Projects/UOContent/Mobiles/Abilities/DeathExplosion.cs b/Projects/UOContent/Mobiles/Abilities/DeathExplosion.cs index ddd9f8491..9a43e0f22 100644 --- a/Projects/UOContent/Mobiles/Abilities/DeathExplosion.cs +++ b/Projects/UOContent/Mobiles/Abilities/DeathExplosion.cs @@ -1,9 +1,12 @@ using System; +using System.Collections.Generic; namespace Server.Mobiles; public class DeathExplosion : AreaEffectMonsterAbility { + private static HashSet _exploding = new(); + public override MonsterAbilityTrigger AbilityTrigger => MonsterAbilityTrigger.Death; public override MonsterAbilityType AbilityType => MonsterAbilityType.DeathExplosion; @@ -15,16 +18,21 @@ public class DeathExplosion : AreaEffectMonsterAbility public override void Trigger(MonsterAbilityTrigger trigger, BaseCreature source, Mobile target) { + _exploding.Add(source); source.FixedParticles(0x36BD, 20, 10, 5044, EffectLayer.Head); - source. PlaySound(0x307); + source.PlaySound(0x307); base.Trigger(trigger, source, target); + _exploding.Remove(source); } + protected override bool CanEffectTarget(BaseCreature source, Mobile defender) => + !_exploding.Contains(defender) && base.CanEffectTarget(source, defender); + protected override void DoEffectTarget(BaseCreature source, Mobile defender) { source.DoHarmful(defender); // TODO: Is the damage type correct? - AOS.Damage(defender, source, defender.HitsMax / 5, true, 100, 0, 0, 0, 0); + AOS.Damage(defender, source, defender.HitsMax / 5, true, 50, 50, 0, 0, 0); } }