Editing Module:Rates/Sandbox
From Ephinea PSO Wiki
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 23: | Line 23: | ||
-- | -- | ||
-- | -- Rate calculation accessed through #invoke | ||
-- | -- | ||
-- @param | -- @param frame {table} | ||
-- @return {number} | -- @return {number} | ||
-- | -- | ||
function p.calcRate(frame) | |||
-- Separate the two numbers passed in as strings | |||
local mult = {} | local mult = {} | ||
mult[1] = | mult[1] = frame.args[1] | ||
mult[2] = | mult[2] = frame.args[2] | ||
-- Initialize numbers for string conversion | -- Initialize numbers for string conversion | ||
local frac = {} | local frac = {} | ||
Line 48: | Line 48: | ||
end | end | ||
end | end | ||
-- These probably don't need to be redefined, but I'm still super new to Lua so I'll come back to it later xd | |||
local num1 = frac[1][1] | |||
local den1 = frac[1][2] | |||
local num2 = frac[2][1] | |||
local den2 = frac[2][2] | |||
return (num1/den1)*(num2/den2) | |||
end | end | ||
Line 61: | Line 66: | ||
local function fmtRate(rate, fmt, digits) | local function fmtRate(rate, fmt, digits) | ||
local out = "" | local out = "" | ||
-- Don't want nil comparisons or whatever | |||
if digits == nil then | |||
digits = 0 | |||
end | |||
local frac = {} | local frac = {} | ||
-- If either number is a fraction, split it up into numerator and denominator | -- If either number is a fraction, split it up into numerator and denominator | ||
Line 77: | Line 86: | ||
if fmt == "f" then | if fmt == "f" then | ||
if wholeFractions[rate] == nil then | if wholeFractions[rate] == nil then | ||
-- Set maximum number of decimal places | -- Set maximum number of decimal places | ||
if | if rate < 10 then | ||
-- Displays with two places between 1.01 ~ 9.99 | -- Displays with two places between 1.01 ~ 9.99 | ||
digits = math.max(digits, 2) | digits = math.max(digits, 2) | ||
elseif | elseif rate < 100 then | ||
-- Displays with one place between 10.1 ~ 99.9 | -- Displays with one place between 10.1 ~ 99.9 | ||
digits = math.max(digits, 1) | digits = math.max(digits, 1) | ||
else | |||
-- Otherwise just displays the whole number at 100+ | |||
digits = math.max(digits, 0) | |||
end | end | ||
-- Even if we're displaying one or more decimal places, cut zeroes off | -- Even if we're displaying one or more decimal places, cut zeroes off | ||
Line 103: | Line 112: | ||
-- | -- | ||
-- Rate display accessed through #invoke | -- Rate display accessed through #invoke | ||
-- | -- | ||
-- @param frame {table} | -- @param frame {table} | ||
Line 109: | Line 118: | ||
-- | -- | ||
function p.displayRate(frame) | function p.displayRate(frame) | ||
-- Separate the | -- Separate the rate (number passed in as string) from the format (string) and digits (string). digits parameter is optional | ||
local fmt = frame.args[ | local fmt = frame.args[2] | ||
local digits = frame.args[3] | |||
local rate = {} | local rate = {} | ||
for i=3,#frame,1 do | |||
rate[i] = frame.args[i] | |||
rate[ | |||
end | end | ||
local out = "" | local out = "" | ||
if fmt == "f" then | if fmt == "f" then | ||
-- Fraction | -- Fraction | ||
out = out .. fmtRate(rate[1], "f") | out = out .. fmtRate(rate[1], "f", digits) | ||
elseif fmt == "p" then | elseif fmt == "p" then | ||
-- Percentage | -- Percentage | ||
Line 133: | Line 137: | ||
span | span | ||
:addClass("more_info") | :addClass("more_info") | ||
:attr("title", string.format("Drop Rate: %s (%s) | :wikitext("%s %s", rate[1], rate2) | ||
--:attr("title", string.format("Drop Rate: %s (%s)
Rare Rate: %s (%s)", fmtRate(rate[1], "f", 2), fmtRate(rate[1], "p"), fmtRate(rate[2], "f", 2), fmtRate(rate[2], "p"))) | |||
:css("border-bottom", "1px dotted") | :css("border-bottom", "1px dotted") | ||
:wikitext(string.format("%s", fmtRate(calcRate(rate[1], rate[2]) | --:wikitext(string.format("%s", fmtRate(p.calcRate(rate[1], rate[2])))) | ||
--out = out .. fmtRate(rate, "f", 2) .. " (" .. fmtRate(rate, "p") .. ")" | --out = out .. fmtRate(rate, "f", 2) .. " (" .. fmtRate(rate, "p") .. ")" | ||
return span:allDone() | return span:allDone() |