From 07a2dd9859c5e0c02f021d5a6b4c1c7456ee8ce8 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 4 Sep 2023 13:07:59 -0400 Subject: [PATCH] Core/AI: Implemented OnHealthDepleted hook Port From (https://github.com/TrinityCore/TrinityCore/commit/ea134c0eae83b4cdbb5f0e941ed867a144bb01f6) --- Source/Game/AI/CoreAI/CreatureAI.cs | 3 +++ Source/Game/Entities/Unit/Unit.Combat.cs | 3 +++ Source/Game/Entities/Unit/Unit.cs | 4 ++++ 3 files changed, 10 insertions(+) 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)) {