Since some people were asking me for the DPS (DP10S / 10 would be more accurate), here's a brief overview:
-- Previous calculations for weapon stats
-- The average damage per hit, based on weapon base damage
local avgDmg = (newWeapon.MinDamage + newWeapon.MaxDamage) / 2
-- Apply enhanced damage first
local ed = (stats.EnhancedDamage + 100) / 100
newWeapon.MinDamage = math.Round(newWeapon.MinDamage * ed, 2)
newWeapon.MaxDamage = math.Round(newWeapon.MaxDamage * ed, 2)
-- Now modify min and max damage
newWeapon.MaxDamage = newWeapon.MaxDamage + stats.MaxDamage
-- Accuracy is added onto the existing accuracy rate
newWeapon.Accuracy = math.min(newWeapon.Accuracy + stats.Accuracy, 100) -- capped at 100%
-- Attack speed
local ias = (stats.AttackSpeed + 100) / 100
newWeapon.FireRate = math.Round(newWeapon.FireRate / ias, 2)
-- New elemental damage: by UnknownX
-- Treat as percentage-based damage
-- 1 cold damge = 1% damage increase
newWeapon.ColdDamage = math.ceil((stats.ColdDamage / 100) * avgDmg)
newWeapon.FireDamage = math.ceil((stats.FireDamage / 100) * avgDmg)
-- Actual DP10S Formula
local numBullets = newWeapon.NumBullets
-- If number of bullets higher than 0 and not 1, use a divider, else use 1
local div = (numBullets != 1 and numBullets > 0 and numBullets) or 1
local reloadTime = newWeapon.ReloadTime
local fireRate = newWeapon.FireRate
-- If melee weapon, use 1 as clipsize
local clipsize = (newWeapon.ClipSize > 0 and newWeapon.ClipSize) or 1
local avgRealDmg = (newWeapon.MinDamage + newWeapon.MaxDamage) / 2
local dmg = avgRealDmg + (newWeapon.ColdDamage / div) + (newWeapon.FireDamage / div)
-- DPC = damage per clip
local dpc = dmg * clipsize
local dp10s = (10 / (reloadTime + (fireRate * clipsize) / div)) * dpc + 10*newWeapon.PoisonDamage
-- This is the number we display!
local dps = math.Round(dp10s / 10, 1)