Módulo:Spell cost table

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:Spell cost table/doc. [editar]
Módulo:Spell cost table requer Módulo:Mercado.
Módulo:Spell cost table requer Módulo:Moedas.
Módulo:Spell cost table requer Módulo:Mw.html extension.
Módulo:Spell cost table requer Módulo:Paramtest.
Módulo:Spell cost table requer Módulo:Yesno.

-- <pre>

local p = {}
require('Módulo:Mw.html extension')
local gep = require('Módulo:Mercado')._price
local coins = require('Módulo:Moedas')._amount
local yn = require('Módulo:Yesno')
local pt = require('Módulo:Paramtest')

local combo_runes = {
	['runa da névoa'] = { 'runa do ar', 'runa da água' },
	['runa do pó'] = { 'runa do ar', 'runa da terra' },
	['runa da lama'] = { 'runa da água', 'runa da terra' },
	['runa da fumaça'] = { 'runa do ar', 'runa do fogo' },
	['runa do vapor'] = { 'runa da água', 'runa do fogo' },
	['runa da lava'] = { 'runa da terra', 'runa do fogo' }
}

local staffs = {
	['cajado do ar'] = { 'runa do ar' },
	['cajado da água'] = { 'runa da água' },
	['cajado da terra'] = { 'runa da terra' },
	['cajado do fogo'] = { 'runa do fogo' },
	['bastão de lama'] = { 'runa da água', 'runa da terra' },
	['bastão de vapor'] = { 'runa da água', 'runa do fogo' },
	['bastão de lava'] = { 'runa da terra', 'runa do fogo' },
	['avêrnicos e congelamento'] = { 'runa do ar', 'runa da água' },
	['bastão elemental'] = { 'runa do ar', 'runa da água', 'runa da terra', 'runa do fogo'},
	['cajado místico'] = {'runa da água', 'runa da terra', 'runa do fogo'},
	['cajado da natureza'] = { 'runa da natureza' },
	['cajado da lei'] = { 'runa da lei' },
	['bastão de armadyl'] = { 'runa do ar' },

}

local percentage_saved = {
    ['cajado do ar'] = 1,
	['cajado da água'] = 1,
	['cajado da terra'] = 1,
	['cajado do fogo'] = 1,
	['bastão de lama'] = 1,
	['bastão de vapor'] = 1,
	['bastão de lava'] = 1,
	['avêrnicos e congelamento'] = 1,
	['bastão elemental'] = 1,
	['cajado místico'] = 1,
	['cajado da natureza'] = 0.1,
	['cajado da lei'] = 0.1,
	['bastão de armadyl'] = 1,

}

local non_rune_items = {
	['banana'] = true,
	['orbe sem poder'] = true,
	['argila macia'] = true,
}

function p.main(frame)
	local args = frame:getParent().args
	local runes = {}
	for i=1,10 do
		if not args['Runa'..i] then
			break
		end
		
		local rune = string.lower(args['Runa'..i])
		
		if not non_rune_items[rune] then
		    rune = 'runa ' .. rune
		end
		    
		local num = tonumber(args['Runa'..i..'num'] or 1)
		table.insert(runes,{rune,num})
	end
	local no_staff = args.semcajado ~= nil
	local show_profit = yn(args.tablet)
	local sold_name = pt.default_to(args.sold_name, mw.title.getCurrentTitle().subpageText)

	return p._main(runes,no_staff,show_profit,sold_name)
end

