Módulo:Get drop info

De RuneScape Wiki
Ir para: navegação, pesquisa
Documentação do módulo
Esta documentação é transcluída de Predefinição:Sem documentação/doc. [editar] [atualizar]
Este módulo não possui nenhuma documentação. Por favor, considere adicionar uma documentação em Módulo:Get drop info/doc. [editar]
Módulo:Get drop info's a função main é invocada por Predefinição:Lista de objetos largados.
Módulo:Get drop info requer Módulo:ItemDropsLine.
Módulo:Get drop info requer Módulo:Purge.
Módulo:Get drop info requer Módulo:Yesno.
Módulo:Get drop info carrega dados de Módulo:Get drop info/rewards.

-- <nowiki>
local line = require('Módulo:ItemDropsLine')._main
local yesno = require('Módulo:Yesno')
local purge = require('Módulo:Purge')._purge
local p = {}

local _comimg = '<span class="drops-combat" style="margin-left:0.3em;">[[Arquivo:Multicombate.png|link=Nível de combate|frameless|20px]]</span>'
local _thvimg = '<span class="drops-thieving" style="margin-left:0.3em;">[[Arquivo:Roubo_ícone.png|link=Roubo|frameless|20px]]</span>'
local _hunimg = '<span class="drops-hunter" style="margin-left:0.3em;">[[Arquivo:Caça_ícone.png|link=Caça|frameless|20px]]</span>'
local _farimg = '<span class="drops-farming" style="margin-left:0.3em;">[[Arquivo:Agricultura_ícone.png|link=Agricultura|frameless|20px]]</span>'
local _rewimg = '<span class="drops-reward" style="margin-left:0.3em;">[[Arquivo:Baú.png|link=|frameless|20px|Recompensa]]</span>'
local _arcimg = '<span class="drops-archaeology" style="margin-left:0.3em;">[[Arquivo:Arqueologia-ícone.png|link=Arqueologia|frameless|20px]]</span>'
local _fisimg = '<span class="drops-fishing" style="margin-left:0.3em;">[[Arquivo:Pesca-ícone.png|link=Pesca|frameless|20px]]</span>'
local _minimg = '<span class="drops-mining" style="margin-left:0.3em;">[[Arquivo:Mineração-ícone.png|link=Mineração|frameless|20px]]</span>'
local _wdcimg = '<span class="drops-woodcutting" style="margin-left:0.3em;">[[Arquivo:Corte_de_lenha-ícone.png|link=Corte de Lenha|frameless|20px]]</span>'
local _divimg = '<span class="drops-divination" style="margin-left:0.3em;">[[Arquivo:Divinação-ícone.png|link=Divinação|frameless|20px]]</span>'

local rewimg = '<span class="drops-reward" style="margin-left:0.3em;">[[Arquivo:%s|link=|frameless|20px|%s]]</span>'
local rewsrcs = mw.loadData('Módulo:Get drop info/rewards')

local memberstring = {
	yes = 'yes',
	[true] = 'yes',
	['true'] = 'yes',
	no = 'no',
	[false] = 'no',
	['false'] = 'no',
	both = 'both',
	['?'] = '?',
	['n/a'] = 'n/a'
}

function p.main(frame)
	return p._main(frame:getParent().args)
end
function p.test(i)
	return p._main({item = i})
