diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 35 | 
1 files changed, 25 insertions, 10 deletions
| diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index c2b6063d7b0..47e04d984de 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -447,16 +447,31 @@ void Player::UpdateAttackPowerAndDamage(bool ranged)          {              float strengthValue = std::max(GetStat(STAT_STRENGTH) * entry->AttackPowerPerStrength, 0.0f);              float agilityValue = std::max(GetStat(STAT_AGILITY) * entry->AttackPowerPerAgility, 0.0f); +            float classSpecificBonus = [&]() -> float +            { +                switch (GetClass()) +                { +                    case CLASS_WARRIOR: +                    case CLASS_PALADIN: +                    case CLASS_DEATH_KNIGHT: +                        return GetLevel() * 3.0 - 20.0f; +                    case CLASS_ROGUE: +                    case CLASS_HUNTER: +                    case CLASS_SHAMAN: +                    case CLASS_DRUID: +                        return GetLevel() * 2.0 - 20.0f; +                    default: +                        return -20.0f; +                } + +                return 0.0f; +            }(); + +            val2 = strengthValue + agilityValue + classSpecificBonus; -            SpellShapeshiftFormEntry const* form = sSpellShapeshiftFormStore.LookupEntry(GetShapeshiftForm()); -            // Directly taken from client, SHAPESHIFT_FLAG_AP_FROM_STRENGTH ? -            if (form && form->Flags & 0x20) -                agilityValue += std::max(GetStat(STAT_AGILITY) * entry->AttackPowerPerStrength, 0.0f); - -            val2 = strengthValue + agilityValue;          }          else -            val2 = (level + std::max(GetStat(STAT_AGILITY), 0.0f)) * entry->RangedAttackPowerPerAgility; +            val2 = (level + std::max(GetStat(STAT_AGILITY), 0.0f)) * entry->RangedAttackPowerPerAgility - 10.0f;      }      else      { @@ -533,7 +548,7 @@ void Player::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized, bo      float attackPowerMod = std::max(GetAPMultiplier(attType, normalized), 0.25f); -    float baseValue  = GetFlatModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType, false) / 3.5f * attackPowerMod; +    float baseValue  = GetFlatModifierValue(unitMod, BASE_VALUE) + 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; @@ -1066,7 +1081,7 @@ void Creature::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized,      float attackPower      = GetTotalAttackPowerValue(attType, false);      float attackSpeedMulti = GetAPMultiplier(attType, normalized); -    float baseValue        = GetFlatModifierValue(unitMod, BASE_VALUE) + (attackPower / 3.5f) * variance; +    float baseValue        = GetFlatModifierValue(unitMod, BASE_VALUE) + (attackPower / 14.0f) * variance;      float basePct          = GetPctModifierValue(unitMod, BASE_PCT) * attackSpeedMulti;      float totalValue       = GetFlatModifierValue(unitMod, TOTAL_VALUE);      float totalPct         = addTotalPct ? GetPctModifierValue(unitMod, TOTAL_PCT) : 1.0f; @@ -1348,7 +1363,7 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType)      float att_speed = float(GetBaseAttackTime(BASE_ATTACK))/1000.0f; -    float base_value  = GetFlatModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType, false) / 3.5f * att_speed + bonusDamage; +    float base_value  = GetFlatModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType) / 14.0f * att_speed + bonusDamage;      float base_pct    = GetPctModifierValue(unitMod, BASE_PCT);      float total_value = GetFlatModifierValue(unitMod, TOTAL_VALUE);      float total_pct   = GetPctModifierValue(unitMod, TOTAL_PCT); | 
