fix(Scripts/Spells): Fixed Enrage armor reduce part. Source: TrinityCore. (#8625)

Fixes #8623
This commit is contained in:
UltraNix
2021-10-21 20:48:49 +02:00
committed by GitHub
parent cb0120a21b
commit cbabc54659
4 changed files with 106 additions and 39 deletions

View File

@@ -55,6 +55,62 @@ enum DruidSpells
SPELL_DRUID_SAVAGE_ROAR = 62071,
SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178,
SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950,
SPELL_DRUID_BEAR_FORM_PASSIVE = 1178,
SPELL_DRUID_DIRE_BEAR_FORM_PASSIVE = 9635,
SPELL_DRUID_ENRAGE = 5229,
SPELL_DRUID_ENRAGED_DEFENSE = 70725,
SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS = 70726,
};
// 1178 - Bear Form (Passive)
// 9635 - Dire Bear Form (Passive)
class spell_dru_bear_form_passive : public SpellScriptLoader
{
public:
spell_dru_bear_form_passive() : SpellScriptLoader("spell_dru_bear_form_passive") { }
class spell_dru_bear_form_passive_AuraScript : public AuraScript
{
PrepareAuraScript(spell_dru_bear_form_passive_AuraScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_DRUID_ENRAGE, SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS });
}
void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
if (!GetUnitOwner()->HasAura(SPELL_DRUID_ENRAGE) || GetUnitOwner()->HasAura(SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS))
{
return;
}
int32 mod = 0;
switch (GetId())
{
case SPELL_DRUID_BEAR_FORM_PASSIVE:
mod = -48;
break;
case SPELL_DRUID_DIRE_BEAR_FORM_PASSIVE:
mod = -59;
break;
default:
return;
}
amount += mod;
}
void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_bear_form_passive_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_BASE_RESISTANCE_PCT);
}
};
AuraScript* GetAuraScript() const override
{
return new spell_dru_bear_form_passive_AuraScript();
}
};
// 70723 - Item - Druid T10 Balance 4P Bonus
@@ -417,30 +473,64 @@ class spell_dru_enrage : public SpellScriptLoader
public:
spell_dru_enrage() : SpellScriptLoader("spell_dru_enrage") { }
class spell_dru_enrage_SpellScript : public SpellScript
class spell_dru_enrage_AuraScript : public AuraScript
{
PrepareSpellScript(spell_dru_enrage_SpellScript);
PrepareAuraScript(spell_dru_enrage_AuraScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_DRUID_KING_OF_THE_JUNGLE, SPELL_DRUID_ENRAGE_MOD_DAMAGE });
return ValidateSpellInfo({ SPELL_DRUID_KING_OF_THE_JUNGLE, SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELL_DRUID_ENRAGED_DEFENSE, SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS });
}
void OnHit()
void RecalculateBaseArmor()
{
if (AuraEffect const* aurEff = GetHitUnit()->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_0))
GetHitUnit()->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
Unit::AuraEffectList const& auras = GetTarget()->GetAuraEffectsByType(SPELL_AURA_MOD_BASE_RESISTANCE_PCT);
for (Unit::AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
{
SpellInfo const* spellInfo = (*i)->GetSpellInfo();
// Dire- / Bear Form (Passive)
if (spellInfo->SpellFamilyName == SPELLFAMILY_DRUID && spellInfo->SpellFamilyFlags.HasFlag(0x0, 0x0, 0x2))
{
(*i)->RecalculateAmount();
}
}
}
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit* target = GetTarget();
if (AuraEffect const* aurEff = target->GetAuraEffectOfRankedSpell(SPELL_DRUID_KING_OF_THE_JUNGLE, EFFECT_0))
{
target->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), target, true);
}
// Item - Druid T10 Feral 4P Bonus
if (target->HasAura(SPELL_DRUID_ITEM_T10_FERAL_4P_BONUS))
{
target->CastSpell(target, SPELL_DRUID_ENRAGED_DEFENSE, true);
}
RecalculateBaseArmor();
}
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE);
GetTarget()->RemoveAurasDueToSpell(SPELL_DRUID_ENRAGED_DEFENSE);
RecalculateBaseArmor();
}
void Register() override
{
AfterHit += SpellHitFn(spell_dru_enrage_SpellScript::OnHit);
AfterEffectApply += AuraEffectApplyFn(spell_dru_enrage_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE, AURA_EFFECT_HANDLE_REAL);
AfterEffectRemove += AuraEffectRemoveFn(spell_dru_enrage_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE, AURA_EFFECT_HANDLE_REAL);
}
};
SpellScript* GetSpellScript() const override
AuraScript* GetAuraScript() const override
{
return new spell_dru_enrage_SpellScript();
return new spell_dru_enrage_AuraScript();
}
};
@@ -1408,6 +1498,7 @@ public:
void AddSC_druid_spell_scripts()
{
new spell_dru_bear_form_passive();
new spell_dru_t10_balance_4p_bonus();
new spell_dru_nurturing_instinct();
new spell_dru_feral_swiftness();