function p._main(runes,no_staff,show_profit,sold_name)
	local cols = show_profit and 3 or 2
	local ret = mw.html.create('table')
					:addClass('wikitable inventory-image')
					:tag('tr')
						:tag('th')
							:wikitext('Entrada')
						:done()
						:tag('th')
							:wikitext('Custo')
						:done()
						:IF(show_profit)
							:tag('th')
								:wikitext('Lucro')
							:done()
						:END()
					:done()
					:tag('tr')
						:tag('td')
							:wikitext(make_pics(runes))
						:done()
						:tag('td')
							:wikitext(coins(total_price(runes)))
						:done()
						:IF(show_profit)
							:tag('td')
								:wikitext(show_profit and (coins(gep(sold_name)-total_price(runes))))
							:done()
						:END()
					:done()

	local combos_used = {}
	local staffs_used = {}
	for i, v in pairs(combo_runes) do
		local amtused = 0
		local tblcopy = copytbl(runes)
		for _, w in ipairs(v) do
			for j, x in ipairs(tblcopy) do
				if w == x[1] then
					table.remove(tblcopy,j)
					if x[2] > amtused then
						amtused = x[2]
					end
				end
			end
		end
		if amtused > 0 then
			table.insert(tblcopy,{i, amtused})
			table.insert(combos_used,tblcopy)
		end
	end
	if #combos_used > 0 then
		ret:tag('tr')
			:tag('th')
				:attr('colspan',cols)
				:wikitext('Runas de combinação')
			:done()
		:done()
		for _, v in ipairs(combos_used) do
			ret:tag('tr')
				:tag('td')
					:wikitext(make_pics(v))
				:done()
				:tag('td')
					:wikitext(coins(total_price(v)))
				:done()
				:IF(show_profit)
					:tag('td')
						:wikitext(show_profit and (coins(gep(sold_name)-total_price(v))))
					:done()
				:END()
			:done()
		end
	end

	for i, v in pairs(staffs) do
		local isused = false
		local tblcopy = copytbl(runes)
		for _, w in ipairs(v) do
			for j, x in ipairs(tblcopy) do
				if w == x[1] then
				    isused = true
				    if percentage_saved[i] == 1 then
					    table.remove(tblcopy,j)
					else
					    new_amnt = tblcopy[j][2] * (1 - (percentage_saved[i] or 0))
					   tblcopy[j] = { tblcopy[j][1], new_amnt }
					end
				end
			end
		end
		if isused then
			table.insert(tblcopy,{i, 0})
			table.insert(staffs_used,tblcopy)
		end
	end

	if #staffs_used > 0 and not no_staff then
		ret:tag('tr')
			:tag('th')
				:attr('colspan',cols)
				:wikitext('Cajados')
			:done()
		:done()
		for _, v in ipairs(staffs_used) do
			ret:tag('tr')
				:tag('td')
					:wikitext(make_pics(v))
				:done()
				:tag('td')
					:wikitext(coins(total_price(v)))
				:done()
				:IF(show_profit)
					:tag('td')
						:wikitext(show_profit and (coins(gep(sold_name)-total_price(v))))
					:done()
				:END()
			:done()
		end
	end
	return ret
end

function copytbl(tbl)
	local ret = {}
	for _, v in ipairs(tbl) do
		table.insert(ret,v)
	end
	return ret
end

function make_pics(runes)
	local ret = {}
	for _, v in ipairs(runes) do
		if v[1] == 'avêrnicos e congelamento' then
			table.insert(ret,'[[File:Varinha dos Avêrnicos.png|link=Varinha dos Avêrnicos]]')
			table.insert(ret,'[[File:Livro do congelamento.png|link=Livro do congelamento]]')
		elseif v[1] == 'cajado místico' then
			table.insert(ret,'[[File:Cajado místico (75).png|link=Cajado místico]]')
		elseif v[1] == 'bastão de armadyl' then
			table.insert(ret,'[[File:Bastão de Armadyl.png|link=Bastão de Armadyl]]')
		else
			if v[2] > 0 then
				table.insert(ret,'<sup>'..v[2]..'</sup>')
			end
			table.insert(ret,'[[File:'..v[1]..'.png|link='..v[1]..']]')
		end
	end
	return table.concat(ret)
end

function total_price(runes)
	local ret = 0
	for _, v in ipairs(runes) do
		if v[2] > 0 then
			ret = ret + gep(v[1]) * v[2]
		end
	end
	return ret
end

return p