×
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: Difference between revisions

    Content added Content deleted
    No edit summary
    No edit summary
    Line 186: Line 186:


    if entryType == "number" then
    if entryType == "number" then
    formatted = formatted .. "\n* "..entryName.."<sup>(number) ["..range[1].." - "..range[2].."]</sup> - "..description
    formatted = formatted .. " \n* "..entryName.."<sup>(number) ["..range[1].." - "..range[2].."]</sup> - "..description
    elseif entryType == "boolean" then
    elseif entryType == "boolean" then
    formatted = formatted .. "\n* "..entryName.."<sup>(boolean)</sup> - "..description
    formatted = formatted .. " \n* "..entryName.."<sup>(boolean)</sup> - "..description
    elseif entryType == "string" then
    elseif entryType == "string" then
    formatted = formatted .. "\n* "..entryName.."<sup>(string)</sup> - "..description
    formatted = formatted .. " \n* "..entryName.."<sup>(string)</sup> - "..description
    elseif entryType == "Selection" then
    elseif entryType == "Selection" then
    formatted = formatted .. "\n* "..entryName.."<sup>(selection)</sup> - "..description
    formatted = formatted .. " \n* "..entryName.."<sup>(selection)</sup> - "..description
    elseif entryType == "Coordinate" then
    elseif entryType == "Coordinate" then
    formatted = formatted .. "\n* "..entryName.."<sup>(coordinate)</sup> - "..description
    formatted = formatted .. " \n* "..entryName.."<sup>(coordinate)</sup> - "..description
    end
    end
    end
    end

    Revision as of 17:00, 18 March 2022

    Documentation

    GetPartInfo can be invoked using

    {{#invoke:GetPartInfo|getField|FIELD}}

    Replace "FIELD" with the wanted field, like:

    {{#invoke:GetPartInfo|getField|Recipe}}


    Additionally, you may add a second parameter to specify which part's information you want to retrieve, if this is not provided it will guess that the wanted part has the same name as the page's title. Usually, this will only need to be used if the page requests information about a part that the page isn't named after. An example of this is:

    {{#invoke:GetPartInfo|getField|Recipe|WirelessButton}}

    Fields

    A list of all fields retrievable in this module can be found here:

    • Recipe
    • Raw recipe
    • Malleability
    • Description

    Use-case Examples:

    These are some examples of the module being used in which all of them specify information of the "HyperDrive" part to be retrieved:

    In-game Description

    "A device used to travel at faster than light speeds to other regions of the universe. Simply input the coordinates to your destination and have a sufficient amount of fuel, and you'll be on your way to your destination. To initiate warping, power the hyperdrive and trigger it. When warping, the hyperdrive will be anchored to prevent any movement. The power required for warping will be dependent on the distance travelled, as well as the size of the object being transported. The amount of power required will be displayed in the hyper drive, shown in the red text. All of the parts connected to the hyperdrive and every player sitting will be teleported, however any free floating parts or standing up players will be sucked into the vaccum of space, so be careful. The red text at the bottom of the hyperdrive indicates how much power is needed to perform the jump. Make sure the numbers on the hyperdrive is facing up to ensure correct stud alignment. "

    Recipe

    Wire x50

    IonRocket x3

    Iron x100


    Raw recipe

    Sulfur x15

    Copper x110

    Iron x310


    Malleability

    Fixed size


    local module = {}
    
    local Parts = require("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 .. " x" .. amount .. "]]" .. 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 field == "Description" then
            local part = Parts[itemName]
            if not part then
                return "No description found"
            end
            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]
    
            if not item then
                return nil
            end
    
            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]
    
            if not item then
                return "No recipe found"
            end
    
            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 entryType == "number" then                
                    formatted = formatted .. "\n * "..entryName.."<sup>(number)[" .. range[1] .. " - " .. range[2] .. "] [default "..default.."]</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> "
                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 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
                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 Parts[itemName][field] then
            return tostring(Parts[itemName][field])
        else
            error("unknown field given: " .. tostring(args[1]))
        end
    end
    
    return module
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.

    Recent changes

  • 116.111.185.163 • 8 hours ago
  • 116.111.185.163 • 8 hours ago
  • 116.111.185.163 • 8 hours ago
  • 116.111.185.163 • 9 hours ago
  • Cookies help us deliver our services. By using our services, you agree to our use of cookies.