Module:Weapon Calculation: Difference between revisions
From Horizon Wiki Mirror
Content deleted Content added
imported>Starfox9507 No edit summary |
imported>Starfox9507 No edit summary |
||
| (26 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
local p = {} |
local p = {} |
||
-- http://lua-users.org/wiki/SimpleRound |
|||
local function parseInput ( input ) |
|||
function round(num, numDecimalPlaces) |
|||
if ( input.tonumber() ) then return input end |
|||
local mult = 10^(numDecimalPlaces or 0) |
|||
return math.floor(num * mult + 0.5) / mult |
|||
| ⚫ | |||
-- this calculation is done in the game engine, |
|||
-- highlighting that the delays used in the DATs |
|||
-- are not precisely accurate within the game engine calcs |
|||
function getTrueDelay ( delay ) |
|||
return math.floor( math.floor(delay * 1000 / 60) * 60 / 1000) |
|||
end |
|||
| ⚫ | |||
| ⚫ | |||
local delay = tonumber(frame.args.delay) |
|||
delay = getTrueDelay ( delay ) |
|||
local |
local weapontype = frame.args.type or nil |
||
local |
local changes = frame.args.changes or nil |
||
return number, finalstring |
|||
local dps; |
|||
| ⚫ | |||
if not ( weapontype == "hand-to-hand" ) then |
|||
dps = round( ( damage * 60 ) / delay, 2 ) |
|||
else |
|||
dps = round( (( damage * 60 ) / ( 480 + delay) * 2 ), 2 ) |
|||
dps = "+" .. dps |
|||
end |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
end |
end |
||
function p.tphit (frame) |
|||
-- local damage = tonumber(frame.args.dmg) |
|||
local delay = tonumber(frame.args.delay) |
|||
delay = getTrueDelay ( delay ) |
|||
local weapontype = frame.args.type or nil |
|||
local changes = frame.args.changes or nil |
|||
local tpph; |
|||
if not ( weapontype == "hand-to-hand" ) then |
|||
if ( delay > 530) then tpph = (14.5 + ((( delay - 530) * 3.5) / 470) ) * 10 |
|||
elseif ( delay >= 480 ) then tpph = (13.0 + ((( delay - 480) * 1.5) / 50) ) * 10 |
|||
elseif ( delay >= 450 ) then tpph = (11.5 + ((( delay - 450) * 1.5) / 30) ) * 10 |
|||
elseif ( delay >= 180 ) then tpph = (5.0 + ((( delay - 180) * 6.5) / 270) ) * 10 |
|||
else tpph = (5.0 + ((( delay - 180) * 1.5) / 180) ) * 10 |
|||
end |
|||
tpph = math.floor(tpph) |
|||
else |
|||
delay = delay + 480 |
|||
if ( delay >= 530 ) then |
|||
tpph = (14.5 + ((( delay - 50) * 3.5) / 470) - 14.18) * 10 |
|||
else |
|||
if ( delay > 480 ) then |
|||
tpph = (13.0 + ((delay * 1.5) / 50) - 13.05) * 10 |
|||
else |
|||
tpph = 0 |
|||
end |
|||
end |
|||
tpph = math.floor(tpph) |
|||
tpph = "+" .. tpph |
|||
end |
|||
return tpph |
|||
end |
|||
return p |
return p |
||
Latest revision as of 18:05, 4 July 2025
Documentation for this module may be created at Module:Weapon Calculation/doc
local p = {}
-- http://lua-users.org/wiki/SimpleRound
function round(num, numDecimalPlaces)
local mult = 10^(numDecimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end
-- this calculation is done in the game engine,
-- highlighting that the delays used in the DATs
-- are not precisely accurate within the game engine calcs
function getTrueDelay ( delay )
return math.floor( math.floor(delay * 1000 / 60) * 60 / 1000)
end
function p.dps (frame)
local damage = tonumber(frame.args.dmg)
local delay = tonumber(frame.args.delay)
delay = getTrueDelay ( delay )
local weapontype = frame.args.type or nil
local changes = frame.args.changes or nil
local dps;
if not ( weapontype == "hand-to-hand" ) then
dps = round( ( damage * 60 ) / delay, 2 )
else
dps = round( (( damage * 60 ) / ( 480 + delay) * 2 ), 2 )
dps = "+" .. dps
end
return dps
end
function p.tphit (frame)
-- local damage = tonumber(frame.args.dmg)
local delay = tonumber(frame.args.delay)
delay = getTrueDelay ( delay )
local weapontype = frame.args.type or nil
local changes = frame.args.changes or nil
local tpph;
if not ( weapontype == "hand-to-hand" ) then
if ( delay > 530) then tpph = (14.5 + ((( delay - 530) * 3.5) / 470) ) * 10
elseif ( delay >= 480 ) then tpph = (13.0 + ((( delay - 480) * 1.5) / 50) ) * 10
elseif ( delay >= 450 ) then tpph = (11.5 + ((( delay - 450) * 1.5) / 30) ) * 10
elseif ( delay >= 180 ) then tpph = (5.0 + ((( delay - 180) * 6.5) / 270) ) * 10
else tpph = (5.0 + ((( delay - 180) * 1.5) / 180) ) * 10
end
tpph = math.floor(tpph)
else
delay = delay + 480
if ( delay >= 530 ) then
tpph = (14.5 + ((( delay - 50) * 3.5) / 470) - 14.18) * 10
else
if ( delay > 480 ) then
tpph = (13.0 + ((delay * 1.5) / 50) - 13.05) * 10
else
tpph = 0
end
end
tpph = math.floor(tpph)
tpph = "+" .. tpph
end
return tpph
end
return p