end
function p._main(args)
	local item = args.item or args[1]
	local smwitem
	if item then
		local cleanedName = item
		local dropVers = ''
		if item:match(' %(%d%)$') then
			cleanedName, dropVers = mw.ustring.match(item, '^(.-) (%(%d%))$')
		elseif item:match('%#') then
			cleanedName, dropVers = mw.ustring.match(item, '^(.-)%#([%w%s%(%)]+)$')
		end
		if dropVers ~= nil and dropVers ~= '' then
			smwitem = cleanedName .. '#' .. dropVers
		end
	else
		item = mw.title.getCurrentTitle().text
	end
	if not smwitem then
		smwitem = item
	end
	
	local difrdt = '[[Objeto largado da RDT::'..smwitem..']]'
	local q = {
		'[[Objeto largado::'..smwitem..']]',
		'?Objeto largado texto',
		'?Largado de#-',
		'?Saqueado de#-',
		'?Caçado por#-',
		'?Produzido por#-',
		'?Escavado de#-',
		'?Pescado de#-',
		'?Minerado de#-',
		'?Cortado de#-',
		'?Colhido de#-',
		'?Recompensa de#-',
		'?Notas de nome',
		'?Quantidade largada',
		'?Quantidade máxima',
		'?Quantidade mínima',
		'?Raridade',
		'?Notas de raridade',
		'?Notas de raridade Ref',
		'?Objeto largado.All É somente para membros=mob All É somente para membros',
		'?Objeto largado.É somente para membros=mob É somente para membros',
		'?Largado de.Nível de combate=mob Nível de combate',
		'?Largado de.All Nível de combate=mob All Nível de combate',
		'?Saqueado de.Nível de Roubo=mob Nível de Roubo',
		'?Saqueado de.All Nível de Roubo=mob All Nível de Roubo',
		'?Caçado por.Nível de Caça=mob Nível de Caça',
		'?Caçado por.All Nível de Caça=mob All Nível de Caça',
		'?Produzido por.Nível de Agricultura=mob Nível de Agricultura',
		'?Produzido por.All Nível de Agricultura=mob All Nível de Agricultura',
		'?Nível de Arqueologia',
		'?Escavado de.Nível de Arqueologia=mob Nível de Arqueologia',
		'?Escavado de.All Nível de Arqueologia=mob Nível de Arqueologia',
		'?Pescado de.Nível de Pesca=mob Nível de Pesca',
		'?Pescado de.All Nível de Pesca=mob All Nível de Pesca',
		'?Minerado de.Nível de Mineração=mob Nível de Mineração',
		'?Minerado de.All Nível de Mineração=mob All Nível de Mineração',
		'?Cortado de.Nível de Corte de Lenha=mob Nível de Corte de Lenha',
		'?Cortado de.All Nível de Corte de Lenha=mob All Nível de Corte de Lenha',
		'?Coletado de.Nível de Divinação=mob Nível de Divinação',
		'?Coletado de.All Nível de Divinação=mob All Nível de Divinação',
		limit = args.limit or 100,
		sort = args.sort,
		order = args.order
	}

	local smwdata = mw.smw.ask(q)
	mw.logObject(smwdata)
	
	if not smwdata then
		return ":''Nenhuma forma de obter encontrada. Para forçar uma atualização, clique "
				..purge('dml-'..mw.uri.anchorEncode(item), 'aqui', 'span')
				..".''[[Categoria:Lista de objetos largados vazia]]"
	end
	
	local ret = {}
	local hasRefs = false
	if smwdata then
		for i,v in ipairs(smwdata) do
			if v['Notas de raridade Ref'] then
				hasRefs = true
			end
			for j,u in ipairs(makeLines(item, v) or {}) do
				table.insert(ret, u)
			end
		end
	end
	
	local t = mw.html.create('table')
	t	:addClass('wikitable sortable sticky-header item-drops filterable autosort=4,a')
		:css('text-align', 'center')
		:tag('tr')
			:tag('th'):addClass('drop-disp-btn btn-first'):wikitext('Fonte'):done()
			:tag('th'):wikitext('Nível'):done()
			:tag('th'):wikitext('Quantidade'):done()
			:tag('th'):wikitext('Raridade'):addClass('drops-rarity-header'):done()
			:tag('th'):wikitext('[[Arquivo:P2P-F2P ícone.png|30px|link=|alt=Membros]]'):addClass('members-column'):done()
	for i,v in ipairs(ret) do
		t:node(v)
	end
	
	local text = {
		"<div class=\"seealso\">Esta lista foi criada dinamicamente. Para ajuda, veja [[Predefinição:Lista de objetos largados/FAQ|o FAQ]].</div>\n",
		"<div class=\"seealso\">Para forçar uma atualização desta lista, clique ", purge('dml-'..mw.uri.anchorEncode(item), 'aqui', 'span'), ".</div>\n",
		"<div class=\"seealso\">Para uma lista completa de todas as formas de obter este item, veja <span class='plainlinks'>[", tostring(mw.uri.fullUrl('Special:Ask', {q=q[1], po = '?Quantidade largada\n?Raridade', p = { mainlabel = 'Monstro', format = 'table'}, limit = 500})), " aqui]</span> (<span class='plainlinks'>[", tostring(mw.uri.fullUrl('Special:Ask', {q=q[1]..' OR '..difrdt, po = '?Quantidade largada\n?Raridade', p = { mainlabel = 'Monstro', format = 'table'}, limit = 500})), " incluir RDT]</span>).</div>\n",
		tostring(t)
	}
	
	if hasRefs then
		local refList = mw.getCurrentFrame():getParent():extensionTag( 'references', '', {group='dr'} )
		table.insert(text, refList)
	end
	
	return table.concat(text, '')
