Módulo:Infobox scenery

De RuneScape Wiki
Ir para navegação Ir para pesquisar
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:Infobox scenery/doc. [editar]
Módulo:Infobox scenery's a função main é invocada por Predefinição:Infobox cenário interativo.
Módulo:Infobox scenery requer Módulo:Clean image.
Módulo:Infobox scenery requer Módulo:Infobox.
Módulo:Infobox scenery requer Módulo:Mainonly.
Módulo:Infobox scenery requer Módulo:Paramtest.
Módulo:Infobox scenery requer Módulo:Yesno.

-- <nowiki>
--------------------------
-- Module for [[Template:Infobox interactive scenery]]
-- Please test changes to this module at [[Module:Infobox interactive scenery/sandbox]] first
------------------------
local p = {}

-- "imports"
local onmain = require('Módulo:Mainonly').on_main
local yesno = require('Módulo:Yesno')
local paramtest = require('Módulo:Paramtest')
local cleanimg = require('Módulo:Clean image').clean
local infobox = require('Módulo:Infobox')

-- location restriction
local restriction_map = {
	surface = 'superfície',
	dungeoneering = 'dungeon',
	dg = 'dungeon',
	daemonheim = 'dungeon',
	quest = 'missão',
	minigame = 'minijogo',
	activity = 'minijogo',
	beta = 'removido',
	gone = 'removido',
	removed = 'removido',
	limited = 'limitado',
	['time limited'] = 'limitado',
	th = 'microtransação',
	sof = 'microtransação',
	['treasure hunter'] = 'microtransação',
	['squeal of fortune'] = 'microtransação',
	cache = 'cache'
}

