14712 Posts in 2613 Topics - by 7960 Members - Latest Member: Sumthanbuub

Author Topic: DPS Formula  (Read 1757 times)

nonSENSE Online

  • September 2011
  • 1365 Posts
    • STEAM_0:0:11953676 STEAM_0:0:11953676
« March 09, 2015, 11:41:29 PM » #12806
Since some people were asking me for the DPS (DP10S / 10 would be more accurate), here's a brief overview:

Code: [Select]
-- 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)

« Last Edit: March 09, 2015, 11:43:01 PM by nonSENSE »

0 Members and 1 Guest are viewing this topic.