Module:Housing
Documentation for this module may be created at Module:Housing/doc
local p = {} local utils = require("Module:Utils") local constant = mw.loadJsonData("Module:Data/constant.json") local data = mw.loadJsonData("Module:Data/housing.json") local resource = mw.loadJsonData("Module:Data/resource.json") function p.createInfobox(frame) local name = frame.args.name if name == nil or name == "" then name = mw.title.getCurrentTitle().subpageText end local image = frame.args.image local item = data[name] local str = { image = image, type = item.type, subtype = item.subtype, placement = utils.concat(item.placement), size = item.size * 2 } return frame:expandTemplate{title = 'Infobox housing', args = str} end function p.getDescription(frame) local name = frame.args.name if name == nil or name == "" then name = mw.title.getCurrentTitle().subpageText end return data[name].description end function p.createCraftingTable(frame) local name = frame.args.name if name == nil or name == "" then name = mw.title.getCurrentTitle().subpageText end local item = data[name] local total = {} local str = { basic = "", expanded = "", total = "" } local cat = { unique = {}, rare = {}, common = {}, currency = {} } for k, v in ipairs(item.craftingRecipes) do if v.name == "Gold" then str.basic = str.basic .. frame:expandTemplate{title = 'Gold', args = {v.amount}} .. ", " else str.basic = str.basic .. frame:expandTemplate{title = 'Icon', args = {v.name, v.amount}} .. ", " end end str.basic = str.basic:sub(1, -3) for k, v in ipairs(item.craftingRecipes) do if v.name == "Gold" then str.expanded = str.expanded .. frame:expandTemplate{title = 'Gold', args = {v.amount}} .. ", " else str.expanded = str.expanded .. frame:expandTemplate{title = 'Icon', args = {v.name, v.amount}} .. ", " end if resource[v.name] ~= nil and resource[v.name].craftingRecipes ~= nil then for k2, v2 in ipairs(resource[v.name].craftingRecipes) do if total[v2.name] == nil then total[v2.name] = v2.amount else total[v2.name] = total[v2.name] + v2.amount end if v2.name == "Gold" then str.expanded = str.expanded .. 'class="subcraft" | ' .. frame:expandTemplate{title = 'Gold', args = {v2.amount}} .. ", " else str.expanded = str.expanded .. 'class="subcraft" | ' .. frame:expandTemplate{title = 'Icon', args = {v2.name, v2.amount}} .. ", " end end else if total[v.name] == nil then total[v.name] = v.amount else total[v.name] = total[v.name] + v.amount end end end str.expanded = str.expanded:sub(1, -3) for k, v in pairs(total) do local object = resource[k] or data[k] if object.type == "Currency" then cat.currency[k] = v elseif string.find(k, "Spectra") then cat.common[k] = v elseif string.find(k, "Vestige") or string.find(k, "Essence") or string.find(k, "Recipe") then cat.unique[k] = v else cat.rare[k] = v end end local first = true for k, v in pairs(cat.unique) do if first then str.total = str.total .. "|-\n" str.total = str.total .. '! colspan=3 | <div style="color:#5ba3d7;font-size:200%;font-weight:700;font-style:italic;margin:1rem">Rare resources</div>\n' end first = false local object = resource[k] or data[k] str.total = str.total .. "|-\n" str.total = str.total .. "| " .. frame:expandTemplate{title = 'Icon', args = {k}} .. "\n" str.total = str.total .. "| " .. v .. "\n" str.total = str.total .. "| " .. object.description .. "@@" end for k, v in pairs(cat.rare) do if first then str.total = str.total .. "|-\n" str.total = str.total .. '! colspan=3 | <div style="color:#5ba3d7;font-size:200%;font-weight:700;font-style:italic;margin:1rem">Rare resources</div>\n' end first = false str.total = str.total .. "|-\n" str.total = str.total .. "| " .. frame:expandTemplate{title = 'Icon', args = {k}} .. "\n" str.total = str.total .. "| " .. v .. "\n" str.total = str.total .. "| " .. resource[k].description .. "@@" end first = true for k, v in pairs(cat.common) do if first then str.total = str.total .. "|-\n" str.total = str.total .. '! colspan=3 | <div style="color:#5ba3d7;font-size:200%;font-weight:700;font-style:italic;margin:1rem">Common resources</div>\n' end first = false str.total = str.total .. "|-\n" str.total = str.total .. "| " .. frame:expandTemplate{title = 'Icon', args = {k}} .. "\n" str.total = str.total .. "| " .. v .. "\n" str.total = str.total .. "| " .. resource[k].description .. "@@" end first = true for k, v in pairs(cat.currency) do if first then str.total = str.total .. "|-\n" str.total = str.total .. '! colspan=3 | <div style="color:#5ba3d7;font-size:200%;font-weight:700;font-style:italic;margin:1rem">Currency</div>\n' end first = false str.total = str.total .. "|-\n" str.total = str.total .. "| " .. frame:expandTemplate{title = 'Icon', args = {k}} .. "\n" str.total = str.total .. "| " .. v .. "\n" str.total = str.total .. "| " .. resource[k].description .. "@@" end str.total = str.total:sub(1, -3) return frame:expandTemplate{title = 'Crafting table', args = str} end function p.createHousingList(frame) local str = "" local whitelist = constant["Housing Whitelist"] for k, v in pairs(whitelist) do local item = data[v] local filter = { ["Decor"] = "decor", ["Artifacts"] = "artifacts", ["Trophies"] = "trophies", ["Pets"] = "pets", ["Furnishings"] = "furnishings", ["Lighting"] = "lighting", ["Decorations"] = "decorations", ["Wall Decor"] = "walldecor", ["Floor"] = "floor", ["Item Surface"] = "itemsurface", ["Wall"] = "wall", ["Ceiling"] = "ceiling" } local class = "filter-item " .. filter[item.type] .. (item.subtype ~= nil and " " .. filter[item.subtype] or "") for k2, v2 in pairs(item.placement) do class = class .. " " .. filter[v2] end local template = { image = string.gsub(v, ":", ""), name = v, class = class } str = str .. frame:expandTemplate{title = 'Item box', args = template} end return str end return p