Module:DropsLineClue

From Old School Near-Reality Wiki
Jump to navigation Jump to search

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

local p = {}

local string = string
local commas = require('Module:Addcommas')._add

function p.main(frame)
	local args = frame:getParent().args
	local type = args.type
	local rarity = args.rarity
	local altrarity = args.altrarity
	local altraritydash = args.altraritydash
	local raritynotes = args.raritynotes ~= nil and args.raritynotes ~= '' and args.raritynotes or nil
	local f2p = args.f2p ~= nil and args.f2p ~= '' and frame:expandTemplate{ title='(m)' } or nil
	local skill = args.skill ~= nil and args.skill ~= '' and args.skill or nil
	local reward = args.reward ~= nil and args.reward ~= '' and args.reward or nil
	local noteoverride = args.noteoverride ~= nil and args.noteoverride ~= '' and args.noteoverride or nil
	local smw = args.smw
	local templateName
	local note
	
	if skill ~= nil then
		templateName = 'DropsLineSkill'
	elseif reward ~= nil then
		templateName = 'DropsLineReward'
	else
		templateName = 'DropsLine'	
	end
	
	local adjusted = getAdjustedRarity(rarity, altrarity)
	local ret = mw.html.create('tr')
	local altnote = altrarity ~= nil and string.format('%s%s', altraritydash ~= nil and '–' or '; ', adjusted.alt) or ''
	
	if noteoverride ~= nil then
		note = noteoverride
	else
		note = string.format('The %s clue scroll drop rate increases to %s%s with the completion of the [[%s Combat Achievements|%s combat achievements]].', type, adjusted.original, altnote, type, type)
	end
	
	local refnote = frame:extensionTag{ name = 'ref', content = note, args = { group = 'd' } }
	if raritynotes ~= nil then
		refnote = refnote .. raritynotes	
	end
	ret:wikitext(frame:expandTemplate{ title=templateName, args = { name = string.format('Clue scroll (%s)', type), quantity = 1, rarity = rarity, altrarity = altrarity, altraritydash = altraritydash, raritynotes = refnote, namenotes = f2p, gemw = 'no', smw = smw, skill = skill } })
	
	return tostring(ret)
end

function getAdjustedRarity(rarity, altrarity)
	local modifier = 0.05
	local rv1, rv2 = string.match(rarity, '([%d%.]+)/([%d%.]+)')
	local arv1, arv2
	local adjustedrarity, adjustedaltrarity
	if altrarity then
		arv1, arv2 = string.match(altrarity, '([%d%.]+)/([%d%.]+)')
		if tonumber(arv1) > 1 then
			local reduced = arv2 / arv1
			adjustedaltrarity = string.format('%s/%s', 1, commas(math.floor((reduced - (reduced * modifier)))))
		else
			adjustedaltrarity = string.format('%s/%s', arv1, commas(math.floor((arv2 - (arv2 * modifier)))))
		end
	end
	
	if tonumber(rv1) > 1 then
		local reduced = rv2 / rv1
		adjustedrarity = string.format('%s/%s', 1, commas(math.floor((reduced - (reduced * modifier)))))
	else
		adjustedrarity = string.format('%s/%s', rv1, commas(math.floor((rv2 - (rv2 * modifier)))))
	end
	
	return { original = adjustedrarity, alt = adjustedaltrarity }
end

return p