RuneScape Wiki
Advertisement

Documentation for this module may be created at Module:VisWaxTwo/doc

-- <nowiki>
local p = {}
local coins = require('Module:Coins')

local runes = {
	"Air", "Water", "Earth", "Fire", "Dust", "Lava", "Mist", "Mud", "Smoke", "Steam", "Mind", "Body", "Cosmic", "Chaos", "Nature", "Law", "Death", "Astral", "Blood", "Soul"
}
-- Sets up the base quantities needed for the machine 
local rune_quantities = {
	1000, 1000, 1000, 1000, 500, 500, 500, 300, 500, 500, 2000, 2000, 400, 500, 350, 300, 400, 300, 350, 300
}
--creates a table of prices based on the runes arrary
function get_prices(frame)
	local prices = {}
 
	for _, r in pairs(runes) do
		table.insert(prices, tonumber(frame:expandTemplate{ title = 'GEP', args = { r .. " rune" } }))
	end
 
	return prices
end
--returns the base quantity for the runes if a rune is selected 
function p.quantity(frame)
        local attempts = tonumber(frame.args[1])
	local index = tonumber(frame.args[2])
        local runesneeded = 0
	if index == 0 or index > #rune_quantities then
		return "No rune selected"
	else
                runesneeded = rune_quantities[index] + math.floor(rune_quantities[index] * attempts * .005)
		return runesneeded
	end
end
-- this creates the table following the calculator. 
function p.table(frame)
	local prices = get_prices(frame)
 
	local t = mw.html.create('table')
	          :addClass('wikitable sortable')
	          :tag('tr')
	              :tag('th'):wikitext('Rune'):done()
	              :tag('th'):wikitext('Base quantity'):done()
	              :tag('th'):wikitext('Amount added Per Try'):done()
	              :tag('th'):wikitext('Price per Rune'):done()
                      :tag('th'):wikitext('Price per Try'):done()
                      :tag('th'):wikitext('Total Base Price'):done()
	          :done()
 
	for i, r in pairs(runes) do
		t:tag('tr')
			:tag('td'):wikitext('[[File:' .. r .. ' rune.png]] [[' .. r .. ' rune]]'):done()
			:tag('td'):wikitext(rune_quantities[i]):done()
                        :tag('td'):wikitext(rune_quantities[i]*.005):done()
			:tag('td'):wikitext(coins._amount(prices[i])):done()
			:tag('td'):wikitext(coins._amount(rune_quantities[i] * prices[i] * .005)):done()
                        :tag('td'):wikitext(coins._amount(rune_quantities[i] * prices[i])):done()
	end
 
	return t
end
 
function p.main(frame)
	local prices = get_prices(frame)
 
	local r1 = tonumber(frame.args[1]) or 0
	local r2 = tonumber(frame.args[2]) or 0
	local r3 = tonumber(frame.args[3]) or 0
	local totalviswax = tonumber(frame.args[4]) or 0
        local attempts = tonumber(frame.args[5]) or 0

--Set up logic to determine whether to prompt for more rune choices or give profit determination

	local r1known = 0
	local r2known = 0
	local r3known = 0

        if r1 > 0 then
                r1known = 1
        end
        
        if r2 > 0 then
                r2known = 1
        end

        if r3 > 0 then
                r3known = 1
        end
        
	local total_knowns = r1known + r2known + r3known
 
	local costofrunes = 0

--Finds total cost of runes

	if total_knowns == 3 then
	        costofrunes = rune_quantities[r1] * prices[r1] +  prices[r1] * math.floor(rune_quantities[r1] * attempts * .005) + rune_quantities[r2] * prices[r2] + prices[r2] * math.floor(rune_quantities[r2]  * attempts * .005) + rune_quantities[r3] * prices[r3] + prices[r3] * math.floor(rune_quantities[r1] *  attempts * .005)
	end
 
	local vis_wax_price = tonumber(frame:expandTemplate{ title = 'GEP', args = { "Vis wax" } })
 
	local profit = vis_wax_price * totalviswax - costofrunes
        
        if total_knowns < 3 then
                return "Please Select a rune for each Slot"
        else 
                return "The cost of runes for " .. totalviswax .. " out of 100 vis wax, at " .. attempts .. " attempt(s) is " .. coins._amount(costofrunes) .. "." .. "<br>Expected profit: " .. coins._amount(profit)
        end

end
 
return p
Advertisement