Module:Weapon Calculation: Difference between revisions

From HorizonXI Wiki
No edit summary
No edit summary
 
(15 intermediate revisions by the same user not shown)
Line 7: Line 7:
end
end


function p.dmg (frame)
-- 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 damage = tonumber(frame.args.dmg)
local delay = tonumber(frame.args.delay)
local delay = tonumber(frame.args.delay)
delay = getTrueDelay ( delay )
local weapontype = frame.args.type or nil
local weapontype = frame.args.type or nil
local changes = frame.args.changes or nil
local changes = frame.args.changes or nil
Line 18: Line 27:
dps = round( ( damage * 60 ) / delay, 2 )  
dps = round( ( damage * 60 ) / delay, 2 )  
else  
else  
dps = round( (( damage * 60 ) / ( 480 + delay) * 2 ), 2 )
dps = round( (( damage * 60 ) / ( 480 + delay) * 2 ), 2 )
dps = "+" .. dps
dps = "+" .. dps
end
end
Line 28: Line 37:
-- local damage = tonumber(frame.args.dmg)
-- local damage = tonumber(frame.args.dmg)
local delay = tonumber(frame.args.delay)
local delay = tonumber(frame.args.delay)
delay = getTrueDelay ( delay )
local weapontype = frame.args.type or nil
local weapontype = frame.args.type or nil
local changes = frame.args.changes or nil
local changes = frame.args.changes or nil
Line 34: Line 45:
if not ( weapontype == "hand-to-hand" ) then  
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
delay = delay + 480
if ( delay > 530) then tpph = round( (14.5 + ((( delay - 530) * 3.5) / 470) - 0.05 )* 10 , 1)
if ( delay >= 530 ) then  
elseif ( delay >= 480 ) then tpph = round( (13.0 + ((( delay - 480) * 1.5) / 50) - 0.05) * 10 , 1)
tpph = (14.5 + ((( delay - 50) * 3.5) / 470) - 14.18) * 10  
elseif ( delay >= 450 ) then tpph = round( (11.5 + ((( delay - 450) * 1.5) / 30) - 0.05) * 10 , 1)
elseif ( delay >= 180 ) then tpph = round( (5.0 + ((( delay - 180) * 6.5) / 270) - 0.05) * 10 , 1)
else tpph = round( (5.0 + ((( delay - 180) * 1.5) / 180) - 0.05) * 10 , 1)
end
else
if ( ( delay + 480 ) >= 530 ) then  
tpph = round( (14.5 + ((( delay - 50) * 3.5) / 470) - 14.18) * 10 , 1)
else  
else  
if ( ( delay + 480 ) > 480 ) then
if ( delay > 480 ) then
tpph = round( (13.0 + ((delay * 1.5) / 50) - 13.05) * 10 , 1)
tpph = (13.0 + ((delay * 1.5) / 50) - 13.05) * 10  
else  
else  
tpph = 0
tpph = 0
end
end
end
end
tpph = math.floor(tpph)


tpph = "+" .. tpph
tpph = "+" .. tpph

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