Feat: Add new UnitEvent for Creature and Player (#341)

This commit is contained in:
iThorgrim
2025-11-08 14:02:00 +01:00
committed by GitHub
parent 5d59a43d49
commit 1ac94f18a3
7 changed files with 866 additions and 221 deletions

View File

@@ -1216,7 +1216,24 @@ public:
sALE->OnPlayerAuraApply(unit->ToPlayer(), aura);
if (unit->IsCreature())
{
sALE->OnCreatureAuraApply(unit->ToCreature(), aura);
sALE->OnAllCreatureAuraApply(unit->ToCreature(), aura);
}
}
void OnAuraRemove(Unit* unit, AuraApplication* aurApp, AuraRemoveMode mode) override
{
if (!unit || !aurApp->GetBase()) return;
if (unit->IsPlayer())
sALE->OnPlayerAuraRemove(unit->ToPlayer(), aurApp->GetBase(), mode);
if (unit->IsCreature())
{
sALE->OnCreatureAuraRemove(unit->ToCreature(), aurApp->GetBase(), mode);
sALE->OnAllCreatureAuraRemove(unit->ToCreature(), aurApp->GetBase(), mode);
}
}
void OnHeal(Unit* healer, Unit* receiver, uint32& gain) override
@@ -1227,7 +1244,10 @@ public:
sALE->OnPlayerHeal(healer->ToPlayer(), receiver, gain);
if (healer->IsCreature())
{
sALE->OnCreatureHeal(healer->ToCreature(), receiver, gain);
sALE->OnAllCreatureHeal(healer->ToCreature(), receiver, gain);
}
}
void OnDamage(Unit* attacker, Unit* receiver, uint32& damage) override
@@ -1238,7 +1258,79 @@ public:
sALE->OnPlayerDamage(attacker->ToPlayer(), receiver, damage);
if (attacker->IsCreature())
{
sALE->OnCreatureDamage(attacker->ToCreature(), receiver, damage);
sALE->OnAllCreatureDamage(attacker->ToCreature(), receiver, damage);
}
}
void ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage, SpellInfo const* spellInfo) override
{
if (!target || !attacker) return;
if (attacker->IsPlayer())
sALE->OnPlayerModifyPeriodicDamageAurasTick(attacker->ToPlayer(), target, damage, spellInfo);
if (attacker->IsCreature())
{
sALE->OnCreatureModifyPeriodicDamageAurasTick(attacker->ToCreature(), target, damage, spellInfo);
sALE->OnAllCreatureModifyPeriodicDamageAurasTick(attacker->ToCreature(), target, damage, spellInfo);
}
}
void ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage) override
{
if (!target || !attacker) return;
if (attacker->IsPlayer())
sALE->OnPlayerModifyMeleeDamage(attacker->ToPlayer(), target, damage);
if (attacker->IsCreature())
{
sALE->OnCreatureModifyMeleeDamage(attacker->ToCreature(), target, damage);
sALE->OnAllCreatureModifyMeleeDamage(attacker->ToCreature(), target, damage);
}
}
void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage, SpellInfo const* spellInfo) override
{
if (!target || !attacker) return;
if (attacker->IsPlayer())
sALE->OnPlayerModifySpellDamageTaken(attacker->ToPlayer(), target, damage, spellInfo);
if (attacker->IsCreature())
{
sALE->OnCreatureModifySpellDamageTaken(attacker->ToCreature(), target, damage, spellInfo);
sALE->OnAllCreatureModifySpellDamageTaken(attacker->ToCreature(), target, damage, spellInfo);
}
}
void ModifyHealReceived(Unit* target, Unit* healer, uint32& heal, SpellInfo const* spellInfo) override
{
if (!target || !healer) return;
if (healer->IsPlayer())
sALE->OnPlayerModifyHealReceived(healer->ToPlayer(), target, heal, spellInfo);
if (healer->IsCreature())
{
sALE->OnCreatureModifyHealReceived(healer->ToCreature(), target, heal, spellInfo);
sALE->OnAllCreatureModifyHealReceived(healer->ToCreature(), target, heal, spellInfo);
}
}
uint32 DealDamage(Unit* AttackerUnit, Unit* pVictim, uint32 damage, DamageEffectType damagetype) override
{
if (!AttackerUnit || !pVictim) return damage;
if (AttackerUnit->IsPlayer())
return sALE->OnPlayerDealDamage(AttackerUnit->ToPlayer(), pVictim, damage, damagetype);
if (AttackerUnit->IsCreature())
return sALE->OnCreatureDealDamage(AttackerUnit->ToCreature(), pVictim, damage, damagetype);
return damage;
}
};