- #include "ScriptPCH.h"
- /*######
- ## spell_swiftmend
- ## Entry: 18562
- ######*/
- struct spell_swiftmend : public ScriptedSpell
- {
- SpellCastResult OnCheckCast() override
- {
- Unit* pTarget = GetSpell()->m_targets.getUnitTarget();
- if (!pTarget)
- return SPELL_FAILED_BAD_IMPLICIT_TARGETS;
- if (!pTarget->GetAura(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_DRUID, UI64LIT(0x0000000000000050)))
- return SPELL_FAILED_TARGET_AURASTATE;
- return SPELL_CAST_OK;
- }
- bool OnBeforeEffect(SpellEffectIndex _index) override
- {
- Unit::AuraList const& _AuraList = GetUnitTarget()->GetAurasByType(SPELL_AURA_PERIODIC_HEAL);
- // Find most short by duration
- Aura* pTargetAura = NULL;
- for (Unit::AuraList::const_iterator i = _AuraList.begin(); i != _AuraList.end(); ++i) // Regrowth or Rejuvenation 0x40 | 0x10
- {
- Aura* pTempAura = *i;
- if (pTempAura->GetSpellInfo()->IsFitToFamily(SPELLFAMILY_DRUID, UI64LIT(0x0000000000000050)))
- {
- if (!pTargetAura || pTempAura->GetAuraDuration() < pTargetAura->GetAuraDuration())
- pTargetAura = *i;
- }
- }
- SpellInfo const* pTargetSpellInfo = pTargetAura ? pTargetAura->GetSpellInfo() : NULL;
- if (!pTargetSpellInfo)
- return true;
- uint8 uiIndex = EFFECT_INDEX_0;
- while (uiIndex < MAX_EFFECT_INDEX)
- {
- if (pTargetSpellInfo->EffectApplyAuraName[uiIndex] == SPELL_AURA_PERIODIC_HEAL)
- break;
- ++uiIndex;
- }
- GetUnitTarget()->RemoveAurasDueToSpell(pTargetSpellInfo->Id);
- int32 iTickCount = pTargetSpellInfo->GetSpellDuration() / pTargetSpellInfo->EffectAmplitude[uiIndex];
- SetHealing(pTargetAura->GetModifier()->m_amount * iTickCount);
- return true;
- }
- };
- ScriptedSpell* GetSpellScript_spell_swiftmend()
- {
- return new spell_swiftmend();
- }
- void AddSC_druid_spell_scripts()
- {
- Script* pNewScript;
- pNewScript = new Script;
- pNewScript->Name = "spell_swiftmend";
- pNewScript->GetSpellScript = &GetSpellScript_spell_swiftmend;
- pNewScript->RegisterSelf();
- }