Difference between revisions of "Module:EnchantmentList"

From Idlescape Wiki
Jump to navigation Jump to search
m (Get scrolls by skill)
m (Exclude soul wisdom)
 
Line 174: Line 174:
 
             elseif skill and item.tags then
 
             elseif skill and item.tags then
 
                 if contains(item.tags, skill) then
 
                 if contains(item.tags, skill) then
                     s = s .. createRow(item)
+
                     if (item.name ~= "Scroll of the Soul Wisdom") then
 +
                        s = s .. createRow(item)
 +
                    end
 
                 end
 
                 end
 
             end
 
             end

Latest revision as of 05:03, 14 March 2025


local p = {}

local data_module_names = {
	item = 'Module:Items/data',
	enchantment = 'Module:Enchantment/data',
	craftaug = 'Module:CraftingAugmenting/data',
}

local loaded_data_modules = {}

function p.loadData(data_type) 
	local module_name = data_module_names[data_type]
	if loaded_data_modules[module_name] == nil then
		loaded_data_modules[module_name] = mw.loadData(module_name)
	end
		
	return loaded_data_modules[module_name]
end

local function getItem(id)
	return p.loadData("item")[tostring(id)]
end

local function getEnchantment(id)
	return p.loadData("enchantment")[tostring(id)]
end

local function getCraftAug(id)
	return p.loadData("craftaug")[tostring(id)]
end

local function fullUrl(url)
	local newUrl = url
	if url:sub(1,5) == "https" then
		return newUrl
	end
	
	if url:sub(1,1) ~= "/" then
		newUrl = "/" .. newUrl
	end
	
	newUrl = "https://www.play.idlescape.com" .. newUrl
	return newUrl
end

local function icon(name, url, word)
	local s = fullUrl(url)
	s = "[[" .. name .. "|<img src=\"" .. s
	s = s .. "\" alt=\""  .. name .. "\" width=\"20\">"
	if word then
		s = s .. name
	end
	s = s .. "]]"
	return s
end

local function addSeparator(num)
	return tostring(tonumber(num)):reverse():gsub("(%d%d%d)","%1,"):gsub(",(%-?)$","%1"):reverse()
end

local function contains (tab, val)
    for index, value in ipairs(tab) do
        if value == val then
            return true
        end
    end
    return false
end


local function createRow(item)
    local s = ""
    s = s .. "<tr>"
    s = s .. "<td>"
    -- Image and Name
    s = s .. icon(item.name, item.itemImage, 1)
    s = s .. "</td>"
    s = s .. "<td>"
    -- Slot
    if item.categories then
        for index, val in pairs(item.categories) do
            s = s .. val .. ", "
        end
        s = s:sub(1, -3)
    end
    s = s .. "</td>"
    s = s .. "<td>"
    -- Level
    if item.level then
        s = s .. item.level
    end
    s = s .. "</td>"
    s = s .. "<td>"
    -- Silver Amount
    local craft = getCraftAug(item.id)
    if craft and craft.scrollcrafting and craft.scrollcrafting["111"] then
        s = s .. craft.scrollcrafting["111"]
    end
    s = s .. "</td>"
    s = s .. "<td>"
    -- Rune Amount
    if craft and craft.scrollcrafting then
        local skip = false
        for index, val in pairs(craft.scrollcrafting) do
            if skip == false and index >= "510" and index <= "519" then
                s = s .. val
                skip = true
            end
        end
    end
    s = s .. "</td>"
    s = s .. "<td>"
    -- Rune Type
    if craft and craft.scrollcrafting then
        local remove = false
        for index, val in pairs(craft.scrollcrafting) do
            if index >= "510" and index <= "519" then
                local ing = getItem(index)
                s = s .. ing.name
                s = s:sub(1, -6) .. ", "
                remove = true
            end
        end
        if remove then
            s = s:sub(1, -3)
        end
    end
    s = s .. "</td>"
    s = s .. "<td>"
    if item.enchantmentID then
        local enchant = getEnchantment(item.enchantmentID)
        s = s .. enchant.desc
    end
    s = s .. "</td>"
    s = s .. "</tr>"
    return s
end

local function createTable(slot, skill)
    local s = ""
    s = s .. "<table class=\"wikitable sortable hover-highlight jqery-tablesorter mw-collapsible -mw-made-collapsible\">"
    s = s .. "<tr>"
    s = s .. "<th class=\"headerSort\">"
    s = s .. "<img src=\"https://play.idlescape.com/images/enchanting/enchanted_scroll.png\" alt=\"Scrollcrafting\" width=\"40px\" height=\"40px\">"
    s = s .. "Scroll"
    s = s .. "</th>"
    s = s .. "<th class=\"headerSort\">"
    s = s .. "Slot"
    s = s .. "</th>"
    s = s .. "<th class=\"headerSort\">"
    s = s .. "Level"
    s = s .. "</th>"
    s = s .. "<th class=\"headerSort\">"
    s = s .. "Silver Amount"
    s = s .. "</th>"
    s = s .. "<th class=\"headerSort\">"
    s = s .. "Rune Amount"
    s = s .. "</th>"
    s = s .. "<th class=\"headerSort\">"
    s = s .. "Runes"
    s = s .. "</th>"
    s = s .. "<th class=\"headerSort\">"
    s = s .. "Effect per scroll"
    s = s .. "</th>"
    s = s .. "</tr>"
    for key, item in pairs(p.loadData('item')) do
        if item.class == "enchanted-scroll" then
            if slot and item.categories then
                if contains(item.categories, slot) then
                    if (item.name ~= "Scroll of the Soul Wisdom") then
                        s = s .. createRow(item)
                    end
                end
            elseif skill and item.tags then
                if contains(item.tags, skill) then
                    if (item.name ~= "Scroll of the Soul Wisdom") then
                        s = s .. createRow(item)
                    end
                end
            end
        end
    end
    s = s .. "</table>"
    return s
end

function p.list(frame)
	local args = frame:getParent().args
	return p._list(args)
end

function p._list(args)
    local slot
    local skill
    if args.slot then
        slot = args.slot
    elseif args.skill then
        skill = args.skill
    else 
        slot = args[1]
    end
    return createTable(slot, skill)
end

return p