Documentation for this module may be created at Module:AttackSpeedCalculator/doc
-- (4 + addition) * (1 + multiply)
local p = {}
function Round(val)
return math.floor(val*100)/100
end
function Calculate(Add, AddMin, AddMax, Mult, MultMin, MultMax)
local bitval = 0
if Add ~= 0 then bitval = bitval + 1 end
if AddMin ~= 0 then bitval = bitval + 2 end
if AddMax ~= 0 then bitval = bitval + 4 end
if Mult ~= 0 then
bitval = bitval + 8
Mult = 1 + Mult
end
if MultMin ~= 0 then
bitval = bitval + 16
MultMin = 1 + MultMin
end
if MultMax ~= 0 then
bitval = bitval + 32
MultMax = 1 + MultMax
end
-- Single addition and single multiply
if bitval == 9 then
local as = (4 + Add) * Mult
return Round(as), Round(1/as)
-- Single addition, range multiply
elseif bitval == 49 then
local as1 = (4 + Add) * MultMin
local as2 = (4 + Add) * MultMax
if as1 > as2 then as1, as2 = as2, as1 end
return Round(as1), Round(1/as1), Round(as2), Round(1/as2)
-- Range addition, single multiply
elseif bitval == 14 then
local as1 = (4 + AddMin) * Mult
local as2 = (4 + AddMax) * Mult
if as1 > as2 then as1, as2 = as2, as1 end
return Round(as1), Round(1/as1), Round(as2), Round(1/as2)
-- Range addition, range multiply
elseif bitval == 54 then
local as1 = (4 + AddMin) * MultMin
local as2 = (4 + AddMax) * MultMax
if as1 > as2 then as1, as2 = as2, as1 end
return Round(as1), Round(1/as1), Round(as2), Round(1/as2)
-- No addition, single multiply
elseif bitval == 8 then
local as = 4 * Mult
return Round(as), Round(1/as)
-- No addition, range multiply
elseif bitval == 48 then
local as1 = 4 * MultMin
local as2 = 4 * MultMax
if as1 > as2 then as1, as2 = as2, as1 end
return Round(as1), Round(1/as1), Round(as2), Round(1/as2)
-- Single addition, no multiply
elseif bitval == 1 then
local as = 4 + Add
return Round(as), Round(1/as)
-- Range addition, no multiply
elseif bitval == 6 then
local as1 = 4 * AddMin
local as2 = 4 * AddMax
if as1 > as2 then as1, as2 = as2, as1 end
return Round(as1), Round(1/as1), Round(as2), Round(1/as2)
-- Bruh
else
return nil
end
end
p.Calculate = function(frame)
local clean_args = {}
for k, v in pairs(frame.args) do
if k > 0 then
table.insert(clean_args, k, tonumber(v))
end
end
local as1, as2, as3, as4 = Calculate(unpack(clean_args)) --Getting an error here? change table.unpack to unpack!
if not as1 then
return "Invalid input!"
elseif as3 then
return string.format("%s - %s", frame:callParserFunction("#tip-text", as1, string.format("%s strikes per second", as2)), frame:callParserFunction("#tip-text", as3, string.format("%s strikes per second", as4)))
else
return frame:callParserFunction("#tip-text", as1, string.format("%s seconds per strike", as2))
end
end
return p
-- print(p.Calculate(arg))
-- print(Calculate(tonumber(arg[1]), tonumber(arg[2]), tonumber(arg[3]), tonumber(arg[4]), tonumber(arg[5]), tonumber(arg[6])))