diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index c257af0fbe..df2ee13836 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -103,6 +103,9 @@ class CreatureAI : public UnitAI // for attack reaction use AttackedBy called for not DOT damage in Unit::DealDamage also virtual void DamageTaken(Unit * /*done_by*/, uint32 & /*damage*/) {} + // Called when the creature receives heal + virtual void HealReceived(Unit* /*done_by*/, uint32& /*addhealth*/) {} + // Called when the creature is killed virtual void JustDied(Unit *) {} diff --git a/src/server/game/AI/EventAI/CreatureEventAI.h b/src/server/game/AI/EventAI/CreatureEventAI.h index 1c3d1f4e6e..493a7f7c29 100644 --- a/src/server/game/AI/EventAI/CreatureEventAI.h +++ b/src/server/game/AI/EventAI/CreatureEventAI.h @@ -608,6 +608,7 @@ class CreatureEventAI : public CreatureAI void MoveInLineOfSight(Unit *who); void SpellHit(Unit* pUnit, const SpellEntry* pSpell); void DamageTaken(Unit* done_by, uint32& damage); + void HealReceived(Unit* /*done_by*/, uint32& /*addhealth*/) {} void UpdateAI(const uint32 diff); void ReceiveEmote(Player* pPlayer, uint32 text_emote); static int Permissible(const Creature *); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 65d10d94e4..3593e1f799 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9912,6 +9912,9 @@ int32 Unit::DealHeal(Unit *pVictim, uint32 addhealth) { int32 gain = 0; + if (pVictim->GetTypeId() == TYPEID_UNIT && pVictim->ToCreature()->IsAIEnabled) + pVictim->ToCreature()->AI()->HealReceived(this, addhealth); + if (addhealth) gain = pVictim->ModifyHealth(int32(addhealth));