- diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
- index ef5764b..1394fcc 100755
- --- a/src/server/game/Spells/SpellEffects.cpp
- +++ b/src/server/game/Spells/SpellEffects.cpp
- @@ -716,12 +716,29 @@ void Spell::SpellDamageSchoolDmg(SpellEffIndex effIndex)
- Item *item = m_caster->ToPlayer()->GetWeaponForAttack(RANGED_ATTACK);
- if (item)
- {
- - float dmg_min = item->GetTemplate()->Damage->DamageMin;
- - float dmg_max = item->GetTemplate()->Damage->DamageMax;
- - if (dmg_max == 0.0f && dmg_min > dmg_max)
- - damage += int32(dmg_min);
- + int32 avgDPS = 0;
- + ScalingStatDistributionEntry const *ssd = proto->ScalingStatDistribution ? sScalingStatDistributionStore.LookupEntry(proto->ScalingStatDistribution) : NULL;
- +
- + uint32 ssd_level = getLevel();
- + if (ssd && ssd_level > ssd->MaxLevel)
- + ssd_level = ssd->MaxLevel;
- +
- + ScalingStatValuesEntry const *ssv = proto->ScalingStatValue ? sScalingStatValuesStore.LookupEntry(ssd_level) : NULL;
- + if (ssv)
- + avgDPS = ssv->getDPSMod(proto->ScalingStatValue) * proto->Delay / 1000.0f;
- +
- + if (avgDPS)
- + damage += irand(int32(0.7f * avgDPS), int32(1.3f * avgDPS));
- else
- - damage += irand(int32(dmg_min), int32(dmg_max));
- + {
- + float dmg_min = item->GetTemplate()->Damage->DamageMin;
- + float dmg_max = item->GetTemplate()->Damage->DamageMax;
- + if (dmg_max == 0.0f && dmg_min > dmg_max)
- + damage += int32(dmg_min);
- + else
- + damage += irand(int32(dmg_min), int32(dmg_max));
- + }
- +
- damage += int32(m_caster->ToPlayer()->GetAmmoDPS()*item->GetTemplate()->Delay*0.001f);
- }
- }