mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-16 13:09:50 -04:00
Core/Spells: Implemented using base weapon damage in spell attack power formulas
This commit is contained in:
@@ -6696,8 +6696,17 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin
|
||||
ApCoeffMod /= 100.0f;
|
||||
}
|
||||
|
||||
WeaponAttackType const attType = (spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE) ? RANGED_ATTACK : BASE_ATTACK;
|
||||
float APbonus = float(victim->GetTotalAuraModifier(attType == BASE_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS));
|
||||
WeaponAttackType const attType = [&]()
|
||||
{
|
||||
if ((spellProto->IsRangedWeaponSpell() && spellProto->DmgClass != SPELL_DAMAGE_CLASS_MELEE))
|
||||
return RANGED_ATTACK;
|
||||
|
||||
if (spellProto->HasAttribute(SPELL_ATTR3_REQ_OFFHAND) && !spellProto->HasAttribute(SPELL_ATTR3_MAIN_HAND))
|
||||
return OFF_ATTACK;
|
||||
|
||||
return BASE_ATTACK;
|
||||
}();
|
||||
float APbonus = float(victim->GetTotalAuraModifier(attType != RANGED_ATTACK ? SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS : SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS));
|
||||
APbonus += GetTotalAttackPowerValue(attType);
|
||||
DoneTotal += int32(stack * ApCoeffMod * APbonus);
|
||||
}
|
||||
@@ -9752,18 +9761,30 @@ void Unit::UpdateResistances(uint32 school)
|
||||
UpdateArmor();
|
||||
}
|
||||
|
||||
float Unit::GetTotalAttackPowerValue(WeaponAttackType attType) const
|
||||
float Unit::GetTotalAttackPowerValue(WeaponAttackType attType, bool includeWeapon /*= true*/) const
|
||||
{
|
||||
if (attType == RANGED_ATTACK)
|
||||
{
|
||||
int32 ap = m_unitData->RangedAttackPower;
|
||||
float ap = m_unitData->RangedAttackPower + m_unitData->RangedAttackPowerModPos + m_unitData->RangedAttackPowerModNeg;
|
||||
if (includeWeapon)
|
||||
ap += std::max<float>(m_unitData->MainHandWeaponAttackPower, m_unitData->RangedWeaponAttackPower);
|
||||
if (ap < 0)
|
||||
return 0.0f;
|
||||
return ap * (1.0f + m_unitData->RangedAttackPowerMultiplier);
|
||||
}
|
||||
else
|
||||
{
|
||||
int32 ap = m_unitData->AttackPower;
|
||||
float ap = m_unitData->AttackPower + m_unitData->AttackPowerModPos + m_unitData->AttackPowerModNeg;
|
||||
if (includeWeapon)
|
||||
{
|
||||
if (attType == BASE_ATTACK)
|
||||
ap += std::max<float>(m_unitData->MainHandWeaponAttackPower, m_unitData->RangedWeaponAttackPower);
|
||||
else
|
||||
{
|
||||
ap += m_unitData->OffHandWeaponAttackPower;
|
||||
ap /= 2;
|
||||
}
|
||||
}
|
||||
if (ap < 0)
|
||||
return 0.0f;
|
||||
return ap * (1.0f + m_unitData->AttackPowerMultiplier);
|
||||
|
||||
Reference in New Issue
Block a user