Module:Odds

-- --Start Module local p = {} --Required modules local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local string = require('Module:String') local checkType = require('libraryUtil').checkType

--Create aliases for more possible inputs local aliases = { ['g'] = 'guaranteed', ['guaranteed'] = 'guaranteed', ['c'] = 'common loot', ['common'] = 'common loot', ['common loot'] = 'common loot', ['c l'] = 'common loot', ['cl'] = 'common loot', ['o'] = 'occasional', ['occ'] = 'occasional', ['occasional'] = 'occasional', ['uncommon loot'] = 'uncommon loot', ['uc l'] = 'uncommon loot', ['ucl'] = 'uncommon loot', ['r'] = 'rare', ['rare'] = 'rare', ['rare loot'] = 'rare loot', ['r l'] = 'rare loot', ['rl'] = 'rare loot', ['e'] = 'extraordinary', ['extraord'] = 'extraordinary', ['extraordinary'] = 'extraordinary', ['eo'] = 'extraordinary', ['legendary loot'] = 'legendary loot', ['l l'] = 'legendary loot', ['ll'] = 'legendary loot', ['p'] = 'pray rngesus', ['pray'] = 'pray rngesus', ['pray rngesus'] = 'pray rngesus', ['rng'] = 'pray rngesus', ['rngesus'] = 'pray rngesus', ['rngesus loot'] = 'rngesus loot', ['rng loot'] = 'rngesus loot', ['rngl'] = 'rngesus loot', ['r i'] = 'rng incarnate', ['rng i'] = 'rng incarnate', ['rng incarnate'] = 'rng incarnate', ['rngesus incarnate'] = 'rng incarnate', ['rngesus i'] = 'rng incarnate' } --Store data about all odds local odds_data = { ['guaranteed'] = { name="Guaranteed", color="#00a600", percent="100%", order=1, },   ['common loot'] = { name="Common Loot", color="#FFFFFF", percent=">50%", order=2, },   ['occasional'] = { name="Occasional", color="#3f3fff", percent="20%", order=3, },   ['uncommon loot'] = { name="Uncommon Loot", color="#55FF55", percent="≅5%", order=4, },   ['rare'] = { name="Rare", color="#76d4f2", percent="5%", order=5, },   ['rare loot'] = { name="Rare Loot", color="#5555FF", percent="≅1%", order=6, },   ['extraordinary'] = { name="Extraordinary", color="#cc1acc", percent="1%", order=7, },   ['legendary loot'] = { name="Legendary Loot", color="#FFAA00", percent="≅0.05%", order=8, },   ['pray rngesus'] = { name="Pray RNGesus", color="#ff55ff", percent="<1%", order=9, },   ['rngesus loot'] = { name="RNGesus Loot", color="#FF55FF", percent="<0.02%", order=10, },   ['rng incarnate'] = { name="RNGesus Incarnate", color="#ff5555", percent="≪1%", order=11, }, }

--hide the order number function hideAlways(data) return string.wrapHtml(data, ' ', {class={"desktop-hide", "hidden"}}) end

local function format(tier, nameonly, approx) local tier = aliases[tier:lower] or error(string.format('Invalid odds name "%s"', tier), 3) local data = odds_data[tier] return table.concat{ ,       string.wrapHtml{            table.concat{                hideAlways(data.order),                data.name,                nameonly and "" or table.concat{                    ' (',                     (approx and tier ~= "pray rngesus") and "~" or "",                     data.percent,                     ') ',                }            },            ' ',            {                style={                    ["font"]="bold 100% monospace";                    ["color"]=data.color;                }            }        },         } end

- -- Template:Odds -- -- Displays Formatted text relating to drop chance - function p.odds(frame) local args = getArgs(frame) local tier = args[1] local big = yesno(args["big"], false) local nameonly = yesno(args["nameonly"] or args["na"] or args["no"], false) local approx = yesno(args["approximate"] or args["approx"] or args["a"], false) local calc = yesno(args["calc"] or args["cal"] or args["c"], false) local success, response = pcall(p._odds, tier, nameonly, approx, big, calc) return success and response or string.error(response) end - -- Template:Odds Module Acess Point - function p._odds(tier, nameonly, approx, big, calc) if type(tier) == "table" then nameonly = tier.nameonly or tier.na or tier.no or tier[2] approx = tier.approx or tier.app or tier.a or tier[3] big = tier.big or tier.b or tier[4] calc = tier.calc or tier.cal or tier.c or tier[5] tier = tier.tier or tier.t or tier[1] end if tier == nil or tier == "" then return "" end if type(tier) ~= "number" and type(tier) ~= "string" then error(string.format('bad argument #1 to \'_odds\' (string/number expected, got %s)', type(tier)), 2) end tier = tostring(tier) if tier:match('([%d%%]+)') and not calc then return table.concat{ big and "" or ' (',            tier:gsub('%%', ''),             '%',             big and "" or ') ' }   end if calc and tier:match('([%d%%]+)') then tier, _ = tier:gsub('%%', '') tier = tonumber(tier) if tier >= 100 then tier = 'g'       elseif tier >= 75 then tier = 'c'       elseif tier >= 20 then tier = 'o'       elseif tier >= 5 then tier = 'r'       elseif tier >= 1 then tier = 'e'       elseif tier < 1 then tier = 'rng' end end return format(tier, nameonly, approx) end

--Finish Module return p