end

function makeLines(item, data)
	-- iterate through different drop from parameters, get variant names
	local srcs = {
		drop=data['Largado de'],loot=data['Saqueado de'],hunter=data['Caçado por'],
		produce=data['Produzido por'],reward=data['Recompensa de'],archaeology=data['Escavado de'],
		fishing=data['Pescado de'],mining=data['Minerado de'],woodcutting=data['Cortado de'],divination=data['Coletado de']
	}
	local srcsTable = {}
	for i,v in pairs(srcs) do
		if type(v) == 'string' then
			table.insert(srcsTable, {dtype=i,src=v})
		elseif type(v) == 'table' then
			for _,k in pairs(v) do
				table.insert(srcsTable, {dtype=i,src=k})
			end
		end
	end

	-- iterate through found variants, get stats for each
	local srcsData, srcsDataGr = {}, {}
	local _found = false
	for _,v in ipairs(srcsTable) do
		local members, level, levelsort, img
		members = data['mob É somente para membros'] or data['mob All É somente para membros'] or '?'
		
		if v['dtype'] == 'reward' then
			level = 'N/A'
			levelsort = -1000
			img = _rewimg
			if rewsrcs[v['src']] then
				level = rewsrcs[v['src']][1]
				img = string.format(rewimg, rewsrcs[v['src']][2], v['src'] )
			end
		else
			local level_property
			if v['dtype'] == 'drop' then
				level_property = 'Nível de combate'
				img = _comimg
			elseif v['dtype'] == 'loot' then
				level_property = 'Nível de Roubo'
				img = _thvimg
			elseif v['dtype'] == 'hunter' then
				level_property = 'Nível de Caça'
				img = _hunimg
			elseif v['dtype'] == 'produce' then
				level_property = 'Nível de Agricultura'
				img = _farimg
			elseif v['dtype'] == 'archaeology' then
				level_property = 'Nível de Arqueologia'
				img = _arcimg
			elseif v['dtype'] == 'fishing' then
				level_property = 'Nível de Pesca'
				img = _fisimg
			elseif v['dtype'] == 'mining' then
				level_property = 'Nível de Mineração'
				img = _minimg
			elseif v['dtype'] == 'woodcutting' then
				level_property = 'Nível de Corte de Lenha'
				img = _wdcimg
			elseif v['dtype'] == 'divination' then
				level_property = 'Nível de Divinação'
				img = _divimg
			end
			
			level = data[level_property] or data['mob '..level_property] or data['mob All '..level_property] or item_propv(item, level_property) or '?'
			levelsort = data[level_property] or data['mob '..level_property] or data['mob All '..level_property] or item_propv(item, level_property) or -1
		end
		
		if type(level) == 'table' then
			levelsort = level[1]
			level = table.concat(level, ', ')
		end
		if v['dtype'] == 'loot' then
			levelsort = 100 - levelsort
		end
		if type(members) == 'table' then
			members = memberstring.both
		else
			members = memberstring[members] or memberstring['?']
		end
		local noteref = data['Notas de raridade Ref'] or false
		local cleanSrc = v['src']
		local splitSrc = mw.text.split(v['src'], '%#')
		if #splitSrc == 2 then
			splitSrc[2] = splitSrc[2]:gsub('_', ' ')
			cleanSrc = string.format('%s|%s <span class="beast-version">%s</span>', v['src'], splitSrc[1], splitSrc[2])
		end
		
		table.insert(srcsData, {src=cleanSrc,dtype=v['dtype'],mems=members,lvl=level,lvlsort=levelsort,lvlimg=img,ref=noteref})
	end

	local rows = {}
	-- iterate through found sources, create line for each
	for _, v in pairs(srcsData) do
		-- name,namenotes,combat,cbnotes,dtype,quantity,quantitynotes,rarity,raritynotes,members,membersnotes,raritynoteref
		local dropline = line({v['src'], data['Notas de nome'], v['lvl'], v['lvlimg'], v['dtype'], data['Quantidade largada'], '', data['Raridade'], data['Notas de raridade'], v['mems'], '', v['ref']})
		table.insert(rows, dropline)
	end
	-- iterate through found groups, create line for each
	--[=[
	for i,v in pairs(srcsDataGr) do
		-- i = monster-dtype-members, v = table of version data tables
		if #v > 1 then
			-- more than 1 in group
			local vers, lvl_l, lvl_h, gmems = {}, 9999, 0, v[1]['mems']
			for _,k in ipairs(v) do
				local versLink = '[['..k['bmon']..k['link']..'|'..k['vers']..']]'
				vers[k['vers']] = versLink
				if tonumber(k['lvl']) then
					if k['lvl'] < lvl_l then lvl_l = k['lvl'] end
					if k['lvl'] > lvl_h then lvl_h = k['lvl'] end
				end
			end
			-- Create level display
			local glevel
			if lvl_h ~= 0 then
				if lvl_l == lvl_h then
					glevel = lvl_l
				else
					glevel = lvl_l..'-'..lvl_h
				end
			else
				glevel = v[1]['lvl']
			end
			-- Sort versions
			local keys, versSorted = {}, {}
			for  j in pairs(vers) do table.insert(keys, tonumber(j)) end
			table.sort(keys)
			for _,l in ipairs(keys) do table.insert(versSorted, vers[tostring(l)]) end
			-- Create name/types string
			local gname
			if string.match(v[1]['link'], '[lL]evel') then
				gname = '[['..v[1]['bmon']..']]'..' <span class="beast-version">Level: '..mw.text.listToText(versSorted, ', ', ', ')..'</span>'
			else
				gname = '[['..v[1]['bmon']..']]'..' <span class="beast-version">Version: '..mw.text.listToText(versSorted, ', ', ', ')..'</span>'
			end
			-- Generate line
			local dropline = line({gname, data['Name Notes'], glevel, v[1]['lvlimg'], v[1]['lvlsort'], data['Drop Quantity'], '', data['Rarity'], data['Rarity Notes'], v[1]['mems'], ''})
			table.insert(rows, dropline)
		else
			--only 1 in group
			local dropline = line({v[1]['src'], data['Name Notes'], v[1]['lvl'], v[1]['lvlimg'], v[1]['lvlsort'], data['Drop Quantity'], '', data['Rarity'], data['Rarity Notes'], v[1]['mems'], ''})

		end
	end
	--]=]

	return rows
end

function item_propv(name, prop)
	local q = {
		'[['..name..']]',
		'?'..prop
	}
	local smwdata = mw.smw.ask(q)
	if type(smwdata) == 'table' then
		for _,v in ipairs(smwdata) do
			if v[prop] then
				return v[prop]
			end
		end
	end
end

return p
-- </nowiki>