Módulo:Charge drain

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:Charge drain/doc. [editar]
Módulo:Charge drain requer Module:ExchangeLite.
Módulo:Charge drain requer Module:Yesno.
Módulo:Charge drain é solicitado por Módulo:Augmented degrade.

-- <nowiki>
local yesno = require('Module:Yesno')
local p = {}

local reduction = {
	[0] = {1, 1},
	[1] = {34, 0.99},
	[2] = {49, 0.97},
	[3] = {64, 0.95},
	[4] = {69, 0.93},
	[5] = {78, 0.91},
	[6] = {83, 0.88},
	[7] = {91, 0.86},
	[8] = {95, 0.83},
	[9] = {105, 0.8},
}

local slot = {
	['2m'] = 1.5,
	mp = 1,
	armadura = 1,
	corpo = 1,
	pernas = 1,
	escudo = 0.5,
	ms = 0.5,
	ferramenta = 0.25,
}

local eff = {
	[0] = 1,
	[1] = 0.94,
	[2] = 0.88,
	[3] = 0.82,
	[4] = 0.76,
	e1 = 0.91,
	e2 = 0.82,
	e3 = 0.73,
	e4 = 0.64
}

local lv = {
	[0] = 1,
	[1] = 0.9,
	[2] = 0.875,
	[3] = 0.85,
}

local cape = {
	[false] = 1,
	[true] = 0.98,
}

local coins = {
	[true] = require('Module:ExchangeLite').price('Carga divina') / 3000,
	[false] = 1,
}

local function floor(n)
	return math.floor(n*100)/100
end

local function floor_s(n)
	return string.format('%.2f', floor(n))
end


