Core/Unit: Big cleanup in Unit::CalcAbsorbResist

Core/AuraScript:
	Fix compile time check for AuraScript functions
	Remove AuraApplication from hook functions parameter list, use GetTarget() and GetTargetApplication() instead
	Add OnEffectAbsorb hook
Scripts: move handlers of Spell Deflection, Savage Defense, Primal Tenacity, Nerves of Steel, Astral shift from core to scripts.

--HG--
branch : trunk
This commit is contained in:
QAston
2010-12-27 20:14:54 +01:00
parent da8d794f4b
commit ef968f4b15
30 changed files with 791 additions and 438 deletions
+119
View File
@@ -83,7 +83,126 @@ public:
}
};
// 69366 - Moonkin Form passive
class spell_dru_moonkin_form_passive : public SpellScriptLoader
{
public:
spell_dru_moonkin_form_passive() : SpellScriptLoader("spell_dru_moonkin_form_passive") { }
class spell_dru_moonkin_form_passive_AuraScript : public AuraScript
{
PrepareAuraScript(spell_dru_moonkin_form_passive_AuraScript);
uint32 absorbPct;
void CalculateAmount(AuraEffect const * /*aurEff*/, int32 & amount, bool & canBeRecalculated)
{
absorbPct = amount;
// Set absorbtion amount to unlimited
amount = -1;
}
void Absorb(AuraEffect * /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
// reduces all damage taken while Stunned in Cat Form
if (GetTarget()->GetUInt32Value(UNIT_FIELD_FLAGS) & (UNIT_FLAG_STUNNED))
absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct);
}
void Register()
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_moonkin_form_passive_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_moonkin_form_passive_AuraScript::Absorb, EFFECT_1);
}
};
AuraScript *GetAuraScript() const
{
return new spell_dru_moonkin_form_passive_AuraScript();
}
};
// 33851 - Primal Tenacity
class spell_dru_primal_tenacity : public SpellScriptLoader
{
public:
spell_dru_primal_tenacity() : SpellScriptLoader("spell_dru_primal_tenacity") { }
class spell_dru_primal_tenacity_AuraScript : public AuraScript
{
PrepareAuraScript(spell_dru_primal_tenacity_AuraScript);
uint32 absorbPct;
void CalculateAmount(AuraEffect const * /*aurEff*/, int32 & amount, bool & canBeRecalculated)
{
absorbPct = amount;
// Set absorbtion amount to unlimited
amount = -1;
}
void Absorb(AuraEffect * /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
// reduces all damage taken while Stunned in Cat Form
if ((GetTarget()->GetShapeshiftForm() == FORM_CAT) && (GetTarget()->GetUInt32Value(UNIT_FIELD_FLAGS) & (UNIT_FLAG_STUNNED)))
absorbAmount = CalculatePctN(dmgInfo.GetDamage(), absorbPct);
}
void Register()
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_primal_tenacity_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_primal_tenacity_AuraScript::Absorb, EFFECT_1);
}
};
AuraScript *GetAuraScript() const
{
return new spell_dru_primal_tenacity_AuraScript();
}
};
// 62606 - Savage Defense
class spell_dru_savage_defense : public SpellScriptLoader
{
public:
spell_dru_savage_defense() : SpellScriptLoader("spell_dru_savage_defense") { }
class spell_dru_savage_defense_AuraScript : public AuraScript
{
PrepareAuraScript(spell_dru_savage_defense_AuraScript);
uint32 absorbPct;
void CalculateAmount(AuraEffect const * /*aurEff*/, int32 & amount, bool & canBeRecalculated)
{
absorbPct = amount;
// Set absorbtion amount to unlimited
amount = -1;
}
void Absorb(AuraEffect * aurEff, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
// don't waste charge when no dmg
if (!dmgInfo.GetDamage())
return;
absorbAmount = CalculatePctN(GetTarget()->GetTotalAttackPowerValue(BASE_ATTACK), absorbPct);
aurEff->SetAmount(0);
}
void Register()
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_savage_defense_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB);
OnEffectAbsorb += AuraEffectAbsorbFn(spell_dru_savage_defense_AuraScript::Absorb, EFFECT_0);
}
};
AuraScript *GetAuraScript() const
{
return new spell_dru_savage_defense_AuraScript();
}
};
void AddSC_druid_spell_scripts()
{
new spell_dru_glyph_of_starfire();
new spell_dru_moonkin_form_passive();
new spell_dru_primal_tenacity();
new spell_dru_savage_defense();
}