Fix Argent Defender

This commit is contained in:
talamortis
2016-12-19 21:36:06 +00:00
committed by GitHub
parent 7f4e075003
commit 5ca25a8362
+24 -14
View File
@@ -293,21 +293,36 @@ class spell_pal_sacred_shield_base : public SpellScriptLoader
// 31850 - Ardent Defender // 31850 - Ardent Defender
class spell_pal_ardent_defender : public SpellScriptLoader class spell_pal_ardent_defender : public SpellScriptLoader
{ {
public: public:
spell_pal_ardent_defender() : SpellScriptLoader("spell_pal_ardent_defender") { } spell_pal_ardent_defender() : SpellScriptLoader("spell_pal_ardent_defender") { }
class spell_pal_ardent_defender_AuraScript : public AuraScript class spell_pal_ardent_defender_AuraScript : public AuraScript
{ {
PrepareAuraScript(spell_pal_ardent_defender_AuraScript); PrepareAuraScript(spell_pal_ardent_defender_AuraScript);
public:
spell_pal_ardent_defender_AuraScript()
{
absorbPct = 0;
healPct = 0;
}
private:
uint32 absorbPct, healPct; uint32 absorbPct, healPct;
enum Spell enum Spell
{ {
PAL_SPELL_ARDENT_DEFENDER_HEAL = 66235, PAL_SPELL_ARDENT_DEFENDER_HEAL = 66235
}; };
bool Load() bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(PAL_SPELL_ARDENT_DEFENDER_HEAL))
return false;
return true;
}
bool Load() override
{ {
healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue(); healPct = GetSpellInfo()->Effects[EFFECT_1].CalcValue();
absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue(); absorbPct = GetSpellInfo()->Effects[EFFECT_0].CalcValue();
@@ -331,21 +346,16 @@ class spell_pal_ardent_defender : public SpellScriptLoader
// Cast healing spell, completely avoid damage // Cast healing spell, completely avoid damage
absorbAmount = dmgInfo.GetDamage(); absorbAmount = dmgInfo.GetDamage();
// xinef: fix logics
uint32 defenseSkillValue = victim->GetDefenseSkillValue(); uint32 defenseSkillValue = victim->GetDefenseSkillValue();
// Max heal when defense skill denies critical hits from raid bosses // Max heal when defense skill denies critical hits from raid bosses
// Formula: max defense at level + 140 (raiting from gear) // Formula: max defense at level + 140 (raiting from gear)
uint32 reqDefForMaxHeal = victim->getLevel() * 5 + 140; uint32 reqDefForMaxHeal = victim->getLevel() * 5 + 140;
float pctFromDefense = (defenseSkillValue >= reqDefForMaxHeal); float pctFromDefense = (defenseSkillValue >= reqDefForMaxHeal)
if (pctFromDefense < 0.0f) ? 1.0f
pctFromDefense = 0.0f; : float(defenseSkillValue) / float(reqDefForMaxHeal);
else if (pctFromDefense > 1.0f)
pctFromDefense = 1.0f;
int32 healAmount = int32(victim->CountPctFromMaxHealth(uint32(healPct * pctFromDefense))); int32 healAmount = int32(victim->CountPctFromMaxHealth(uint32(healPct * pctFromDefense)));
if (healAmount) victim->CastCustomSpell(PAL_SPELL_ARDENT_DEFENDER_HEAL, SPELLVALUE_BASE_POINT0, healAmount, victim, true, nullptr, aurEff);
victim->CastCustomSpell(victim, PAL_SPELL_ARDENT_DEFENDER_HEAL, &healAmount, NULL, NULL, true, NULL, aurEff);
victim->ToPlayer()->AddSpellCooldown(PAL_SPELL_ARDENT_DEFENDER_HEAL, 0, 120000); victim->ToPlayer()->AddSpellCooldown(PAL_SPELL_ARDENT_DEFENDER_HEAL, 0, 120000);
} }
else if (remainingHealth < int32(allowedHealth)) else if (remainingHealth < int32(allowedHealth))
@@ -358,14 +368,14 @@ class spell_pal_ardent_defender : public SpellScriptLoader
} }
} }
void Register() void Register() override
{ {
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_ardent_defender_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_ardent_defender_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_pal_ardent_defender_AuraScript::Absorb, EFFECT_0); OnEffectAbsorb += AuraEffectAbsorbFn(spell_pal_ardent_defender_AuraScript::Absorb, EFFECT_0);
} }
}; };
AuraScript* GetAuraScript() const AuraScript* GetAuraScript() const override
{ {
return new spell_pal_ardent_defender_AuraScript(); return new spell_pal_ardent_defender_AuraScript();
} }