function main_table(args)
	local atier = tonumber(args.tier) or 70
	local tier = atier
	if tier < 67 then
		tier = 67
	end
	local collapsed = args.collapsed or false
	local coinsver = yesno(args.coins, args.coins)
	
	local base = (tier - 60) / 8
	local t = mw.html.create('table')
	
	local function make_4(tr, i, mult)
		local adj = base * reduction[i][2] * mult * coins[coinsver]
		tr	:tag('td')
				:wikitext(floor_s(adj * slot['2m']))
			:done()
			:tag('td')
				:wikitext(floor_s(adj * slot['mp']))
			:done()
			:tag('td')
				:wikitext(floor_s(adj * slot['ms']))
			:done()
			:tag('td')
				:wikitext(floor_s(adj * slot['ferramenta']))
			:done()
	end
	
	local function make_row(i, lvl, addcape)
		local tr = t:tag('tr')
		addcape = addcape or false
		local str = i
		if addcape then
			str = i .. '<br/>+Capa'
		end
		
		tr	:tag('th')
				:wikitext(str)
			:done()
			:tag('th')
				:wikitext(reduction[i][1])
			:done()
		make_4(tr, i, lv[lvl] * eff[0] * cape[addcape])
		make_4(tr, i, lv[lvl] * eff[1] * cape[addcape])
		make_4(tr, i, lv[lvl] * eff['e1'] * cape[addcape])
		make_4(tr, i, lv[lvl] * eff[2] * cape[addcape])
		make_4(tr, i, lv[lvl] * eff[3] * cape[addcape])
		make_4(tr, i, lv[lvl] * eff['e3'] * cape[addcape])
		if i >= 8 and not addcape then
			make_row(i, lvl, true)
		end
	end
	
	local function make_header(lv)
		local str = 'Nível do objeto 1-4'
		if (lv == 1) then
			str = 'Nível do objeto 5-13'
		end
		if (lv == 2) then
			str = 'Nível do objeto 14-17'
		end
		if (lv == 3) then
			str = 'Nível do objeto 18+'
		end
		local class = 'wikitable mw-collapsible'
		if collapsed then
			class = 'wikitable mw-collapsible mw-collapsed'
		end
		
		t	:addClass(class)
			:css('text-align', 'right')
			:tag('tr')
				:tag('th')
					:attr('rowspan', 3)
					:wikitext('Redução')
				:done()
				:tag('th')
					:attr('rowspan', 3)
					:wikitext('[[Ficheiro:Invenção ícone.png|21x21px|link=Invenção]]')
				:done()
				:tag('th')
					:attr('colspan', 29)
					:wikitext(str)
				:done()
			:done()
			:tag('tr')
				:tag('th')
					:attr('colspan', 4)
					:wikitext('Base')
				:done()
				:tag('th')
					:attr('rowspan', 14)
					:wikitext('&nbsp;')
				:done()
				:tag('th')
					:attr('colspan', 4)
					:wikitext('Eficiência 1')
				:done()
				:tag('th')
					:attr('rowspan', 14)
					:wikitext('&nbsp;')
				:done()
				:tag('th')
					:attr('colspan', 4)
					:wikitext('Eficiência Superior 1')
				:done()
				:tag('th')
					:attr('rowspan', 14)
					:wikitext('&nbsp;')
				:done()
				:tag('th')
					:attr('colspan', 4)
					:wikitext('Eficiência 2')
				:done()
				:tag('th')
					:attr('rowspan', 14)
					:wikitext('&nbsp;')
				:done()
				:tag('th')
					:attr('colspan', 4)
					:wikitext('Efic 3/Efic Sup 2')
				:done()
				:tag('th')
					:attr('rowspan', 14)
					:wikitext('&nbsp;')
				:done()
				:tag('th')
					:attr('colspan', 4)
					:wikitext('Eficiência Superior 3')
				:done()
			:done()
			:tag('tr')
				:tag('th')
					:wikitext('2M')
				:done()
				:tag('th')
					:wikitext('MP/A')
				:done()
				:tag('th')
					:wikitext('MS')
				:done()
				:tag('th')
					:wikitext('T')
				:done()
				:tag('th')
					:wikitext('2M')
				:done()
				:tag('th')
					:wikitext('MP/A')
				:done()
				:tag('th')
					:wikitext('MS')
				:done()
				:tag('th')
					:wikitext('T')
				:done()
				:tag('th')
					:wikitext('2M')
				:done()
				:tag('th')
					:wikitext('MP/A')
				:done()
				:tag('th')
					:wikitext('MS')
				:done()
				:tag('th')
					:wikitext('T')
				:done()
				:tag('th')
					:wikitext('2M')
				:done()
				:tag('th')
					:wikitext('MP/A')
				:done()
				:tag('th')
					:wikitext('MS')
				:done()
				:tag('th')
					:wikitext('T')
				:done()
				:tag('th')
					:wikitext('2M')
				:done()
				:tag('th')
					:wikitext('MP/A')
				:done()
				:tag('th')
					:wikitext('MS')
				:done()
				:tag('th')
					:wikitext('T')
				:done()
				:tag('th')
					:wikitext('2M')
				:done()
				:tag('th')
					:wikitext('MP/A')
				:done()
				:tag('th')
					:wikitext('MS')
				:done()
				:tag('th')
					:wikitext('T')
				:done()
			:done()
		:done()
	end
	
	t	:tag('tr')
			:tag('th')
				:attr('colspan', 31)
				:wikitext('Nível ' .. atier)
			:done()
		:done()
	
	make_header(0)
	for i = 0, 9, 1 do
		make_row(i, 0)
	end
	make_header(1)
	for i = 0, 9, 1 do
		make_row(i, 1)
	end
	make_header(2)
	for i = 0, 9, 1 do
		make_row(i, 2)
	end
	make_header(3)
	for i = 0, 9, 1 do
		make_row(i, 3)
	end

	return tostring(t)
end

function p.table(frame)
	local args = frame:getParent().args

	local ret = ''
	if args.coins == nil then
		args.coins = false
		ret = {'{{Alterar Infobox', '|text1=Cargas por segundo', '|text2=Equivalente de moedas por segundo', '|item1=', main_table(args), '|item2=' }
		
		args.coins = true
		table.insert(ret, main_table(args))
		table.insert(ret, '}}')
		ret = mw.getCurrentFrame():preprocess(table.concat(ret, '\n'))
		
	else
		-- coins specified, only do one
		ret = tostring(main_table(args))
	end
	return ret
