diff --git a/Source/Game/AI/CoreAI/CreatureAI.cs b/Source/Game/AI/CoreAI/CreatureAI.cs index dac94db2c..d7020c9d1 100644 --- a/Source/Game/AI/CoreAI/CreatureAI.cs +++ b/Source/Game/AI/CoreAI/CreatureAI.cs @@ -448,6 +448,9 @@ namespace Game.AI // Called for reaction when initially engaged - this will always happen _after_ JustEnteredCombat public virtual void JustEngagedWith(Unit who) { } + // Called when the creature reaches 0 health (or 1 if unkillable). + public virtual void OnHealthDepleted(Unit attacker, bool isKill) { } + // Called when the creature is killed public virtual void JustDied(Unit killer) { } diff --git a/Source/Game/Entities/Unit/Unit.Combat.cs b/Source/Game/Entities/Unit/Unit.Combat.cs index dc565de89..09a88b235 100644 --- a/Source/Game/Entities/Unit/Unit.Combat.cs +++ b/Source/Game/Entities/Unit/Unit.Combat.cs @@ -942,7 +942,10 @@ namespace Game.Entities // Call creature just died function CreatureAI ai = creature.GetAI(); if (ai != null) + { + ai.OnHealthDepleted(attacker, true); ai.JustDied(attacker); + } TempSummon summon = creature.ToTempSummon(); if (summon != null) diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 02ab8eb3d..bd55e43b1 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -2672,6 +2672,10 @@ namespace Game.Entities else if (victim.IsCreature() && damageTaken >= health && victim.ToCreature().HasFlag(CreatureStaticFlags.Unkillable)) { damageTaken = health - 1; + + // If we had damage (aka health was not 1 already) trigger OnHealthDepleted + if (damageTaken > 0) + victim.ToCreature().GetAI()?.OnHealthDepleted(attacker, false); } else if (victim.IsVehicle() && damageTaken >= (health - 1) && victim.GetCharmer() != null && victim.GetCharmer().IsTypeId(TypeId.Player)) {