Module:Master farmer special seed calculator

Module documentation
This documentation is transcluded from Template:No documentation/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:Master farmer special seed calculator/doc. [edit]
Module:Master farmer special seed calculator's function main is invoked by Calculator:Thieving/Master farmer special seed table.
Module:Master farmer special seed calculator requires Module:Addcommas.
Module:Master farmer special seed calculator loads data from Module:GEPrices/data.json.

local p = {}

local prices = mw.loadJsonData('Module:GEPrices/data.json')
local commas = require('Module:Addcommas')._add

local HerbSeedTable = {
	{ name = 'Guam seed', image = 'File:Guam seed.png', qty = 1, numerator = 320, denom = 1000 },
	{ name = 'Ranarr seed', image = 'File:Ranarr seed.png', qty = 1, numerator = 69, denom = 81 },
	{ name = 'Snapdragon seed', image = 'File:Snapdragon seed.png', qty = 1, numerator = 10, denom = 81 },
	{ name = 'Torstol seed', image = 'File:Torstol seed.png', qty = 1, numerator = 2, denom = 81 },
}

local raritiesClass = {
    { 1, 'table-bg-blue' },
    { 1/25, 'table-bg-green' },
    { 1/99.99, 'table-bg-yellow' },
    { 1/999.99, 'table-bg-orange' },
    { 1/9999999, 'table-bg-red' }
}

function getRarityClass(val)
    for _, rarity in ipairs(raritiesClass) do
        if(val >= rarity[1]) then
            return rarity[2]
        end
    end
end

function buildRow(seed, rarity, rarityValue)
	local row = mw.html.create('tr')
	row:tag('td'):wikitext('[[' .. seed.image .. ']]'):done()
		:tag('td'):wikitext('[[' .. seed.name .. ']]'):done()
		:tag('td'):wikitext(seed.qty):done()
		:tag('td'):addClass(getRarityClass(rarityValue)):wikitext(rarity):done()
		:tag('td'):wikitext(commas(prices[seed.name])):done()
	return row
end

function specialHerbTableChance(farmingLevel)
	return (6 + math.min(85, farmingLevel)) / 1000
end

function p._main(args)
	local farmingLevel = tonumber(args.farmingLevel) or 1

	local ret = mw.html.create('table'):addClass('wikitable sortable filterable autosort=4,a align-center-1 align-left-2 align-center-3 align-center-4 align-right-5 align-right-6'):done()
	ret:tag('tr'):tag('th'):attr('colspan', '2'):wikitext('Item'):done()
		:tag('th'):wikitext('Quantity'):done()
		:tag('th'):wikitext('Rarity'):done()
		:tag('th'):wikitext('Price'):done()

	for _, seed in ipairs(HerbSeedTable) do
		-- Slots are either added to or subtracted from guam seeds
		-- Then 81 of guam's slots are redistributed to other seeds
		baseRarity = seed.numerator / seed.denom
		if(seed.name == 'Guam seed') then
			rarity = baseRarity + 81/1000 - specialHerbTableChance(farmingLevel)
		else
			rarity = baseRarity * specialHerbTableChance(farmingLevel)
		end
		
		local rarityValue = rarity * 48/1000
		seed.denom = 1 / rarityValue

		local denomTxt = string.format("%.2f", seed.denom)
		local rarityText = '1/' .. commas(denomTxt)

		ret:node(buildRow(seed, rarityText, rarityValue))
	end

	return ret
end

function p.main(frame)
	local args = frame.args
	return p._main(args)
end

return p