1. diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
  2. index ef5764b..1394fcc 100755
  3. --- a/src/server/game/Spells/SpellEffects.cpp
  4. +++ b/src/server/game/Spells/SpellEffects.cpp
  5. @@ -716,12 +716,29 @@ void Spell::SpellDamageSchoolDmg(SpellEffIndex effIndex)
  6. Item *item = m_caster->ToPlayer()->GetWeaponForAttack(RANGED_ATTACK);
  7. if (item)
  8. {
  9. - float dmg_min = item->GetTemplate()->Damage->DamageMin;
  10. - float dmg_max = item->GetTemplate()->Damage->DamageMax;
  11. - if (dmg_max == 0.0f && dmg_min > dmg_max)
  12. - damage += int32(dmg_min);
  13. + int32 avgDPS = 0;
  14. + ScalingStatDistributionEntry const *ssd = proto->ScalingStatDistribution ? sScalingStatDistributionStore.LookupEntry(proto->ScalingStatDistribution) : NULL;
  15. +
  16. + uint32 ssd_level = getLevel();
  17. + if (ssd && ssd_level > ssd->MaxLevel)
  18. + ssd_level = ssd->MaxLevel;
  19. +
  20. + ScalingStatValuesEntry const *ssv = proto->ScalingStatValue ? sScalingStatValuesStore.LookupEntry(ssd_level) : NULL;
  21. + if (ssv)
  22. + avgDPS = ssv->getDPSMod(proto->ScalingStatValue) * proto->Delay / 1000.0f;
  23. +
  24. + if (avgDPS)
  25. + damage += irand(int32(0.7f * avgDPS), int32(1.3f * avgDPS));
  26. else
  27. - damage += irand(int32(dmg_min), int32(dmg_max));
  28. + {
  29. + float dmg_min = item->GetTemplate()->Damage->DamageMin;
  30. + float dmg_max = item->GetTemplate()->Damage->DamageMax;
  31. + if (dmg_max == 0.0f && dmg_min > dmg_max)
  32. + damage += int32(dmg_min);
  33. + else
  34. + damage += irand(int32(dmg_min), int32(dmg_max));
  35. + }
  36. +
  37. damage += int32(m_caster->ToPlayer()->GetAmmoDPS()*item->GetTemplate()->Delay*0.001f);
  38. }
  39. }