function p.main(frame)
	local args = frame:getParent().args
	local ret = infobox.new(args)
	
	ret:defineParams{
		{ name = 'nome', func = 'name' },
		{ name = 'inglês', func = { name = inglesarg, params = { 'inglês' }, flag = { 'd' } } },
		{ name = 'aka', func = 'has_content' },
		{ name = 'imagem', func = { name = imgarg, params = { 'imagem' }, flag = { 'd' } } },
		{ name = 'imagemfundo', func = { name = imgback, params = { 'imagebackground' }, flag = { 'd' } }, dupes = true },
		{ name = 'vanchor', func = { name = 'has_content', params = { 'version' }, flag = 'p' } },
		{ name = 'lançamento', func = 'release' },
		{ name = 'remoção', func = 'remoção' },
		{ name = 'membros', func = { name = membrosarg, params = { 'membros' } } },
		{ name = 'missão', func = { name = 'has_content', params = { 'missão', 'Não'}, flag = { 'd', 'r' } } },
		{ name = 'localização', func = 'has_content' },
		{ name = 'ações', func = { name = actionarg, params = { 'ações' }, flag = { 'd' } } },
		{ name = 'actions_smw', func = { name = actionsmw, params = { 'ações' }, flag = { 'p' } }, dupes = true },
		{ name = 'nívelroubo', func = { name = thievarg, params = { 'nívelroubo' }, flag = { 'd' } } },
		{ name = 'thievelvl_smw', func = { name = thievarg, params = { 'nívelroubo' }, flag = { 'd' } }, dupes = true },
		{ name = 'examinar', func = 'has_content' },
		{ name = 'mapa', func = { name = maparg, params = { 'mapa' }, flag = { 'd' } } },
		{ name = 'intmap', func = { name = intmaparg, params = { 'intmap' }, flag = { 'd' } } },
		{ name = 'mapdisp', func = { name = mapdisp, params = { 'mapa', 'intmap' }, flag = { 'd', 'd' } }, dupes = true },
		{ name = 'restrição', func = restrictionarg },
		{ name = 'restriçãosuperfície', func = { name = restrsurfarg , params = { 'restriction', 'restriction', 'quest' }, flag = { 'd', 'p', 'd' } } },
		{ name = 'id', func = { name = iddisp,  params = { 'id' }, flag = 'p' } },
		{ name = 'npcid', func = { name = iddisp,  params = { 'npcid' }, flag = 'p' } },
		{ name = 'id_smw', func = { name = idsmw, params = { 'id' }, flag = 'p' }, dupes = true },
		{ name = 'npcid_smw', func = { name = idsmw, params = { 'npcid' }, flag = 'p' }, dupes = true },
		{ name = 'chisel_links', func = { name = make_chisel_links, params = { 'id_smw', 'npcid_smw', 'id', 'npcid', 'name' }, flag = { 'd', 'd', 'p', 'p', 'd' } } },
	}
	
	ret:useSMW({
		members = 'É somente para membros',
		thievelvl_smw = 'Nível de Roubo'
	})

	ret:useSMWOne({
		id_smw = 'All ID do Cenário',
		npcid_smw = 'All ID '
	})

	ret:useSMWSubobject({
		id_smw = 'ID do Cenário',
		npcid_smw = 'ID do NPC',
		vanchor = 'Version anchor',
		name = 'Nome do objeto',
		members = 'É somente para membros',
		restriction = 'Restrição de localização',
		release = 'Data de lançamento',
		update = 'Atualização de lançamento',
		--removal = 'Removal date',
		removalupdate = 'Atualização de remoção',
		thievelvl_smw = 'Nível de Roubo',
		actions_smw = 'Ações'
	})

	
	ret:setMaxButtons(6)
	ret:create()
	ret:cleanParams()
	ret:customButtonPlacement(true)
	
	ret:linkParams{
		{ 'imagem', 'imagemfundo' },
	}
	
	ret:defineLinks({ links = {{ 'Predefinição:%s', 'Ver' },
		{ 'Predefinição_Discussão:%s', 'Discussão' }}, colspan = 2 })
		
	ret:defineName('Infobox cenário interativo')
	ret:addClass('infobox-scenery')
	
	if onmain() then
		local a2 = ret:categoryData()
		if not a2['restrição'].all_defined then
			ret:useSMWSubobject({
				restrictionsurface = 'Restrição de localização',
			})
		end
	end
	
	ret:addButtonsCaption()
	
	-- PARAMETER: name
	ret:addRow{
		{ tag = 'argh', content = 'nome', class = 'infobox-header', colspan = '2' } }	
	
	-- PARAMETER: image
	if ret:paramDefined('imagemfundo', '#') and ret:param('imagemfundo','s#') == true then
		ret:addRow{
			{ tag = 'argd', content = 'imagem', class = 'infobox-image bordered-image', colspan = '2', css = 'background:rgba(0,0,0,0.2);' } }
	else
		ret:addRow{
			{ tag = 'argd', content = 'imagem', class = 'infobox-image bordered-image', colspan = '2' } }
	end
	
	-- PARAMETER: examine
	ret:addRow{
		{ tag = 'argd', content = 'examinar', class = 'infobox-image', colspan = '2', css = { ['max-width'] = '300px', ['text-align'] = 'center', ['font-style'] = 'italic' } }
	}
	
	-- PARAMETER: inglês
		:addRow{
		{ tag = 'th', content = 'Inglês' },
		{ tag = 'argd', content = 'inglês' } }
	
	-- PARAMETER: release
	-- (update included automatically by infobox)
		:addRow{ { tag = 'th', content = 'Lançamento' },
				{ tag = 'argd', content = 'lançamento' } }
	
	-- PARAMETER: removal
	if ret:paramDefined('remoção') then
		ret:addRow{ { tag = 'th', content = 'Remoção' },
				{ tag = 'argd', content = 'remoção' } }
	end
	
	-- PARAMETER: aka
	if ret:paramDefined('aka') then
		   ret:addRow{ { tag = 'th', content = '[[Slang dictionary|AKA]]' },
				{ tag = 'argd', content = 'aka' } }
	end
	
	-- PARAMETER: members
	ret:addRow{
		{ tag = 'th', content = '[[Membros]]' },
		{ tag = 'argd', content = 'membros' } }
	
	-- PARAMETER: quest
	:addRow{
		{ tag = 'th', content = '[[Missão]]' },
		{ tag = 'argd', content = 'missão' } }
	
	-- PARAMETER: location
	:addRow{
		{ tag = 'th', content = 'Localização' },
		{ tag = 'argd', content = 'localização' } }
	
	-- PARAMETER: actions
	:addRow{
		{ tag = 'th', content = 'Ações' },
		{ tag = 'argd', content = 'ações' } }
	
	-- PARAMETER: thievelvl
	if ret:paramDefined('nívelroubo') then
		ret:addRow{
			{ tag = 'th', content = '[[Roubo|Nível de ]] [[Arquivo:Roubo ícone.png|link=Roubo|frameless|20px|alt=Nível de Roubo|Nível de Roubo]]' },
			{ tag = 'argd', content = 'nívelroubo' } }
	end
	
	-- PARAMETER: map
	if ret:paramGrep('mapdisp', function(x) return x == true end) then
		local mapcontent = (ret:paramDefined('map') and 'map') or (ret:paramDefined('intmap') and 'intmap')
		ret:addRow{
			{ tag = 'argd', content = mapcontent, class = 'infobox-map', colspan = '2' } }
	end
	
	-- Advanced data
	ret:addRow{
		{ tag = 'th', content = 'Advanced data', class = 'infobox-subheader', colspan = '2' },
		meta = {addClass = 'advanced-data'} }
	local has_id = ret:paramGrep('id', function(x) return string.lower(x or 'none') ~= 'none' end)
	if has_id then
		ret:addRow{
			{ tag = 'th', content = 'Object ID' },
			{ tag = 'argd', content = 'id' },
			meta = {addClass = 'advanced-data'} }
	end
	local has_npcid = ret:paramDefined('npcid')
	if has_npcid then
		ret:addRow{
			{ tag = 'th', content = 'NPC ID' },
			{ tag = 'argd', content = 'npcid' },
			meta = {addClass = 'advanced-data'} }
	end
	ret:addRow{
		{ tag = 'th', content = 'Links' },
		{ tag = 'argd', content = 'chisel_links' },
		meta = {addClass = 'advanced-data'} }
	
	ret:finish()
	if onmain() then
		local a1 = ret:param('all')
		local a2 = ret:categoryData()
		ret:wikitext(addcategories(a1,a2))
	end
	return ret:tostring()
