Editing Module:GetRecipes
From Eco - English Wiki
Your changes will be displayed to readers once an authorized user accepts them. (help)
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
-- Module: | -- Module:CraftingParser (https://wiki.play.eco/en/Module:CraftingParser) | ||
local p = {} | local p = {} | ||
local | -- 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 | end | ||
-- Formats and sorts recipes | |||
function formatRecipes( recipes ) | |||
-- Sort recipes | |||
table.sort( recipes, function( a, b ) return recipeCompare( a, b ) end ) | |||
return recipes | |||
end | |||
-- | |||
-- Seperates a list of recipes into two tables | |||
if | function seperate( recipes, item ) | ||
local sepRecipes = { {}, {} } | |||
local k = 1 | |||
for i = 1, #recipes do | |||
--v0.8 if recipes[i].products[1][1] == item then | |||
--v0.9 need to find product in recipes[i].variants object, using pairs | |||
--cycle variants ingredients to build 'used in' list | |||
if recipes[i] ~= nil then | |||
if recipes[i].variants ~= nil then | |||
for k, v in pairs(recipes[i].variants) do | |||
if v.products[1][1] == item then | |||
table.insert( sepRecipes[1], recipes[i] ) | |||
elseif v.products[2] ~= nil and v.products[2][1] == item then | |||
table.insert( sepRecipes[1], recipes[i] ) | |||
elseif v.products[3] ~= nil and v.products[3][1] == item then | |||
table.insert( sepRecipes[1], recipes[i] ) | |||
elseif v.ingredients[1][2] == item then | |||
table.insert( sepRecipes[2], recipes[i] ) | |||
elseif v.ingredients[2] ~= nil and v.ingredients[2][2] == item then | |||
table.insert( sepRecipes[2], recipes[i] ) | |||
elseif v.ingredients[3] ~= nil and v.ingredients[3][2] == item then | |||
table.insert( sepRecipes[2], recipes[i] ) | |||
elseif v.ingredients[4] ~= nil and v.ingredients[4][2] == item then | |||
table.insert( sepRecipes[2], recipes[i] ) | |||
elseif v.ingredients[5] ~= nil and v.ingredients[5][2] == item then | |||
table.insert( sepRecipes[2], recipes[i] ) | |||
elseif v.ingredients[6] ~= nil and v.ingredients[6][2] == item then | |||
table.insert( sepRecipes[2], recipes[i] ) | |||
elseif v.ingredients[7] ~= nil and v.ingredients[7][2] == item then | |||
table.insert( sepRecipes[2], recipes[i] ) | |||
elseif v.ingredients[8] ~= nil and v.ingredients[8][2] == item then | |||
table.insert( sepRecipes[2], recipes[i] ) | |||
end | |||
end | |||
end | |||
end | end | ||
end | end | ||
return sepRecipes | |||
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:RecipTable | |||
-- 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 == 0 then | |||
returnVal = returnVal .. "''None''\n\n=== Used in Recipes ===\n\n " | |||
else | |||
returnVal = returnVal .. recipeTable.main( formatRecipes( products ) ) .. '\n\n=== Used in Recipes ===\n\n' | |||
end | |||
if #ingredients == 0 then | |||
returnVal = returnVal .. "''None''\n" | |||
else | |||
returnVal = returnVal .. recipeTable.main( formatRecipes( ingredients ) ) | |||
end | 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 | 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 | end | ||
return | return returnVal | ||
end | end | ||
return p | return p |