Implement script hooks: OnDamge, OnHeal

This commit is contained in:
Carl Hjerpe
2013-10-01 18:35:09 +02:00
parent 586df8d417
commit 8737984b71
3 changed files with 24 additions and 0 deletions
+6
View File
@@ -568,6 +568,9 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
if (IsAIEnabled)
GetAI()->DamageDealt(victim, damage, damagetype);
// Hook for OnDamage Event
sScriptMgr->OnDamage(this, victim, damage);
if (victim->GetTypeId() == TYPEID_PLAYER && this != victim)
{
// Signal to pets that their owner was attacked
@@ -9588,6 +9591,9 @@ int32 Unit::DealHeal(Unit* victim, uint32 addhealth)
if (addhealth)
gain = victim->ModifyHealth(int32(addhealth));
// Hook for OnHeal Event
sScriptMgr->OnHeal(this, victim, gain);
Unit* unit = this;
if (GetTypeId() == TYPEID_UNIT && ToCreature()->IsTotem())
+10
View File
@@ -1363,6 +1363,16 @@ void ScriptMgr::OnGroupDisband(Group* group)
}
// Unit
void ScriptMgr::OnHeal(Unit* healer, Unit* reciever, uint32 gain)
{
FOREACH_SCRIPT(UnitScript)->OnHeal(healer, reciever, uint32 gain);
}
void ScriptMgr::OnDamage(Unit* attacker, Unit* victim, uint32 damage)
{
FOREACH_SCRIPT(UnitScript)->OnDamage(attacker, victim, uint32 damage);
}
void ScriptMgr::ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage)
{
FOREACH_SCRIPT(UnitScript)->ModifyPeriodicDamageAurasTick(target, attacker, damage);
+8
View File
@@ -396,6 +396,12 @@ class UnitScript : public ScriptObject
UnitScript(const char* name, bool addToScripts = true);
public:
// Called when a unit deals damage to another unit
virtual void OnHeal(Unit* /*healer*/, Unit* /*reciever*/, uint32 /*gain*/) { }
// Called when a unit deals damage to another unit
virtual void OnDamage(Unit* /*attacker*/, Unit* /*victim*/, uint32 /*damage*/) { }
// Called when DoT's Tick Damage is being Dealt
virtual void ModifyPeriodicDamageAurasTick(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/) { }
@@ -1054,6 +1060,8 @@ class ScriptMgr
public: /* UnitScript */
void OnHeal(Unit* healer, Unit* reciever, uint32 gain);
void OnDamage(Unit* attacker, Unit* victim, uint32 damage);
void ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage);
void ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage);
void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage);