aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2018-03-14 02:20:29 -0300
committerariel- <ariel-@users.noreply.github.com>2018-03-14 03:43:59 -0300
commitf0794fd112c6485f0d8a84e30b148bc81629055f (patch)
tree7fc8d003a1a966f696fb70ccbe7a261a1680aac6 /src
parent8e853a82cc2f404acfd091a6c251828e9e7aac6e (diff)
Core/Entities: simplify and fix secondary damage calc
Closes #21617
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index eba057a6c67..b9e82ee9802 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -517,6 +517,20 @@ void Player::UpdateShieldBlockValue()
void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bool addTotalPct, float& minDamage, float& maxDamage, uint8 damageIndex) const
{
+ // Only proto damage, not affected by any mods
+ if (damageIndex != 0)
+ {
+ minDamage = 0.0f;
+ maxDamage = 0.0f;
+
+ if (!IsInFeralForm() && CanUseAttackType(attType))
+ {
+ minDamage = GetWeaponDamageRange(attType, MINDAMAGE, damageIndex);
+ maxDamage = GetWeaponDamageRange(attType, MAXDAMAGE, damageIndex);
+ }
+ return;
+ }
+
UnitMods unitMod;
switch (attType)
@@ -536,26 +550,18 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bo
float const attackPowerMod = std::max(GetAPMultiplier(attType, normalized), 0.25f);
float baseValue = GetFlatModifierValue(unitMod, BASE_VALUE);
- if (damageIndex == 0) // apply AP bonus only to primary weapon damage
- baseValue += GetTotalAttackPowerValue(attType) / 14.0f * attackPowerMod;
+ baseValue += GetTotalAttackPowerValue(attType) / 14.0f * attackPowerMod;
float basePct = GetPctModifierValue(unitMod, BASE_PCT);
float totalValue = GetFlatModifierValue(unitMod, TOTAL_VALUE);
float totalPct = addTotalPct ? GetPctModifierValue(unitMod, TOTAL_PCT) : 1.0f;
- float weaponMinDamage = GetWeaponDamageRange(attType, MINDAMAGE, damageIndex);
- float weaponMaxDamage = GetWeaponDamageRange(attType, MAXDAMAGE, damageIndex);
+ float weaponMinDamage = GetWeaponDamageRange(attType, MINDAMAGE);
+ float weaponMaxDamage = GetWeaponDamageRange(attType, MAXDAMAGE);
- // check if player is druid and in cat or bear forms (only primary damage)
+ // check if player is druid and in cat or bear forms
if (IsInFeralForm())
{
- if (damageIndex != 0)
- {
- minDamage = 0.f;
- maxDamage = 0.f;
- return;
- }
-
uint8 lvl = getLevel();
if (lvl > 60)
lvl = 60;
@@ -566,8 +572,7 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bo
else if (!CanUseAttackType(attType)) // check if player not in form but still can't use (disarm case)
{
// cannot use ranged/off attack, set values to 0
- // set secondary damages to 0 by default
- if (damageIndex != 0 || attType != BASE_ATTACK)
+ if (attType != BASE_ATTACK)
{
minDamage = 0.f;
maxDamage = 0.f;
@@ -577,7 +582,7 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bo
weaponMinDamage = BASE_MINDAMAGE;
weaponMaxDamage = BASE_MAXDAMAGE;
}
- else if (damageIndex == 0 && attType == RANGED_ATTACK) // add ammo DPS to ranged primary damage
+ else if (attType == RANGED_ATTACK) // add ammo DPS to ranged primary damage
{
weaponMinDamage += GetAmmoDPS() * attackPowerMod;
weaponMaxDamage += GetAmmoDPS() * attackPowerMod;