The Outer Worlds Wiki
Advertisement

Documentation for this module may be created at Module:Infobox/doc

local p = {}

function roundToDec(baseDMG)
    local n = 10^(0)
    baseDMG = baseDMG * n
    if baseDMG >= 0 then x = math.floor(baseDMG + 0.5) else baseDMG = math.ceil(baseDMG - 0.5) end
    return baseDMG / n
end

function round(baseDMG)
  return baseDMG>=0 and math.floor(baseDMG + 0.5) or math.ceil(baseDMG - 0.5)
end

function p.damage(frame)
    level = tonumber(frame.args["level"])
    modifier = tonumber(frame.args["modifier"])
    if pcall(tonumber(frame.args["dmgMultiplier"]), false) ~= false then
    	multiplier = tonumber(frame.args["dmgMultiplier"])
    else
    	multiplier = 0
    end
	if level ~= nil and modifier ~= nil then
	
	    if level <9 then
    	        baseDMG = modifier*10/1
	    else if level < 19 then
    	        baseDMG = modifier*10/2
        	else if level < 40 then
            	baseDMG = modifier*10/2.9
	            else
    	             baseDMG = modifier*10/3
        	    end
	        end
    	end
 
 		modifier1 = roundToDec(baseDMG*0.1)
    	modifier2 = roundToDec(baseDMG*0.2)
	    modifier3 = roundToDec(baseDMG*0.29)
	    modifier4 = roundToDec(baseDMG*0.3)
 
	    if multiplier <= 0 then
    	    baseDMG = round(baseDMG)
        	maxDMG = round(baseDMG+modifier1*8+modifier2*10+modifier3*11+modifier4*5)
	        result = (baseDMG .. "→" .. maxDMG)
    	else
        	baseDMG = round(baseDMG)
	        maxDMG = round(baseDMG+modifier1*8+modifier2*10+modifier3*11+modifier4*5)
    	    result = (baseDMG .. " (x" .. multiplier .. ")" .. "→" .. maxDMG .. " (x" .. multiplier .. ")")
	   end
 	else
		result = ''
	end
	
    return result
 
end

function p.dps(frame)
    rate = tonumber(frame.args["rate"])
    level = tonumber(frame.args["level"])
    modifier = tonumber(frame.args["modifier"])
    multiplier = tonumber(frame.args["dmgMultiplier"])
    --Temporary for shotguns
    damageMax = tonumber(frame.args["damageMax"])
    
	if rate ~= nil and level ~= nil and modifier ~= nil and multiplier ~= nil then

	    if level <9 then
    	        baseDMG = modifier*10/1
	    else if level < 19 then
    	        baseDMG = modifier*10/2
        	else if level < 40 then
            	baseDMG = modifier*10/2.9
	            else
    	             baseDMG = modifier*10/3
        	    end
	        end
	    end
    
	    modifier1 = roundToDec(baseDMG*0.1)
    	modifier2 = roundToDec(baseDMG*0.2)
	    modifier3 = roundToDec(baseDMG*0.29)
    	modifier4 = roundToDec(baseDMG*0.3)

	    baseDMG = round(baseDMG)

    	maxDMG = round(baseDMG+modifier1*8+modifier2*10+modifier3*11+modifier4*5)
    
	    --baseROF = round(baseDMG *  rate)
    	--maxROF = round(maxDMG * rate)
    
	    if multiplier <= 0 then
    	    baseROF = round(round(baseDMG) *  rate)
        	maxROF = round(round(maxDMG) * rate)
	        result = (baseROF .. "→" .. maxROF)
    	else
        	baseROF = round(round(baseDMG) *  rate)
	        maxROF = round(round(maxDMG) * rate)
    	    result = (baseROF .. " (x" .. multiplier .. ")" .. "→" .. maxROF .. " (x" .. multiplier .. ")")
	   end
	end
    return result
    
end

function p.rate(frame)
    string = string.lower(frame.args[1])
    string = mw.text.trim(string, "\n")
    if string == "1-handed" or string == "2-handed" then
        result = "Swing rate"
    else 
        result = "Rate of fire"
    end
 
    return result
end

return p
Advertisement