1. void AuraEffect::HandlePeriodicTriggerSpellWithTargetBelowPct(Unit* target, Unit* caster) const
  2. {
  3. // generic casting code with custom spells and target/caster customs
  4. uint32 triggerSpellId = GetSpellEffectInfo()->TriggerSpell;
  5. SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId);
  6. // Reget trigger spell proto
  7. triggeredSpellInfo = sSpellMgr->GetSpellInfo(triggerSpellId);
  8. if (triggeredSpellInfo)
  9. {
  10. if (Unit* triggerCaster = triggeredSpellInfo->NeedsToBeTriggeredByCaster(m_spellInfo, target->GetMap()->GetDifficultyID()) ? caster : target)
  11. {
  12. uint32 percent = triggerCaster->GetHealthPct();
  13. if (triggerCaster->HealthBelowPct(percent))
  14. {
  15. triggerCaster->CastSpell(target, triggeredSpellInfo, true, NULL, this);
  16. return;
  17. }
  18. TC_LOG_DEBUG("spells", "AuraEffect::HandlePeriodicTriggerSpellWithTargetBelowPct: Spell %u Trigger %u", GetId(), triggeredSpellInfo->Id);
  19. }
  20. }
  21. else
  22. TC_LOG_DEBUG("spells", "AuraEffect::HandlePeriodicTriggerSpellWithTargetBelowPct: Spell %u has non-existent spell %u in EffectTriggered[%d] and is therefor not triggered.", GetId(), triggerSpellId, GetEffIndex());
  23. }

SPELL_AURA_TRIGGER_SPELL_ON_HEALTH_BELOW_PCT - AURA_468