1. #include "ScriptPCH.h"
  2. /*######
  3. ## spell_swiftmend
  4. ## Entry: 18562
  5. ######*/
  6. struct spell_swiftmend : public ScriptedSpell
  7. {
  8. SpellCastResult OnCheckCast() override
  9. {
  10. Unit* pTarget = GetSpell()->m_targets.getUnitTarget();
  11. if (!pTarget)
  12. return SPELL_FAILED_BAD_IMPLICIT_TARGETS;
  13. if (!pTarget->GetAura(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_DRUID, UI64LIT(0x0000000000000050)))
  14. return SPELL_FAILED_TARGET_AURASTATE;
  15. return SPELL_CAST_OK;
  16. }
  17. bool OnBeforeEffect(SpellEffectIndex _index) override
  18. {
  19. Unit::AuraList const& _AuraList = GetUnitTarget()->GetAurasByType(SPELL_AURA_PERIODIC_HEAL);
  20. // Find most short by duration
  21. Aura* pTargetAura = NULL;
  22. for (Unit::AuraList::const_iterator i = _AuraList.begin(); i != _AuraList.end(); ++i) // Regrowth or Rejuvenation 0x40 | 0x10
  23. {
  24. Aura* pTempAura = *i;
  25. if (pTempAura->GetSpellInfo()->IsFitToFamily(SPELLFAMILY_DRUID, UI64LIT(0x0000000000000050)))
  26. {
  27. if (!pTargetAura || pTempAura->GetAuraDuration() < pTargetAura->GetAuraDuration())
  28. pTargetAura = *i;
  29. }
  30. }
  31. SpellInfo const* pTargetSpellInfo = pTargetAura ? pTargetAura->GetSpellInfo() : NULL;
  32. if (!pTargetSpellInfo)
  33. return true;
  34. uint8 uiIndex = EFFECT_INDEX_0;
  35. while (uiIndex < MAX_EFFECT_INDEX)
  36. {
  37. if (pTargetSpellInfo->EffectApplyAuraName[uiIndex] == SPELL_AURA_PERIODIC_HEAL)
  38. break;
  39. ++uiIndex;
  40. }
  41. GetUnitTarget()->RemoveAurasDueToSpell(pTargetSpellInfo->Id);
  42. int32 iTickCount = pTargetSpellInfo->GetSpellDuration() / pTargetSpellInfo->EffectAmplitude[uiIndex];
  43. SetHealing(pTargetAura->GetModifier()->m_amount * iTickCount);
  44. return true;
  45. }
  46. };
  47. ScriptedSpell* GetSpellScript_spell_swiftmend()
  48. {
  49. return new spell_swiftmend();
  50. }
  51. void AddSC_druid_spell_scripts()
  52. {
  53. Script* pNewScript;
  54. pNewScript = new Script;
  55. pNewScript->Name = "spell_swiftmend";
  56. pNewScript->GetSpellScript = &GetSpellScript_spell_swiftmend;
  57. pNewScript->RegisterSelf();
  58. }