mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 10:05:32 +01:00
Core/Spells: Add Block Value cap to Shield Slam and Shield of Righteousness.
Fixes #599 Fixes #2119
This commit is contained in:
@@ -1503,6 +1503,20 @@ class Unit : public WorldObject
|
||||
}
|
||||
|
||||
virtual uint32 GetShieldBlockValue() const =0;
|
||||
uint32 GetShieldBlockValue(uint32 soft_cap, uint32 hard_cap) const
|
||||
{
|
||||
uint32 value = GetShieldBlockValue();
|
||||
if (value >= hard_cap)
|
||||
{
|
||||
value = (soft_cap + hard_cap) / 2;
|
||||
}
|
||||
else if (value > soft_cap)
|
||||
{
|
||||
value = soft_cap + ((value - soft_cap) / 2);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
uint32 GetUnitMeleeSkill(Unit const* target = NULL) const { return (target ? getLevelForTarget(target) : getLevel()) * 5; }
|
||||
uint32 GetDefenseSkillValue(Unit const* target = NULL) const;
|
||||
uint32 GetWeaponSkillValue(WeaponAttackType attType, Unit const* target = NULL) const;
|
||||
|
||||
@@ -456,7 +456,11 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
|
||||
ApplyPctF(damage, m_caster->GetTotalAttackPowerValue(BASE_ATTACK));
|
||||
// Shield Slam
|
||||
else if (m_spellInfo->SpellFamilyFlags[1] & 0x200 && m_spellInfo->Category == 1209)
|
||||
damage += int32(m_caster->ApplyEffectModifiers(m_spellInfo, effIndex, float(m_caster->GetShieldBlockValue())));
|
||||
{
|
||||
uint8 level = m_caster->getLevel();
|
||||
uint32 block_value = m_caster->GetShieldBlockValue(uint32(float(level) * 24.5f), uint32(float(level) * 34.5f));
|
||||
damage += int32(m_caster->ApplyEffectModifiers(m_spellInfo, effIndex, float(block_value)));
|
||||
}
|
||||
// Victory Rush
|
||||
else if (m_spellInfo->SpellFamilyFlags[1] & 0x100)
|
||||
ApplyPctF(damage, m_caster->GetTotalAttackPowerValue(BASE_ATTACK));
|
||||
@@ -716,7 +720,9 @@ void Spell::EffectSchoolDMG(SpellEffIndex effIndex)
|
||||
// Shield of Righteousness
|
||||
if (m_spellInfo->SpellFamilyFlags[EFFECT_1] & 0x100000)
|
||||
{
|
||||
damage += CalculatePctN(m_caster->GetShieldBlockValue(), m_spellInfo->Effects[EFFECT_1].CalcValue());
|
||||
uint8 level = m_caster->getLevel();
|
||||
uint32 block_value = m_caster->GetShieldBlockValue(uint32(float(level) * 29.5f), uint32(float(level) * 39.5f));
|
||||
damage += CalculatePctN(block_value, m_spellInfo->Effects[EFFECT_1].CalcValue());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user