fix(Scripts/Spells): Fixed Enrage armor reduce part. Source: TrinityCore. (#8625)
Fixes #8623
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1634677151304244900');
|
||||||
|
|
||||||
|
DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_dru_bear_form_passive';
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||||
|
(1178,'spell_dru_bear_form_passive'),
|
||||||
|
(9635,'spell_dru_bear_form_passive');
|
||||||
@@ -519,17 +519,6 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
|
|||||||
case SPELL_AURA_MANA_SHIELD:
|
case SPELL_AURA_MANA_SHIELD:
|
||||||
m_canBeRecalculated = false;
|
m_canBeRecalculated = false;
|
||||||
break;
|
break;
|
||||||
case SPELL_AURA_MOD_BASE_RESISTANCE_PCT:
|
|
||||||
if (!caster)
|
|
||||||
break;
|
|
||||||
if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_DRUID)
|
|
||||||
{
|
|
||||||
if (GetId() == 1178 && caster->HasAura(5229) && !caster->HasAura(70726)) // Feral t10 4p
|
|
||||||
amount -= 48; // percentage
|
|
||||||
else if (GetId() == 9635 && caster->HasAura(5229) && !caster->HasAura(70726)) // Feral t10 4p
|
|
||||||
amount -= 57; // percentage
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SPELL_AURA_MOD_DAMAGE_PERCENT_DONE:
|
case SPELL_AURA_MOD_DAMAGE_PERCENT_DONE:
|
||||||
// Titan's Grip
|
// Titan's Grip
|
||||||
if (!caster)
|
if (!caster)
|
||||||
|
|||||||
@@ -1843,25 +1843,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b
|
|||||||
target->RemoveAura(63531);
|
target->RemoveAura(63531);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
case SPELLFAMILY_DRUID:
|
|
||||||
if (!caster)
|
|
||||||
break;
|
|
||||||
// Reduce base armor of bear form and dire bear form
|
|
||||||
if (GetId() == 5229)
|
|
||||||
{
|
|
||||||
if (target->HasAura(70726)) // Item - Druid T10 Feral 4P Bonus
|
|
||||||
{
|
|
||||||
if (apply)
|
|
||||||
target->CastSpell(target, 70725, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Enrage armor reduction
|
|
||||||
target->HandleStatModifier(UNIT_MOD_ARMOR, BASE_PCT, target->GetShapeshiftForm() == FORM_DIREBEAR ? -16.0f : -27.0f, apply);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,62 @@ enum DruidSpells
|
|||||||
SPELL_DRUID_SAVAGE_ROAR = 62071,
|
SPELL_DRUID_SAVAGE_ROAR = 62071,
|
||||||
SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178,
|
SPELL_DRUID_TIGER_S_FURY_ENERGIZE = 51178,
|
||||||
SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950,
|
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
|
// 70723 - Item - Druid T10 Balance 4P Bonus
|
||||||
@@ -417,30 +473,64 @@ class spell_dru_enrage : public SpellScriptLoader
|
|||||||
public:
|
public:
|
||||||
spell_dru_enrage() : SpellScriptLoader("spell_dru_enrage") { }
|
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
|
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))
|
Unit::AuraEffectList const& auras = GetTarget()->GetAuraEffectsByType(SPELL_AURA_MOD_BASE_RESISTANCE_PCT);
|
||||||
GetHitUnit()->CastCustomSpell(SPELL_DRUID_ENRAGE_MOD_DAMAGE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetHitUnit(), true);
|
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
|
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()
|
void AddSC_druid_spell_scripts()
|
||||||
{
|
{
|
||||||
|
new spell_dru_bear_form_passive();
|
||||||
new spell_dru_t10_balance_4p_bonus();
|
new spell_dru_t10_balance_4p_bonus();
|
||||||
new spell_dru_nurturing_instinct();
|
new spell_dru_nurturing_instinct();
|
||||||
new spell_dru_feral_swiftness();
|
new spell_dru_feral_swiftness();
|
||||||
|
|||||||
Reference in New Issue
Block a user