end

-- English name

function inglesarg(name)
	if infobox.isDefined(name) then
		return '[[rsw:'..name..'|'..name..']]'
	end
	return nil
end

-- Membros
function membrosarg(arg)
	if infobox.isDefined(arg) then
		if yesno(arg) then
			return '[[Arquivo:P2P ícone.png|26px|link=Membros|alt=Membros]]&nbsp;Sim'
		else
			return '[[Arquivo:F2P ícone.png|26px|link=Jogadores gratuitos|alt=Jogadores gratuitos]]&nbsp;Não'
		end
	end
end

function imgarg(arg)
	if infobox.isDefined(arg) then
		return cleanimg{ file = arg, width = 300, height = 300 }
	end
	return nil
end

function imgback(arg)
	if infobox.isDefined(arg) then
		if yesno(arg) then
			return 'infobox-imgbg'
		end
	end
	return ''
end

function actionarg(arg)
	if infobox.isDefined(arg) then
		if string.lower(arg) == 'nenhum' or string.lower(arg) == 'examinar' then
			return '\'\'\'&bull;\'\'\' [[Examinar]]'
		end
		local r = string.gsub(arg, ',%s*', '<br />\'\'\'&bull;\'\'\' ')
		r = '\'\'\'&bull;\'\'\' ' .. r
		r = mw.ustring.gsub(r, '%[*[Cc]aminhe [Pp]ara [Cc]á*', '[[Caminhe para cá|Caminhe para cá]]')
		r = mw.ustring.gsub(r, '%[*[Ee]xaminar%]*', '[[Examinar]]')
		if not r:find('Examinar') then
			r = r .. '<br />\'\'\'&bull;\'\'\' [[Examinar]]'
		end
		return r
	end
	return nil
end
function actionsmw(arg)
	if infobox.isDefined(arg) then
		if string.lower(arg) == 'nenhum' or string.lower(arg) == 'examinar' then
			return 'Examinar'
		end
		local r = string.gsub(arg, ',%s*', infobox.splitpoint)
		r = mw.ustring.gsub(r, '%[*[Cc]aminhe [Pp]ara [Cc]á%]*', 'Caminhe para cá')
		r = mw.ustring.gsub(r, '%[*[Ee]xaminar%]*', 'Examinar')
		if not r:find('Examinar') then
			r = r .. infobox.splitpoint .. 'Examinar'
		end
		return r
	end
	return nil
end

function thievarg(arg)
	arg = string.gsub(arg or '',',','')
	return tonumber(arg, 10)
end

function maparg(arg)
	if infobox.isDefined(arg) then
		local low = string.lower(arg)
		if yesno(low) == false then
			return 'Nenhum'
		elseif low == 'nome' then
			return string.format('[[Arquivo:%s localização.png]]', mw.title.getCurrentTitle().text)
		elseif string.find(low, '.png') then
			return cleanimg{ file = arg, width = 250 }
		else
			return arg
		end
	else
		return nil
	end
