ATTENTION! The process of updating WiKi to version Eco 10.x has begun. Those wishing to participate can find out more Information on our ECO Contribution Wiki Discord.
From April 26 to May 12, errors may occur in the Wiki, as we will be carrying out a major update to the information processing modules.

Module:CraftingParser: Difference between revisions

From Eco - English Wiki
[unchecked revision][unchecked revision]
No edit summary
No edit summary
Line 110: Line 110:
     local returnVal = '=== Crafting Recipes ===\n\n'
     local returnVal = '=== Crafting Recipes ===\n\n'
      
      
     if products ~= nil and #products ~= 0 then
     if (products ~= nil and #products ~= 0) then
returnVal = returnVal .. recipeTable.main( formatRecipes( products ) ) .. '\n\n=== Used in Recipes ===\n\n'         
returnVal = returnVal .. recipeTable.main( formatRecipes( products ) ) .. '\n\n=== Used in Recipes ===\n\n'         
     else
     else
Line 116: Line 116:
     end
     end
     if ingredients ~= nil and #ingredients ~= 0 then
     if (ingredients ~= nil and #ingredients ~= 0) then
         returnVal = returnVal .. recipeTable.main( formatRecipes( ingredients ) )
         returnVal = returnVal .. recipeTable.main( formatRecipes( ingredients ) )
     else
     else

Revision as of 06:19, 31 January 2021

This module contains functions for Module:GetRecipes. It uses the following Modules:


-- Module:CraftingParser (https://wiki.play.eco/en/Module:CraftingParser)
local p = {}

-- Grabs args from the parent frame
-- Trims and parses the args into a table, then returns the table
function norm( origArgs )
    origArgs = mw.getCurrentFrame():getParent().args
    local args = {}
    
    for k, v in pairs( origArgs ) do
        v = mw.text.trim( tostring( v ) )
        if v ~= '' then
            args[k] = v
        end
    end
    
    return args
end


-- Compares two recipes ( a < b ? true : false )
function recipeCompare(a, b)
    
    --not in v0.9
    --if not a.efficiencySkills[1] and not b.efficiencySkills[1] then return false
    --elseif a.efficiencySkills[1] and not b.efficiencySkills[1] then return false
    --elseif not a.efficiencySkills[1] and b.efficiencySkills[1] then return true
    --elseif a.efficiencySkills[1] < b.efficiencySkills[1] then return true
    --elseif a.efficiencySkills[1] > b.efficiencySkills[1] then return false
    
	if (a.skillNeeds[1] ~= nil and b.skillNeeds[1] ~= nil) then 
		if 	a.skillNeeds[1][1] < b.skillNeeds[1][1] then return true
		elseif a.skillNeeds[1][1] > b.skillNeeds[1][1] then return false
		elseif not a.skillNeeds[1][2] and b.skillNeeds[1][2] then return true
		elseif a.skillNeeds[1][2] and not b.skillNeeds[1][2] then return false
		elseif a.skillNeeds[1][2] and a.skillNeeds[1][2] < b.skillNeeds[1][2] then return true
		elseif a.skillNeeds[1][2] and a.skillNeeds[1][2] > b.skillNeeds[1][2] then return false
	end
			
    elseif a.defaultVariant < b.defaultVariant then return true
    elseif a.defaultVariant > b.defaultVariant then return false
    else return a.defaultVariant <= b.defaultVariant
    end
end


-- Parses arguments into a table of recipes
function frameParse( args )
    local parsedRecipes = {}

    -- Set variables
    local dispCraftStn = tonumber( args.displayCraftStation )
    local checkImage = tonumber( args.checkForImage )

    -- Iterate over every recipe passed in
    for i = 1, args.numRecipes do
        table.insert( parsedRecipes, i, {
            ['dispCraftStn'] = dispCraftStn,
            ['checkImage'] = checkImage,
            ['craftStn'] = {args['craftStation'..i], args['craftStationImg'..i]},
            ['item1'] = {args['item'..i..'.1'], args['itemImg'..i..'.1'], args['itemNum'..i..'.1']},
            ['item2'] = {args['item'..i..'.2'], args['itemImg'..i..'.2'], args['itemNum'..i..'.2']},
            ['skillNeed'] = {args['skillNeed'..i], args['skillNeedImg'..i], args['skillLvlNeed'..i]},
            ['mater1'] = {args['material'..i..'.1'], args['materialImg'..i..'.1'], args['materialNum'..i..'.1']},
            ['mater2'] = {args['material'..i..'.2'], args['materialImg'..i..'.2'], args['materialNum'..i..'.2']},
            ['mater3'] = {args['material'..i..'.3'], args['materialImg'..i..'.3'], args['materialNum'..i..'.3']},
            ['mater4'] = {args['material'..i..'.4'], args['materialImg'..i..'.4'], args['materialNum'..i..'.4']},
            ['cTime'] = args['craftTime'..i],
            ['affSkill1'] = {args['affectSkill'..i..'.1'], args['affectSkillImg'..i..'.1']},
            ['affSkill2'] = {args['affectSkill'..i..'.2'], args['affectSkillImg'..i..'.2']},
            --TODO - construct new parts of the table here
        })
    end

    return parsedRecipes
end


-- Formats and sorts recipes
function formatRecipes( recipes )
  -- Sort recipes
  table.sort( recipes, function( a, b ) return recipeCompare( a, b ) end )

  return recipes
end

-- Called from Template:RecipeTable
-- Calls Module:RecipeTable
-- Returns the wikitext returned by Module:RecipeTable
function p.raw( f )
    -- get args from the Template, parse them into recipes
    local recipes = frameParse( norm( f ) )

    -- Format the recipes
    recipes = formatRecipes( recipes )

    -- Call RecipeTable
    local recipeTable = require( "Module:RecipeTable" )
    return recipeTable.main( recipes )
end


-- Called from Module:GetRecipes
-- Calls Module:RecipeTable
-- Returns the wikitext returned by Module:RecipeTable
function p.formattedItem( products, ingredients, item )

    -- Format the recipes, and call RecipeTable on each table
    local recipeTable = require( "Module:RecipeTable" )
    local returnVal = '=== Crafting Recipes ===\n\n'
    
    if (products ~= nil and #products ~= 0) then
		returnVal = returnVal .. recipeTable.main( formatRecipes( products ) ) .. '\n\n=== Used in Recipes ===\n\n'        
    else
        returnVal = returnVal .. "''None''\n\n=== Used in Recipes ===\n\n "
    end
	
    if (ingredients ~= nil and #ingredients ~= 0) then
        returnVal = returnVal .. recipeTable.main( formatRecipes( ingredients ) )
    else
		returnVal = returnVal .. "''None''\n"       
    end

    return returnVal
end


-- Called from Module:GetRecipes
-- Calls Module:RecipeTable
-- Returns formatted wikitext, including wikitext returned from Module:RecipeTable
function p.formattedTable( recipes, table )
    -- Format the recipes, and call RecipeTable
    local recipeTable = require( "Module:RecipeTable" )
    local returnVal = '=== Recipes at ' .. table .. ' ===\n\n'
    if #recipes == 0 then
        returnVal = returnVal .. "''None''\n"
    else
        returnVal = returnVal .. recipeTable.main( formatRecipes( recipes ) )
    end
    
    return returnVal
end


-- Called from Module:GetRecipes
-- Calls Module:RecipeTable
-- Returns formatted wikitext, including wikitext returned from Module:RecipeTable
function p.formattedGroup( recipes, group )
    -- Format the recipes, and call RecipeTable
    local recipeTable = require( "Module:RecipeTable" )
    local returnVal = '=== ' .. group .. ' Recipes ===\n\n'
    if #recipes == 0 then
        returnVal = returnVal .. "''None''\n"
    else
        returnVal = returnVal .. recipeTable.main( formatRecipes( recipes ) )
    end
    
    return returnVal
end

return p