RuneScape Wiki
Advertisement

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
Advertisement