Módulo:Construction contracts
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: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