end

function intmaparg(arg)
	if infobox.isDefined(arg) then
		if yesno(arg) == false then
			return 'Nenhum'
		else
			return mw.getCurrentFrame():preprocess( arg )
		end
	else
		return nil
	end
end

function mapdisp(map, intmap)
	if infobox.isDefined(intmap) or infobox.isDefined(map) then
		if ( intmap == 'Nenhum' ) and ( map == 'Nenhum' ) then
			return false
		end
		return true
	end
	return nil
end

function restrictionarg(arg)
	if paramtest.is_empty(arg) then
		return nil
	end
	return restriction_map[string.lower(arg)]
end
function restrsurfarg(cleaned, passed)
	if infobox.isDefined(cleaned) then
		return nil
	end
	return restriction_map.surface
end

function iddisp(id)
	if infobox.isDefined(id) then
		if id:lower() ~= 'não' then
			local r = string.gsub(id, ', *', ', ')
			return r
		elseif id:lower() == 'não' then
			return 'Nenhum'
		end
	end
	return nil
end
function idsmw(id)
	if infobox.isDefined(id) and id:lower() ~= 'não' then
		local r = string.gsub(id, ', *', infobox.splitpoint)
		return r
	end
	return nil
end

function make_chisel_links(id_smw, npcid_smw, id, npcid, name)
	local link = 'https://chisel.weirdgloop.org/gazproj/mrod'
	local link_npc = 'https://chisel.weirdgloop.org/gazproj/mrnd'
	local has_id = infobox.isDefined(id)
	local id_isnt_no = id:lower() ~= 'no'
	local has_npc_id = infobox.isDefined(npcid)
	local npcid_isnt_no = npcid:lower() ~= 'no'
	local id_undefined = not infobox.isDefined(id)
	if has_id and id_isnt_no then
		local ids = mw.text.split(id_smw, infobox.splitpoint)
		if #ids == 0 then
			local _name = name:gsub(' ', '%%20')
			link = string.format('[%s#%s MROD]', link, _name)
		elseif #ids == 1 then
			link = string.format('[%sid?%s#%s-%s MROD%s]', link, ids[1], ids[1]-15, ids[1]+15, ids[1])
		else
			link = string.format('[%sid?%s#%s', link, ids[1], ids[1])
			for i,j in ipairs(ids) do
				if i > 1 then
					link = link .. '@' .. j
				end
			end
			link = link .. ' MROD]'
		end
	else
		local _name = name:gsub(' ', '%%20')
		link = string.format('[%s#%s MROD]', link, _name)
	end
	if has_npc_id and npcid_isnt_no then
		local npc_ids = mw.text.split(npcid_smw, infobox.splitpoint)
		if #npc_ids == 0 then
			local _name = name:gsub(' ', '%%20')
			link_npc = string.format('[%s#%s MRND]', link_npc, _name)
		elseif #npc_ids == 1 then
			link_npc = string.format('[%sid?%s#%s-%s MRND%s]', link_npc, npc_ids[1], npc_ids[1]-15, npc_ids[1]+15, npc_ids[1])
		else
			link_npc = string.format('[%sid?%s#%s', link_npc, npc_ids[1], npc_ids[1])
			for i,j in ipairs(npc_ids) do
				if i > 1 then
					link_npc = link_npc .. '@' .. j
				end
			end
			link_npc = link_npc .. ' MRND]'
		end
	else
		local _name = name:gsub(' ', '%%20')
		link_npc = string.format('[%s#%s MRND]', link_npc, _name)
	end
	if has_id and (not id_isnt_no) and has_npc_id and npcid_isnt_no then
		return link_npc
	elseif has_npc_id and npcid_isnt_no then
		return link..'<br>'..link_npc
	else
		return link
	end
end

