×
Create a new article
Write your page title here:
We currently have 276 articles on Waste Of Space Wiki. Type your article name above or create one of the articles listed here!



    Waste Of Space Wiki

    Module:GetPartInfo/Testing

    T1


    T2

    "Emits light when powered with electricity. Can be colored in different ways, changing the light color"

    • Brightness(number) [0 - 2] - The brightness of the light.
    • LightRange(number) [1 - 60] - The range of the light.

    local module = {}
    
    --mw.loadData has performance benefits over require as it loads the module onnce per page, not of per invocation.
    local Parts = mw.loadData("Module:PartJSON")
    
    local function getRawMaterials(item)
        local Materials = {}
    
        local function get(item, amount)
            for _, itemEntry in pairs(item.Recipe) do
                local itemName = itemEntry[1]
                local itemAmount = itemEntry[2]
    
                if not Parts[itemName] or not Parts[itemName]["Recipe"] then
                    if not Materials[itemName] then
                        Materials[itemName] = 0
                    end
                    Materials[itemName] = Materials[itemName] + (amount * itemAmount)
                else
                    get(Parts[itemName], amount * itemAmount)
                end
            end
        end
    
        if item and item.Recipe then
            get(item, 1)
        else
            return false
        end
    
        return Materials
    end
    
    local function formatNormalRecipe(recipe)
        local formattedRecipe = {}
    
        if recipe then
            for _, itemEntry in pairs(recipe) do
                local itemName = itemEntry[1]
                local itemAmount = itemEntry[2]
                
                formattedRecipe[itemName] = itemAmount
            end
    
            return formattedRecipe
        end
    end
    
    local function formatRecipe(recipe)
        if recipe then
            local recipeString = ""
    
            local i = 0
    
            for itemName, amount in pairs(recipe) do
                local endString = ""
    
                i = i + 1
    
                if not i == #recipe then
                    endString = ""
                else
                    endString = "\n\n"
                end
    
                recipeString = recipeString .. "[[" .. itemName .. "|" .. itemName .. " " .. amount .. "x]]" .. endString
            end
    
            return recipeString
        else
            return "No crafting recipe"
        end
    end
    
    function module.getField(page)
        local args = page.args
        local itemName = args[2] or page:getParent():getTitle()
        local field = args[1]
    
        if Parts[itemName] then
            if field == "Description" then
                local part = Parts[itemName]
                local description = part.Description
        
                if description then
                    local descriptionSplit = mw.text.split(description, "\n")
                    local descriptionFormatted = "''\""
        
                    for i, str in pairs(descriptionSplit) do
                        if i > 1 and #str > 3 then descriptionFormatted = descriptionFormatted .. "''\n\n''" end
                        if #str > 3 then 
                            descriptionFormatted = descriptionFormatted .. string.gsub(str, "%*%*", "'''") end
                    end
        
                    return descriptionFormatted .. "\" ''"
                else
                    return "No description found"
                end
            elseif field == "Malleability" then
                local malleability = Parts[itemName]["Malleability"]
        
                if malleability == 0 or not malleability then
                    return "Fixed size"
                else
                    return malleability
                end
            elseif field == "Raw recipe" then
                local item = Parts[itemName]
                local rawRecipe = getRawMaterials(item)
        
                module.rr = rawRecipe
                module.r = item.Recipe
        
                local recipeFormatted = getRawMaterials(rawRecipe)
        
                if formatRecipe(rawRecipe) == formatRecipe(formatNormalRecipe(item.Recipe)) then
                    return nil
                end
        
                return formatRecipe(rawRecipe)
            elseif field == "Recipe" then
                local item = Parts[itemName]
                local recipe = item.Recipe
        
                module.r = recipe
        
                return formatRecipe(formatNormalRecipe(recipe))
            elseif field == "Durability" then
                return Parts[itemName]["Durability"] or 3
            elseif field == "Configuration" then
                local configData = Parts[itemName]["ConfigData"]
        
                if not configData then return end
        
                local formatted = ""
        
                for _, entry in pairs(configData) do
                    local entryName = entry[1]
                    local entryType = entry[2]
                    local default = entry[3]
                    local range = entry[4]
                    local description = entry[5]
    
    		if type(default) == "table" then
    			default = {entry[3][1], entry[3][2]}
    
    	                if default[1] == nil then
    	                    default[1] = "inf"
    	                elseif default[2] == nil then
    	                    default[2] = "inf"
    	                end
    		end
        
                    if entryType == "number" then                
                        formatted = formatted .. " \n* "..entryName.."<sup>(number)[" .. range[1] .. " - " .. range[2] .. "]</sup>"
                    elseif entryType == "boolean" then
                        formatted = formatted .. " \n* "..entryName.."<sup>(boolean)</sup> "
                    elseif entryType == "string" then
                        formatted = formatted .. " \n* "..entryName.."<sup>(string)</sup> "
                    elseif entryType == "Selection" then
                        formatted = formatted .. " \n* "..entryName.."<sup>(selection)</sup> "
                    elseif entryType == "Coordinate" then
                        formatted = formatted .. " \n* "..entryName.."<sup>(coordinate)</sup> "
                    elseif entryType == "NumberRange" then
                        formatted = formatted .. " \n* "..entryName.."<sup>(numberRange)["..default[1].." - "..default[2] .. "]</sup>"
                    end
                end
        
                return formatted
           elseif field == "ConfigurationLarge" then
                local configData = Parts[itemName]["ConfigData"]
        
                if not configData then return "* Cannot be configured." end
        
                local formatted = ""
        
                for _, entry in pairs(configData) do
                    local entryName = entry[1]
                    local entryType = entry[2]
                    local default = entry[3]
                    local range = entry[4]
                    local description = entry[5]
        
    		if type(default) == "table" then
    			default = {entry[3][1], entry[3][2]}
    
    	                if default[1] == nil then
    	                    default[1] = "inf"
    	                elseif default[2] == nil then
    	                    default[2] = "inf"
    	                end
    		end
        
                    if entryType == "number" then                
                        formatted = formatted .. " \n* "..entryName.."<sup>(number) ["..range[1].." - "..range[2].."]</sup> - "..description
                    elseif entryType == "boolean" then
                        formatted = formatted .. " \n* "..entryName.."<sup>(boolean)</sup> - "..description
                    elseif entryType == "string" then
                        formatted = formatted .. " \n* "..entryName.."<sup>(string)</sup> - "..description
                    elseif entryType == "Selection" then
                        formatted = formatted .. " \n* "..entryName.."<sup>(selection)</sup> - "..description
                    elseif entryType == "Coordinate" then
                        formatted = formatted .. " \n* "..entryName.."<sup>(coordinate)</sup> - "..description
    		elseif entryType == "NumberRange" then
    		    formatted = formatted .. " \n* "..entryName.."<sup>(numberRange) ["..default[1].." - "..default[2].."]</sup> - "..description
                    end
                end
        
                return string.sub(formatted, 2)
            elseif field == "Type" then
                local categories = Parts[itemName]["Categories"]
                local formatted = ""
                local invisEnd = " "
        
                for i, type in pairs(categories) do
                    if i > 1 then
                        formatted = formatted .. "\n\n"
                    end
        
                    invisEnd = invisEnd .. " [[Category:" .. type .. "]]" 
                    formatted = formatted .. "[[:Category:" .. type .. "|" .. type .. "]]"
                end
                
                return formatted .. invisEnd
            elseif field == "Flammable" then
                if Parts[itemName]["Flammable"] == "true" then
                    return "Yes"
                else
                    return "No"
                end
            elseif field == "DefaultColor" or field == "DefaultSize" then
                local conn = ""
                local ccat = ""
                local rgbtable = {}
                if field == "DefaultColor" then conn = ", " else conn = " x " end
    
                for i, v in pairs(Parts[itemName][field]) do
                    ccat = ccat .. v
                    if i ~= 3 then ccat = ccat .. conn end
                    rgbtable[i] = v
                end
    
                if field == "DefaultColor" then
                    local rgb = (rgbtable[1] * 0x10000) + (rgbtable[2] * 0x100) + rgbtable[3]
                    local webcolor = string.format("%x", rgb)
    
                    while string.len(webcolor) < 6 do
                        webcolor = "0" .. webcolor
                    end
    
                    webcolor = "#" .. webcolor
    
                    if rgbtable[1] > 76.5 or rgbtable[2] > 76.5 or rgbtable[3] > 76.5 then
                        ccat = ccat .. '<big><span style="color:' .. webcolor .. '">   ⬢</span></big>'
                    else
                        ccat = ccat .. '<big><span style="color:' .. webcolor .. '; text-shadow: 0px 0px 2px DimGray">   ⬢</span></big>'                    
                    end
                end
    
                return ccat
    
            elseif Parts[itemName][field] then
                return (tostring(Parts[itemName][field]))
            else
                error("unknown field given: " .. tostring(args[1]))
            end
        else
            mw.addWarning("Sorry, part not found. Please fill in the fields manually.")
            return "N/A"
        end
    end
    
    return module
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.

    Recent changes

  • Axenori • 1 day ago
  • Voivsone • 1 day ago
  • Axenori • 2 days ago
  • Axenori • 3 days ago
  • Cookies help us deliver our services. By using our services, you agree to our use of cookies.