Module:Imbuing

From Fractured Wiki
Jump to navigation Jump to search

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

local TableTools = require("Module:TableTools")
local Utils = require("Module:Utils")
local Pagelist = require("Module:Pagelist")
local List = require("Module:List")
local mw = mw

local gsub = string.gsub
local tinsert = table.insert

local pagelist = Pagelist._main
local keysToList = TableTools.keysToList
local shallowClone = TableTools.shallowClone
local table_size = TableTools.size
local sortedPairs = TableTools.sortedPairs
local formatNum = Utils.formatNum
local pageExists = Utils.pageExists
local sprintf = Utils.sprintf
local strlen = Utils.strlen
local upper = Utils.upper
local tableSort = Utils.tableSort
local makeList = List.makeList

--[[------------------------------------------------]]
--[[--------------- MODULE FUNCTIONS ---------------]]
--[[------------------------------------------------]]
local p = require("Module:BaseModule"):newModule()
local imbue_table = p:getModuleData("Module:Imbuing/Data")

local main_args = {
    parentFirst = true,
    wrappers = {
        "Template:ItemTable",
        "Template:ItemHeader",
        "Template:ItemRecipeTable",
        "Template:ItemIngredientOf",
        "Template:EquipmentByAttribute",
        "Template:CookingList",
    }
}

--[[------------------------------------------------]]
--[[---------------- PAGE FUNCTIONS ----------------]]
--[[------------------------------------------------]]

p.generateImbueTable = p:makeInvokeFunc("_generate_imbue_table", main_args)
function p._generate_imbue_table(args, frame) -- luacheck: ignore
--function generate_imbue_table(args, frame)


    local table_header_items = {"Imbue Effect", "T2 [[File:Puzzle.png|30px]]", "Value T1", "Group", "Compatible<br>Gems", "Slot", "Required Aspects"}
    local table_header = "<table id='imbueTable' class='wikitable sortable' style='text-align: center'>"

	local fracturedBaseLinkTemplate = "https://fracturedbase.com/imbuing?imbuement=%s"

    local slot_icons = {
        ["Amulet"] = "Icon_FoxTailAmulet.png",
        ["Armor"] = "Icon_LeatherArmor.png",
        ["Shield"] = "Icon_WoodenBuckler.png",
        ["Weapon"] = "Icon_BasicWeapon_LongSword.png",
        ["Ring"] = "Icon_Ring_Ruby.png"
    }

    local table_data_list = {}
    local table_footer = "</table>"

    local imbue_names_list = {}
    for imbue_name, _ in pairs(imbue_table) do
        table.insert(imbue_names_list, imbue_name)
    end

    table.sort(imbue_names_list)


    local aspect_icons_dict = {}

        for idx, imbue_name in pairs(imbue_names_list) do
            local imbue_data = imbue_table[imbue_name]

            --local row_elements = {}

            local imbue_value = imbue_data["Value"]
            local imbue_group = imbue_data["Group"]
            --table.insert(row_elements, imbue_name)
            --table.insert(row_elements, )
            --table.insert(row_elements, imbue_data["Group"])

            local sorted_gems = {}
            local sorted_slots = {}
            local sorted_aspects = {}

            for _,x in pairs(imbue_data["Gems"]) do table.insert(sorted_gems, string.format("<span display='display: inline;' class='tooltip'>[[File:Icon_Gem_%s Perfect.png|30px|alt=%s|link=]]<span class='tooltiptext'>%s</span></span>", x, x, x)) end
            for _,x in pairs(imbue_data["Slots"]) do table.insert(sorted_slots, string.format("<span display='display: inline;' class='tooltip'>[[File:%s|30px|alt=%s|link=]]<span class='tooltiptext'>%s</span></span>", slot_icons[x], x, x)) end
            for _,x in pairs(imbue_data["Aspects"]) do table.insert(sorted_aspects, string.format("<span display='display: inline;' class='tooltip'>[[File:Icon_Aspects_%s.png|30px|alt=%s|link=]]<span class='tooltiptext'>%s</span></span>", x, x, x)) end

            table.sort(sorted_gems)
            table.sort(sorted_slots)
            table.sort(sorted_aspects)

            local aspect_icons_string = table.concat(sorted_aspects, " ")
            local gems_icons_string = table.concat(sorted_gems, " ")
            local slots_icons_string = table.concat(sorted_slots, " ")

            --table.insert(row_elements, table.concat(sorted_gems, " "))
            --table.insert(row_elements, table.concat(sorted_slots, " "))
            --table.insert(row_elements, table.concat(sorted_aspects, " "))

            --local aspect_icons_list = {}
            --for aspect_idx, aspect_name in pairs(sorted_aspects) do
            --    local aspect_icon_str = string.format("<span class='tooltip'>[[File:Icon_Aspects_%s.png|30px|alt=%s|link=]]<span class='tooltiptext'>%s</span></span>", aspect_name, aspect_name, aspect_name)
            --    table.insert(aspect_icons_list, aspect_icon_str)
            --end
            --
            --local aspect_icons_string = table.concat(aspect_icons_list, " ")

            --table.insert(row_elements, aspect_icons_string)

            local format_string = "<td style='justify-content: space-evenly; align-items: center'>%s</td>"
            
            local recipeName = imbue_data["RecipeName"]
			local link = string.format(fracturedBaseLinkTemplate, recipeName)
			--local linkEntry = string.format('[%s Link]', link)
			local linkEntry = string.format('<span class="link_new_window">[[File:ExternalLink.png|30px|alt=FracturedBaseLink|link=%s]]</span>', link)
			
            local row_string = string.format("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td>", imbue_name, linkEntry, imbue_value, imbue_group)

            row_string = row_string .. string.format(format_string, gems_icons_string)
            row_string = row_string .. string.format(format_string, slots_icons_string)
            row_string = row_string .. string.format(format_string, aspect_icons_string)

        row_string = row_string .. "</tr>"

        table.insert(table_data_list, row_string)
    end

    local table_string = table_header .. "<tr><th>" .. table.concat(table_header_items, "</th><th>") .. "</th></tr>" .. table.concat(table_data_list) .. table_footer

    --print(table_string)
    return mw.getCurrentFrame():preprocess(table_string)
    --return 1
end


------------------------------------------
return p