-- Categories
function addcategories(args,catargs)
	local ret = {}
	
	if args.id.switches then
		for i,v in ipairs(args.id.switches) do
			if infobox.isDefined(v) and v ~= 'Nenhum' then
				table.insert(ret, 'Cenário')
				if args.actions_smw.switches and infobox.isDefined( args.actions_smw.switches[i] ) then
					if args.actions_smw.switches[i] == 'Examinar' then
						table.insert(ret, 'Cenário não interativo')
					else
						table.insert(ret, 'Cenário interativo')
					end
				elseif infobox.isDefined(args.actions_smw.d) then
					if args.actions_smw.d == 'Examinar' then
						table.insert(ret, 'Cenário não interativo')
					else
						table.insert(ret, 'Cenário interativo')
					end	
				end
			end
		end
	elseif args.id.d ~= 'Nenhum' then
		table.insert(ret, 'Cenário')
		if args.actions_smw.switches then
			for _,v in ipairs(args.actions_smw.switches) do
				if infobox.isDefined(v) then
					if v == 'Examinar' then
						table.insert(ret, 'Cenário não interativo')
					else
						table.insert(ret, 'Cenário interativo')
					end
				end
			end
		elseif infobox.isDefined(args.actions_smw.d) then
			if args.actions_smw.d == 'Examinar' then
				table.insert(ret, 'Cenário não interativo')
			else
				table.insert(ret, 'Cenário interativo')
			end	
		end
	end
	
	if args.npcid.switches then
		for i,v in ipairs(args.npcid.switches) do
			if infobox.isDefined(v) and v ~= 'Nenhum' then
				table.insert(ret, 'Personagens não-jogadores')
				if args.actions_smw.switches and infobox.isDefined( args.actions_smw.switches[i] ) then
					if args.actions_smw.switches[i] == 'Examinar' then
						table.insert(ret, 'Personagens não interativos')
					-- else
						-- table.insert(ret, 'Interactive characters')
					end
				elseif infobox.isDefined(args.actions_smw.d) then
					if args.actions_smw.d == 'Examinar' then
						table.insert(ret, 'Personagens não interativos')
					-- else
						-- table.insert(ret, 'Interactive characters')
					end	
				end
			end
		end
	elseif infobox.isDefined(args.npcid.d) and args.npcid.d ~= 'Nenhum' then
		table.insert(ret, 'Personagens não-jogadores')
		if args.actions_smw.switches then
			for _,v in ipairs(args.actions_smw.switches) do
				if v == 'Examinar' then
					table.insert(ret, 'Personagens não interativos')
				-- else
					-- table.insert(ret, 'Interactive characters')
				end
			end
		elseif infobox.isDefined(args.actions_smw.d) then
			if args.actions_smw.d == 'Examinar' then
				table.insert(ret, 'Personagens não interativos')
			-- else
				-- table.insert(ret, 'Interactive characters')
			end	
		end
	end
	
	if args.id.switches then
		for _, v in ipairs(args.id.switches) do
			if v == infobox.nilParam() then
				table.insert(ret, 'Precisa de ID')
				break
			end
		end
	elseif args.id.d and args.id.d:find('action=edit') then
		table.insert(ret, 'Precisa de ID')
	end
	
	local cat_map = {
		-- Added if the parameter has content
		defined = {
			aka = 'Págians com AKA',
			thievelvl = 'Entidades roubáveis',
			npcid = 'Personagens não-jogadores'
		},
		-- Added if the parameter has no content
		notdefined = {
			image = 'Precisa de imagem',
			members = 'Precisa de status membro',
			release = 'Precisa de data de lançamento',
			actions = 'Precisa adicionar ações',
			examine = 'Precisa de examinar',
			quest = 'Missão faltando cenário',
			mapdisp = 'Precisa de mapa'
			},
	}
	
	-- Run and add mapped categories
	for n, v in pairs(cat_map.defined) do
		if catargs[n] and catargs[n].one_defined then
			table.insert(ret,v)
		end
	end
	for n, v in pairs(cat_map.notdefined) do
		if catargs[n] and catargs[n].all_defined == false then
			table.insert(ret,v)
		end
	end
	
	-- quest restriction
	-- just look for a link
	--if args.quest.d:find('%[%[') then
		--table.insert(ret,'Cenário de missão')
	--end
	--if args.quest.switches then
		--for _, v in ipairs(args.quest.switches) do
			--if v:find('%[%[') then
				--table.insert(ret,'Cenário de missão')
				--break
			--end
		--end
	--end
	
	-- combine table and format category wikicode
	for i, v in ipairs(ret) do
		if (v ~= '') then
			ret[i] = string.format('[[Categoria:%s]]',v)
		end
	end

	return table.concat(ret,'')
end

return p
-- </nowiki>