Module:Weapon Calculation: Difference between revisions

From HorizonXI Wiki
No edit summary
No edit summary
Line 1: Line 1:
local p = {}     
local p = {}     


function round(num)
-- http://lua-users.org/wiki/SimpleRound
   return math.floor(num * 100 + 0.5) / 100
function round(num, numDecimalPlaces)
  local mult = 10^(numDecimalPlaces or 0)
   return math.floor(num * mult + 0.5) / mult
end
end


function p.test (frame)
function p.dmg (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)
Line 11: Line 13:
local changes = frame.args.changes or nil
local changes = frame.args.changes or nil
local dps,tps;
local dps;
if not ( weapontype == "hand-to-hand" ) then  
if not ( weapontype == "hand-to-hand" ) then  
dps = round( ( damage * 60 ) / delay )  
dps = round( ( damage * 60 ) / delay, 2 )  
else  
else  
dps = round( ( damage * 60 ) / ( 480 + delay) * 2  )
dps = round( (( damage * 60 ) / ( 480 + delay) * 2 ), 2  )
dps = "+" .. dps
dps = "+" .. dps
end
end


return dps
return dps
end
end


function p.tphit (frame)
local damage = tonumber(frame.args.dmg)
local delay = tonumber(frame.args.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 ( damage > 530) then tpph = round( (14.5 + ((( damage - 530) * 3.5) / 470) - 0.05) , 1) * 10
elseif ( damage >= 480 ) then tpph = round( (13.0 + ((( damage - 480) * 1.5) / 50) - 0.05) , 1) * 10
elseif ( damage >= 450 ) then tpph = round( (11.5 + ((( damage - 450) * 1.5) / 30) - 0.05) , 1) * 10
elseif ( damage >= 180 ) then tpph = round( (5.0 + ((( damage - 180) * 6.5) / 270) - 0.05) , 1) * 10
else tpph = round( (5.0 + ((( damage - 180) * 1.5) / 180) - 0.05) , 1) * 10
end
else
if ( ( damage + 480 ) >= 530 ) then
tpph = round( (14.5 + ((( damage - 50) * 3.5) / 470) - 14.18),  1) * 10
else
if ( ( damage + 480 ) > 480 ) then
tpph = round( (13.0 + ((damage * 1.5) / 50) - 13.05),  1) * 10
else
tpph = 0
end
end
tpph = "+" .. tpph
end


-- 2 == DMG, 3 == DELAY
return tpph
-- {{#switch:{{{1|}}}
end
-- | dps | damage per second = {{#iferror:{{#expr:{{{2}}} + {{{3}}}}}||{{#ifeq:hand-to-hand|{{lc:{{{type}}}}}|+{{#expr: ({{{2}}} * 60) / (480 + {{{3}}}) * 2 round 2}}|{{#expr: ({{{2}}} * 60) / {{{3}}} round 2}} }} }}
-- | tp per hit = {{#iferror:{{#expr:{{{2|}}}}}||{{#ifeq:hand-to-hand|{{lc:{{{type}}}}}|+<!---
-- --->{{#ifexpr:({{{2}}} + 480) >= 530|{{#expr:(14.5 + ((({{{2}}} - 50) * 3.5) / 470) - 14.18 round 1) * 10}}|<!---
-- --->{{#ifexpr:({{{2}}} + 480) > 480|{{#expr:(13.0 + ((({{{2}}} + 0) * 1.5) / 50) - 13.05 round 1) * 10}}|0}} }}|<!---
-- --->{{#ifexpr:{{{2}}} >= 530|{{#expr:(14.5 + ((({{{2}}} - 530) * 3.5) / 470) - 0.05 round 1) * 10}}|<!---
-- --->{{#ifexpr:{{{2}}} >= 480|{{#expr:(13.0 + ((({{{2}}} - 480) * 1.5) / 50) - 0.05 round 1) * 10}}|<!---
-- --->{{#ifexpr:{{{2}}} >= 450|{{#expr:(11.5 + ((({{{2}}} - 450) * 1.5) / 30) - 0.05 round 1) * 10}}|<!---
-- --->{{#ifexpr:{{{2}}} >= 180|{{#expr:(5.0 + ((({{{2}}} - 180) * 6.5) / 270) - 0.05 round 1) * 10}}|<!---
-- --->{{#ifexpr:{{{2}}} >= 0|{{#expr:(5.0 + ((({{{2}}} - 180) * 1.5) / 180) - 0.05 round 1) * 10}}|}} }} }} }} }} }} }}
-- }}




return p
return p

Revision as of 11:41, 2 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

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

		tpph = "+" .. tpph
	end

	return tpph
end


return p