Documentation for this module may be created at Module:Spell cost table/doc
-- <pre>
local p = {}
local gep = require('Module:Exchange')._price
local coins = require('Module:Coins')._amount
local combo_runes = {
['mist rune'] = { 'air rune', 'water rune' },
['dust rune'] = { 'air rune', 'earth rune' },
['mud rune'] = { 'water rune', 'earth rune' },
['smoke rune'] = { 'air rune', 'fire rune' },
['steam rune'] = { 'water rune', 'fire rune' },
['lava rune'] = { 'earth rune', 'fire rune' }
}
local staffs = {
['staff of air'] = { 'air' },
['staff of water'] = { 'water' },
['staff of earth'] = { 'earth' },
['staff of fire'] = { 'fire' },
['mud battlestaff'] = { 'water', 'earth' },
['steam battlestaff'] = { 'water', 'fire' },
['lava battlestaff'] = { 'earth', 'fire' },
['avernic of frost'] = { 'air', 'water' }
}
function p.main(frame)
local args = frame:getParent().args
local runes = {}
for i=1,10 do
if not args['Rune'..i] then
break
end
local rune = string.lower(args['Rune'..i])..' rune'
local num = tonumber(args['Rune'..i..'num'] or 1)
table.insert(runes,{rune,num})
end
return p._main(runes)
end
function p._main(runes)
local ret = mw.html.create('table')
:addClass('wikitable')
:tag('caption')
:wikitext('Spell cost')
:done()
:tag('tr')
:tag('th')
:wikitext('Input')
:done()
:tag('th')
:wikitext('Cost')
:done()
:done()
:tag('tr')
:tag('td')
:wikitext(make_pics(runes))
:done()
:tag('td')
:wikitext(get_total(runes))
:done()
: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','2')
:wikitext('Combo runes')
:done()
:done()
for _, v in ipairs(combos_used) do
ret:tag('tr')
:tag('td')
:wikitext(make_pics(v))
:done()
:tag('th')
:wikitext(coins(total_price(v)))
:done()
:done()
end
end
for i, v in pairs(staffs) do
local used = false
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)
used = true
end
end
end
if used then
table.insert(tblcopy,{i, 0})
table.insert(staffs_used,tblcopy)
end
end
if #staffs_used > 0 then
ret:tag('tr')
:tag('th')
:attr('colspan','2')
:wikitext('Staves')
:done()
:done()
for _, v in ipairs(staffs_used) do
ret:tag('tr')
:tag('td')
:wikitext(make_pics(v))
:done()
:tag('th')
:wikitext(coins(total_price(v)))
:done()
: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] == 'avernic of frost' then
table.insert(ret,'[[File:Avernic wand.png|link=Avernic wand]]')
table.insert(ret,'[[File:Tome of frost.png|link=Tome of frost]]')
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