Módulo:Necessário para completar

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:Necessário para completar/doc. [editar]
Módulo:Necessário para completar requer Module:Yesno.
Módulo:Necessário para completar carrega dados de Module:Missões necessárias/Data.

--<nowiki>
-- essentially the inverse of [[Module:Questreq]], though with the option of expanding into other types of reqs (eg achievements - will need SMW work for those though)
local quests = mw.loadData('Module:Missões_necessárias/Data')
local p = {}
local yesno = require('Module:Yesno')

function _sortFunc(a,b)
	local _a, _b
	_a = tostring(a):lower():gsub('^completa:', ''):gsub('^iniciada:', '')
	_b = tostring(b):lower():gsub('^completa:', ''):gsub('^iniciada:', '')
	return _a < _b
end

function getQuests(q)
	local qs = {}
	q = tostring(q)
	q = q:lower()
	q = q:gsub('^completa:', ''):gsub('^iniciada:', '')
	for k,v in pairs(quests) do
		for i,l in ipairs(v) do
			local _l = l:gsub('^Completa:', ''):gsub('^Iniciada:', '')
			_l = _l:lower()
			
			if q == _l then
				table.insert(qs, k)
				break
			end
		end
	end
	if #qs == 0 then
		return nil
	end
	table.sort(qs, _sortFunc)
	return qs
end

function p._getQuests(q, getNested)
	--[=[
	-- preserves nesting structure
	-- saving here in case we want it, but not used
	function nest(_q)
		local nqs = getQuests(_q)
		local r = nil
		if nqs ~= nil then
			r = nqs
			for i,v in ipairs(nqs) do
				table.insert(nqs, nest(v))
			end
		end
		return r
	end
	--]=]
	-- does not preserve structure
	local nestedQuests = {}
	function nest(_q)
		local nqs = getQuests(_q)
		local r = nil
		if nqs ~= nil then
			r = nqs
			for i,v in ipairs(nqs) do
				if not nestedQuests[v] then
					nestedQuests[v] = true
					nest(v)
				end
			end
		end
		return r
	end
	local qs = getQuests(q)
	if qs == nil then
		return nil
	end
	if getNested then
		nest(q)
		-- unmark the direct requirements
		for i,v in ipairs(qs) do
			nestedQuests[v] = nil
		end
		local _nested = {}
		for k,v in pairs(nestedQuests) do
			-- remove duplicate 'Full completion of X/Started X' if X is already listed
			-- usually applies to early quests that are required a lot
			-- e.g. Desert Treasure is required for Children of Mah in several ways, some of which are direct requirements
			-- (Desert Treasure -> The Temple at Senntisten -> The Light Within -> Children of Mah)
			-- and some are through 'Full completion' requirements
			-- (Desert Treasure -> The Temple at Senntisten -> Ritual of the Mahjarrat -> Koschei's Troubles -> Full:Children of Mah)
			-- listing both is confusing so remove full/started requirements if the quest is just normally listed
			if k:find('^Completa:') or k:find('^Iniciada:') then
				local _k = k:gsub('^Completa:', ''):gsub('^Iniciada:', '')
				if not nestedQuests[_k] then
					table.insert(_nested, k)
				end
			else
				table.insert(_nested, k)
			end
		end
		table.sort(_nested, _sortFunc)
		nestedQuests = _nested
	else
		nestedQuests = nil
	end
	return qs, nestedQuests
end

function p._quests(args)
	local q = args[1] or mw.title.getCurrentTitle().text
	if not quests[q] then
		return string.format('"%s" não é um nome de missão reconhecido.', q)
	end
	local qs, indirqs = p._getQuests(q, not yesno(args.noindirect))
	local ret = {}
	if qs == nil or #qs == 0 then
		table.insert(ret, string.format('%s não é necessária para nenhuma missão ou minimissão.', q))
	else
		table.insert(ret, string.format('%s é necessária diretamente para as seguintes missões/minimissões:', q))
		for i,v in ipairs(qs) do
			local repl, str
			str = ''
			v, repl = string.gsub(v, '^Completa:', '')
			if repl > 0 then
				str = 'Conclusão de '
			end
			-- doubt this will ever happen but here's support for it anyway
			v, repl = string.gsub(v, '^Iniciada:', '')
			if repl > 0 then
				str = 'Iniciando '
			end
			table.insert(ret, string.format('* %s[[%s]]', str, v))
		end
		if indirqs and #indirqs > 0 then
			table.insert(ret, '')
			table.insert(ret, '<div class="mw-collapsible mw-collapsed" style="display:inline-block;">É entretanto um requisito indireto para completar as seguintes missões e minimissões: <div class="mw-collapsible-content">')
			for i,v in ipairs(indirqs) do
				local repl, str
				str = ''
				v, repl = string.gsub(v, '^Completa:', '')
				if repl > 0 then
					str = 'Conclusão de '
				end
				-- doubt this will ever happen but here's support for it anyway
				v, repl = string.gsub(v, '^Iniciada:', '')
				if repl > 0 then
					str = 'Starting '
				end
				table.insert(ret, string.format('* %s[[%s]]', str, v))
			end
			table.insert(ret, '</div></div>')
		end
	end
	
	
	return table.concat(ret, '\n')
end

function p.quests(frame)
	return p._quests(frame:getParent().args)
end


return p
--</nowiki>