end


	
function oneslot_table(tier, s, coinstable)
	tier = tonumber(tier) or 70
	if tier < 67 then
		tier = 67
	end
	local base = (tier - 60) / 8 * slot[s]
	local t = mw.html.create('table')
	t:tag('caption'):wikitext('&nbsp;')
	
	local function make_row(i, l, addcape, coinver)
		local adj = base * lv[l] * reduction[i][2] * cape[addcape] * coins[coinver]
		local str = i
		if addcape then
			str = i .. '<br />+Capa'
		end
		t	:tag('tr')
				:tag('th')
					:wikitext(str)
				:done()
				:tag('th')
					:wikitext(reduction[i][1])
				:done()
				:tag('td')
					:wikitext(floor_s(adj * eff[0]))
				:done()
				:tag('td')
					:wikitext(floor_s(adj * eff[1]))
				:done()
				:tag('td')
					:wikitext(floor_s(adj * eff['e1']))
				:done()
				:tag('td')
					:wikitext(floor_s(adj * eff[2]))
				:done()
				:tag('td')
					:wikitext(floor_s(adj * eff[3]))
				:done()
				:tag('td')
					:wikitext(floor_s(adj * eff['e3']))
				:done()
				:tag('td')
					:wikitext(floor_s(adj * eff[4]))
				:done()
				:tag('td')
					:wikitext(floor_s(adj * eff['e4']))
				:done()
			:done()
		if i >= 8 and not addcape then
			make_row(i,l,true,coinver)
		end
	end
	
	local function make_header(str)
		t	:addClass('wikitable')
			:css({
				['text-align'] = 'right',
				margin = '1em auto',
				})
			:tag('tr')
				:tag('th')
					:attr('rowspan', 2)
					:wikitext('Redução')
				:done()
				:tag('th')
					:attr('rowspan', 2)
					:wikitext('[[Ficheiro:Invenção ícone.png|21x21px|link=Invenção]]')
				:done()
				:tag('th')
					:attr('colspan', 9)
					:wikitext(str)
				:done()
			:done()
			:tag('tr')
				:tag('th')
					:wikitext('Base')
				:done()
				:tag('th')
					:attr('rowspan', 13)
					:wikitext('&nbsp;')
				:done()
				:tag('th')
					:wikitext('Efic 1')
				:done()
				:tag('th')
					:wikitext('EficSup 1')
				:done()
				:tag('th')
					:wikitext('Efic 2')
				:done()
				:tag('th')
					:wikitext('Efi 3<br />EficSup 2')
				:done()
				:tag('th')
					:wikitext('EficSup 3')
				:done()
				:tag('th')
					:wikitext('Efic 4')
				:done()
				:tag('th')
					:wikitext('EficSup 4')
				:done()
			:done()
	end
	
	make_header('Nível do objeto 1-4')
	for i = 0,9,1 do
		make_row(i, 0, false, coinstable)
	end
	
	make_header('Nível do objeto 5-13')
	for i = 0,9,1 do
		make_row(i, 1, false, coinstable)
	end

	make_header('Nível do objeto 14-18')
	for i = 0,9,1 do
		make_row(i, 2, false, coinstable)
	end

	make_header('Nível do objeto 18+')
	for i = 0,9,1 do
		make_row(i, 3, false, coinstable)
	end
	
	return tostring(t)
end


p.oneslot = function(tier, s)
	ret = {'{{Alterar Infobox', '|text1=Cargas por segundo', '|text2=Equivalente de moedas por segundo', '|item1=', oneslot_table(tier,s,false), '|item2=', oneslot_table(tier,s,true), '}}'}
	
	return mw.getCurrentFrame():preprocess(table.concat(ret, '\n'))
end


return p