Módulo:Boss collection log

De RuneScape Wiki
Ir para: navegação, pesquisa

A documentação para este módulo pode ser criada em Módulo:Boss collection log/doc

-- <nowiki>
local p = {}

local rarevals = {
	sempre = 1,
	comum = 1/16,
	incomum = 1/64,
	raro = 1/256,
	['muito raro'] = 1/1024,
	varia = 1/4096,
}

--[[
Use this list if a log's item isn't the item being dropped, eg:
"Baby Soulgazer" (log, not dropped) is obtained from "Soulgazer's charm"
--]]
local differentDropItems = {
	['Observador de almas bebê'] = "Talismã de observador de almas",
}

--[[
This is meant to override the rarity where used,
ideally for situations of a more complex nature
--]]
local droprateNotes = {
	['Penny'] = "Vários <ref name='pennyNote' group='n'>Requere uma [[alma sombria|alma]], [[mente sombria|mente]] e um [[Corpo sombrio]]—que possuem taxas de queda de 1/1000, 1/2000, e 1/3000, respectivamente—das sombras [[Sombra verdadeira|verdadeira]], [[Sombra afortunada|afortunada]] e [[Sombra manifesta|manifesta]].</ref>"
}

function raresort(x)
	local noerr, num
	local _x = string.lower(x)
	if rarevals[ _x ] then
		num = rarevals[ _x ]
	else
		noerr, num = pcall(mw.ext.ParserFunctions.expr, x)
		if not noerr then
			num = 1/65536
		end
	end
	num = tonumber(num, 10) or 1/65536
	return num
end

function p.main(frame)
	local args = frame:getParent().args
	
	-- Backwards compatibility and support custom tables and such
	if args.objetos then
		return args.objetos
	end
	
	local t = mw.html.create('table')
	t	:addClass('wikitable lighttable individual boss-collection-log')
	local l = t:tag('tr')
	
	local i = 1
	while args['objeto'..i] do
		local item = args['objeto'..i]
		
		if (differentDropItems[objeto] ~= nil)
		then
			item = differentDropItems[objeto]
		end
		local q = {
			'[[Objeto largado::'..item..']]',
			-- Drops from Raptor's chest of slaying don't contribute to log completion
			"[[-Has subobject::!Raptor's chest of slaying]]",
			-- Only use drop rates from actual monsters, not rewards like trisks and geodes
			"[[Largado de::~*]]",
			'?Raridade',
			limit = 10,
			sort = args.sort,
			order = args.order
		}
		local smwdata = mw.smw.ask(q)
		
		local rarity = ''
		if smwdata then
			local rarities = {}
			for i,v in ipairs(smwdata) do
				table.insert(rarities, { v['Raridade'], raresort(v['Raridade']) })
			end
			table.sort(rarities, function(a,b) return a[2] > b[2] end)
			rarity = ' (' .. rarities[1][1] .. ')'
			if table.getn(rarities) > 1 then
				rarity = rarity..'<ref name="dr" group="n">Essa é a taxa de queda mais alta, veja a página do objeto para as taxas de queda por monstro.</ref>'
			end
		else
			if (droprateNotes[objeto] ~= nil)
			then
				rarity = ' ( '..droprateNotes[objeto]..' )'
			else
				rarity = ' ( [['..item..'|?]] )<ref name="unknown" group="n">Taxa de queda não encontrada, veja a página do objeto.</ref>'
			end
		end
		
		local img = item
		if args['imagem'..i] then
			img = args['imagem'..i]
		end
		
		local text = '[[Arquivo:'..img..'.png|link='..item..']] [['..item..']]' .. rarity
		text = frame:preprocess(text)
		l:tag('td'):wikitext(text)
		
		if i % 4 == 0 then
			-- Start a new line
			l = t:tag('tr')
		end
		
		i = i + 1
	end
	
	return t
end

return p
-- </nowiki>