Module:DropRateCalc

From Roat Pkz
Jump to navigation Jump to search

Need to test if Larran's keys are buffed, specifically for Template:CallistoDrops and the other bosses like that.


local p = {}

local buffs = {
    {label = "Base", reduction = 0},
    {label = "Donator", reduction = 0.15},
    {label = "Super donator", reduction = 0.25},
    {label = "Extreme donator", reduction = 0.30},
    {label = "Legendary donator", reduction = 0.35},
    {label = "Royal donator", reduction = 0.40},
    {label = "Divine donator", reduction = 0.45},
}
-- somewhat matches osrs wiki
local function getColor(rate)
    if rate == 1 then
        return "#0b5884"  -- always
    elseif rate <= 16 then
        return "#3c780a"  -- common 
    elseif rate <= 64 then
        return "#a48900"  -- uncommon 
    elseif rate <= 256 then
        return "#b55e0c"  -- rare 
    elseif rate <= 999 then
        return "#9f261e"  -- very rare 
    else
        return "#5c1a1a"  -- extremely rare 
    end
end

function p.calc(frame)
    local base = tonumber(frame.args[1])
    if not base then return "Invalid base rate" end
    local noboost = frame.args[2] == "noboost"
    local cells = {}
    for _, tier in ipairs(buffs) do
        local reduction
        if noboost then
            reduction = 0
        else
            reduction = tier.reduction
        end
        local rate = math.floor(base * (1 - reduction))
        local color = getColor(rate)
        local attrs = ' data-baserate="' .. base .. '"'
                   .. ' data-reduction="' .. tier.reduction .. '"'
        if noboost then
            attrs = attrs .. ' data-noboost="1"'
        end
        table.insert(cells,
            '<td' .. attrs
            .. ' style="background-color:' .. color .. '; color:#ffffff; text-align:center;"'
            .. '>1/' .. rate .. '</td>'
        )
    end
    return table.concat(cells, "")
end


return p