Módulo:Construction contracts

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:Construction contracts/doc. [editar]
Módulo:Construction contracts's a função main é invocada por Predefinição:Calculadora de Contratos de Construção.
Módulo:Construction contracts requer Módulo:Currency short.
Módulo:Construction contracts carrega dados de Módulo:Construction contracts/data.
Módulo:Construction contracts carrega dados de Módulo:GEPrices/data.

local data = mw.loadData('Módulo:Construction contracts/data')
local gemw = mw.loadData('Módulo:GEPrices/data')
local curr = require('Módulo:Currency short')
local lang = mw.getContentLanguage()

local allowed_items = {
	nails = {
		Bronze = 'Pregos de bronze',
		Ferro = 'Pregos de ferro',
		['Aço'] = 'Pregos de aço',
		Negros = 'Pregos negros',
		Mithril = 'Pregos de mithril',
		Adamantio = 'Pregos de adamantio',
		['Rúnicos'] = 'Pregos rúnicos'
	},
	planks = {
		Normal = 'Tábua',
		Carvalho = 'Tábua de carvalho',
		Teca = 'Tábua de teca',
		Mogno = 'Tábua de mogno',
		Proteica = 'Tábua proteica'
	},
	stove_map = {
		['Tábua'] = 'Barra de ferro',
		['Tábua de carvalho'] = 'Barra de aço',
		['Tábua de teca'] = 'Barra de mithril',
		['Tábua de mogno'] = 'Barra de adamantio',
		['Tábua proteica'] = 'Barra de adamantio'
	}
}

local xp_each = {
	['Tábua'] = 30,
	['Tábua de carvalho'] = 60,
	['Tábua de teca'] = 90,
	['Tábua de mogno'] = 140,
	['Tábua proteica'] = 140,
	['Vela branca'] = 5,
	['Pregos de bronze'] = 0,
	['Pregos de ferro'] = 0,
	['Pregos de aço'] = 0,
	['Pregos negros'] = 0,
	['Pregos de mithril'] = 0,
	['Pregos de adamantio'] = 0,
	['Pregos rúnicos'] = 0,
	['Barra de ferro'] = 10,
	['Barra de aço'] = 20,
	['Barra de mithril'] = 10,
	['Barra de adamantio'] = 10,
	['Pedaço de pano'] = 15,
}

local xp_bonus_plank_reward = {
	['Tábua'] = 0,
	['Tábua de carvalho'] = 1000,
	['Tábua de teca'] = 2000,
	['Tábua de mogno'] = 5000,
	['Tábua proteica'] = 5000
}
function plink(x)
	return string.format('[[Arquivo:%s.png|link=%s]] [[%s]]', x,x,x)
end
function gep(x)
	return gemw[x] or 0
end
function coins(x)
	return curr._amount(x, 'moedas', true)
end
function fnum(x)
	return lang:formatNum(x)
end


local p = {}

function p.listFurniture()
	local l = {}
	for k,v in pairs(data) do
		table.insert(l,k)
	end
	table.sort(l)
	return 'Nenhum,'..table.concat(l, ',')
end

function p.main(frame)
	return p._main(frame:getParent().args)
end

function p._main(args)
	local plank = allowed_items.planks[args.plank] or 'Tábua'
	local nails = allowed_items.nails[args.nails] or 'Pregos de aço'
	local furniture = {}
	local xp_reward, xp_bonus_reward = 10000, xp_bonus_plank_reward[plank] or 0
	
	local totals = {
		nails = 0,
		planks = 0,
		_extra = {}
	}
	for i=1,5 do
		local f = args['furniture'..i]
		local d = data[f]
		if d then
			table.insert(furniture, f)
			totals.planks = totals.planks + d.planks
			totals.nails = totals.nails + d.nails
			if d.additional then
				for j,v in ipairs(d.additional) do
					local vmat = v.mat
					if d.is_stove then
						-- stove is special
						vmat = allowed_items.stove_map[plank] or 'Barra de ferro'
					end
					if totals[vmat] then
						totals[vmat] = totals[vmat] + v.qty
					else
						totals[vmat] = v.qty
						table.insert(totals._extra, vmat)
					end
				end
			end
		end
	end
	table.sort(totals._extra)
	local totalprice = 0
	local totalxp = 10
	local outstr = 'Para fazer '..table.concat(furniture, ', ')..', você irá precisar:\n'
	local t = mw.html.create('table')
	t:addClass('wikitable sortable align-right-2 align-right-3')
		:tag('tr')
			:tag('th'):wikitext('Material'):done()
			:tag('th'):wikitext('Quantidade'):done()
			:tag('th'):wikitext('Preço do MG'):done()
		:done()
	local plankrow = t:tag('tr')
	plankrow:tag('td'):wikitext(plink(plank)):done()
			:tag('td'):wikitext(totals.planks):done()
	local plankpricecell = plankrow:tag('td')
	if gep(plank) == 0 then
		plankpricecell:attr('data-sort-value', 0):addClass('table-na'):wikitext('N/A')
	else
		plankpricecell:wikitext(coins(gep(plank)*totals.planks))
		totalprice = totalprice + gep(plank)*totals.planks
	end
	totalxp = totalxp + (xp_each[plank] or 0)*totals.planks
	
	local nailsrow = t:tag('tr')
	nailsrow:tag('td'):wikitext(plink(nails)):done()
			:tag('td'):wikitext(totals.nails):done()
	local nailspricecell = nailsrow:tag('td')
	if gep(nails) == 0 then
		nailspricecell:attr('data-sort-value', 0):addClass('table-na'):wikitext('N/A')
	else
		nailspricecell:wikitext(coins(gep(nails)*totals.nails))
		totalprice = totalprice + gep(nails)*totals.nails
	end
	totalxp = totalxp + (xp_each[nails] or 0)*totals.nails
	
	for i,v in ipairs(totals._extra) do
		local extraqty = totals[v]
		local extrarow = t:tag('tr')
		extrarow:tag('td'):wikitext(plink(v)):done()
				:tag('td'):wikitext(extraqty):done()
		local extrapricecell = extrarow:tag('td')
		if gep(v) == 0 then
			extrapricecell:attr('data-sort-value', 0):addClass('table-na'):wikitext('N/A')
		else
			extrapricecell:wikitext(coins(gep(v)*extraqty))
			totalprice = totalprice + gep(v)*extraqty
		end
		totalxp = totalxp + (xp_each[v] or 0)*extraqty
	end
	
	t:tag('tr')
		:tag('th'):attr('colspan', 2):wikitext('Preço total'):done()
		:tag('th'):wikitext(coins(totalprice)):done()
		
	
	return string.format("%s\n%s\n* EXP de materiais: %s\n* EXP bônus para tábuas utilizadas: %s\n* EXP de recompensa: %s\n* '''Total de EXP: %s'''", outstr, tostring(t), fnum(totalxp), fnum(xp_bonus_reward), fnum(xp_reward), fnum(totalxp+xp_bonus_reward+xp_reward))
end

return p