Modul:RecipeTable: Unterschied zwischen den Versionen
Aus Eco - Deutsches Wiki
[unmarkierte Version] | [unmarkierte Version] |
Keine Bearbeitungszusammenfassung |
Änderung 1353 von ZeelNightwolf (Diskussion) rückgängig gemacht. Markierung: Rückgängigmachung |
||
Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
-- A cell in the table | |||
function cell( args ) | |||
local str = '' | |||
local image | |||
-- Manual override for image file | |||
if args[3] then | |||
image = string.gsub(args[3], ' ', '') | |||
else | |||
image = string.gsub(args[2], ' ', '') .. '_Icon.png' | |||
end | |||
-- Check if file exists | |||
--if args[1] == 1 then | |||
-- if not mw.title.makeTitle('File', image).exists then | |||
-- image = 'NoImage.png' | |||
-- end | |||
--end | |||
str = str .. '| [[File:' .. image .. '|frameless|50px|link=' .. args[2] .. ']] <br> [[' .. args[2] .. ']] ' | |||
if args[4] ~= nil then | |||
str = str .. 'x' .. args[4] .. ' |' | |||
elseif args[5] ~= nil then | |||
str = str .. '<br> Level ' .. args[5] .. ' |' | |||
elseif args[6] then | |||
if args[7] then | |||
local image2 | |||
-- Manual override for image file | |||
if args[8] then | |||
image2 = string.gsub(args[8], ' ', '') | |||
else | |||
image2 = string.gsub(args[7], ' ', '') .. '_Icon.png' | |||
end | |||
-- Check if file exists | |||
if args[1] == 1 then | |||
if not mw.title.makeTitle('File', image2).exists then | |||
image2 = 'NoImage.png' | |||
end | |||
end | |||
str = str .. '<br> <br> [[File:' .. image2 .. '|frameless|50px|link=' .. args[7] .. ']] <br> [[' .. args[7] .. ']]' | |||
end | |||
else | |||
str = str .. '|' | |||
end | |||
return str | |||
end | |||
-- Header for the wikitable | -- Header for the wikitable | ||
Zeile 6: | Zeile 50: | ||
-- Show or hide the Crafting Station column | -- Show or hide the Crafting Station column | ||
if args[1] == | if args[1] == 1 then | ||
headerStr = headerStr .. '! Crafting Station !' | headerStr = headerStr .. '! Crafting Station !' | ||
end | end | ||
-- Item, Skill needed, Materials, Affected by skills | |||
headerStr = headerStr .. '! colspan=\"2\" | Item !! Skill needed !! colspan=\"4\" | Materials !! Crafting <br> time !! style="width: 100px" | Affected <br> by skills\n' | |||
return headerStr | return headerStr | ||
end | end | ||
function | -- Row for recipe | ||
local | function recipeRow( recipe ) | ||
local | -- Parse recipe | ||
local checkImage = recipe.checkImage | |||
local craftStn = recipe.craftStn | |||
local item1 = recipe.item1 | |||
local item2 = recipe.item2 | |||
local skillNeed = recipe.skillNeed | |||
local mater1 = recipe.mater1 | |||
local mater2 = recipe.mater2 | |||
local mater3 = recipe.mater3 | |||
end | local mater4 = recipe.mater4 | ||
local ctime = recipe.ctime | |||
-- String to return | |||
local row = '|-\n' | |||
-- Return '' if item1 or mater1 aren't passed in | |||
if not item1[1] then | |||
return '' | |||
elseif not mater1[1] then | |||
return '' | |||
end | |||
-- Show or hide the Crafting Station column | |||
if recipe.dispCraftStn == 1 then | |||
row = row .. cell({checkImage, craftStn[1], craftStn[2]}) | |||
end | |||
end | |||
-- Add the Item columns | |||
if item2[1] then | |||
row = row .. cell({checkImage, item1[1], item1[2], item1[3]}) .. cell({checkImage, item2[1], item2[2], item2[3]}) | |||
else | |||
row = row .. '| colspan=\"2\" ' .. cell({checkImage, item1[1], item1[2], item1[3]}) | |||
end | |||
-- Add the Skill needed column | |||
if recipe.skillNeed[1] ~= '' then | |||
row = row .. cell({checkImage, skillNeed[1], skillNeed[2], nil, skillNeed[3]}) | |||
else | |||
row = row .. '| \'\'None\'\' |' | |||
end | end | ||
-- Add the Materials column | |||
if mater2[1] then | |||
if mater3[1] then | |||
if mater4[1] then | |||
row = row .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) .. cell({checkImage, mater2[1], mater2[2], mater2[3]}) .. cell({checkImage, mater3[1], mater3[2], mater3[3]}) .. cell({chackImage, mater4[1], mater4[2], mater4[3]}) | |||
end | else | ||
row = row .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) .. '| colspan=\"2\" ' .. cell({checkImage, mater2[1], mater2[2], mater2[3]}) .. cell({checkImage, mater3[1], mater3[2], mater3[3]}) | |||
end | |||
else | |||
row = row .. '| colspan=\"2\" ' .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) .. '| colspan=\"2\" ' .. cell({checkImage, mater2[1], mater2[2], mater2[3]}) | |||
end | |||
else | |||
row = row .. '| colspan=\"4\" ' .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) | |||
end | |||
-- Add the Crafting time column | |||
if ctime then | |||
row = row .. '| ' .. ctime | |||
else | |||
row = row .. '| \'\'missing\'\'' | |||
end | |||
row = row .. '\n' | |||
return row | |||
end | end | ||
Zeile 60: | Zeile 132: | ||
function p.main( recipes ) | function p.main( recipes ) | ||
local rows = '' | local rows = '' | ||
-- find number of times each Affect by Skill occurs | -- find number of times each Affect by Skill occurs | ||
local prevSkill = recipes[1].affSkill1[1] | |||
local skillIndex = {} | |||
local prevSkillnum = 0 | |||
for num = 1, #recipes do | |||
if prevSkill ~= recipes[num].affSkill1[1] then | |||
skillIndex[#skillIndex + 1] = prevSkillnum | |||
prevSkillnum = 1 | |||
prevSkill = recipes[num].affSkill1[1] | |||
else | |||
prevSkillnum = prevSkillnum + 1 | |||
end | |||
end | |||
skillIndex[#skillIndex + 1] = prevSkillnum | |||
-- Get each row | -- Get each row | ||
local j = 0 | local j = 0 | ||
local k = 1 | local k = 1 | ||
for i = 1, #recipes do | for i = 1, #recipes do | ||
-- Main part of the row | |||
rows = rows .. recipeRow(recipes[i]) | |||
-- Affect by Skill | |||
if j == 0 and recipes[i].affSkill1[1] ~= nil then | |||
rows = rows .. '| rowspan=\"' .. skillIndex[k] .. '\" ' .. cell({recipes[i].checkImage, recipes[i].affSkill1[1], recipes[i].affSkill1[2], nil, nil, 1, recipes[i].affSkill2[1], recipes[i].affSkill2[2]}) .. '\n' | |||
elseif recipes[i].affSkill1[1] == nil then | |||
rows = rows .. '| |\n' | |||
end | |||
j = j + 1 | |||
if j == skillIndex[k] then | |||
k = k + 1 | |||
j = 0 | |||
end | |||
end | |||
-- Return the full wikitable | -- Return the full wikitable | ||
return header({recipes[1].dispCraftStn}) .. rows .. '|-\n|}\n' | |||
end | end | ||
return p | return p |
Version vom 24. November 2020, 15:05 Uhr
Documentation
This module is a part of the Vorlage:GetRecipes, and is used to generate a wikitable of recipes. It returns a wikitable as a string. The wikitable contains all of the recipes that were passed into the module.
If the template is passed, this module is used with the following Modules:
local p = {}
-- A cell in the table
function cell( args )
local str = ''
local image
-- Manual override for image file
if args[3] then
image = string.gsub(args[3], ' ', '')
else
image = string.gsub(args[2], ' ', '') .. '_Icon.png'
end
-- Check if file exists
--if args[1] == 1 then
-- if not mw.title.makeTitle('File', image).exists then
-- image = 'NoImage.png'
-- end
--end
str = str .. '| [[File:' .. image .. '|frameless|50px|link=' .. args[2] .. ']] <br> [[' .. args[2] .. ']] '
if args[4] ~= nil then
str = str .. 'x' .. args[4] .. ' |'
elseif args[5] ~= nil then
str = str .. '<br> Level ' .. args[5] .. ' |'
elseif args[6] then
if args[7] then
local image2
-- Manual override for image file
if args[8] then
image2 = string.gsub(args[8], ' ', '')
else
image2 = string.gsub(args[7], ' ', '') .. '_Icon.png'
end
-- Check if file exists
if args[1] == 1 then
if not mw.title.makeTitle('File', image2).exists then
image2 = 'NoImage.png'
end
end
str = str .. '<br> <br> [[File:' .. image2 .. '|frameless|50px|link=' .. args[7] .. ']] <br> [[' .. args[7] .. ']]'
end
else
str = str .. '|'
end
return str
end
-- Header for the wikitable
function header( args )
local headerStr = '{| class=\"wikitable mw-collapsible\" style=\"text-align: center;\"\n|-\n'
-- Show or hide the Crafting Station column
if args[1] == 1 then
headerStr = headerStr .. '! Crafting Station !'
end
-- Item, Skill needed, Materials, Affected by skills
headerStr = headerStr .. '! colspan=\"2\" | Item !! Skill needed !! colspan=\"4\" | Materials !! Crafting <br> time !! style="width: 100px" | Affected <br> by skills\n'
return headerStr
end
-- Row for recipe
function recipeRow( recipe )
-- Parse recipe
local checkImage = recipe.checkImage
local craftStn = recipe.craftStn
local item1 = recipe.item1
local item2 = recipe.item2
local skillNeed = recipe.skillNeed
local mater1 = recipe.mater1
local mater2 = recipe.mater2
local mater3 = recipe.mater3
local mater4 = recipe.mater4
local ctime = recipe.ctime
-- String to return
local row = '|-\n'
-- Return '' if item1 or mater1 aren't passed in
if not item1[1] then
return ''
elseif not mater1[1] then
return ''
end
-- Show or hide the Crafting Station column
if recipe.dispCraftStn == 1 then
row = row .. cell({checkImage, craftStn[1], craftStn[2]})
end
-- Add the Item columns
if item2[1] then
row = row .. cell({checkImage, item1[1], item1[2], item1[3]}) .. cell({checkImage, item2[1], item2[2], item2[3]})
else
row = row .. '| colspan=\"2\" ' .. cell({checkImage, item1[1], item1[2], item1[3]})
end
-- Add the Skill needed column
if recipe.skillNeed[1] ~= '' then
row = row .. cell({checkImage, skillNeed[1], skillNeed[2], nil, skillNeed[3]})
else
row = row .. '| \'\'None\'\' |'
end
-- Add the Materials column
if mater2[1] then
if mater3[1] then
if mater4[1] then
row = row .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) .. cell({checkImage, mater2[1], mater2[2], mater2[3]}) .. cell({checkImage, mater3[1], mater3[2], mater3[3]}) .. cell({chackImage, mater4[1], mater4[2], mater4[3]})
else
row = row .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) .. '| colspan=\"2\" ' .. cell({checkImage, mater2[1], mater2[2], mater2[3]}) .. cell({checkImage, mater3[1], mater3[2], mater3[3]})
end
else
row = row .. '| colspan=\"2\" ' .. cell({checkImage, mater1[1], mater1[2], mater1[3]}) .. '| colspan=\"2\" ' .. cell({checkImage, mater2[1], mater2[2], mater2[3]})
end
else
row = row .. '| colspan=\"4\" ' .. cell({checkImage, mater1[1], mater1[2], mater1[3]})
end
-- Add the Crafting time column
if ctime then
row = row .. '| ' .. ctime
else
row = row .. '| \'\'missing\'\''
end
row = row .. '\n'
return row
end
-- Create a wikitable of recipes
function p.main( recipes )
local rows = ''
-- find number of times each Affect by Skill occurs
local prevSkill = recipes[1].affSkill1[1]
local skillIndex = {}
local prevSkillnum = 0
for num = 1, #recipes do
if prevSkill ~= recipes[num].affSkill1[1] then
skillIndex[#skillIndex + 1] = prevSkillnum
prevSkillnum = 1
prevSkill = recipes[num].affSkill1[1]
else
prevSkillnum = prevSkillnum + 1
end
end
skillIndex[#skillIndex + 1] = prevSkillnum
-- Get each row
local j = 0
local k = 1
for i = 1, #recipes do
-- Main part of the row
rows = rows .. recipeRow(recipes[i])
-- Affect by Skill
if j == 0 and recipes[i].affSkill1[1] ~= nil then
rows = rows .. '| rowspan=\"' .. skillIndex[k] .. '\" ' .. cell({recipes[i].checkImage, recipes[i].affSkill1[1], recipes[i].affSkill1[2], nil, nil, 1, recipes[i].affSkill2[1], recipes[i].affSkill2[2]}) .. '\n'
elseif recipes[i].affSkill1[1] == nil then
rows = rows .. '| |\n'
end
j = j + 1
if j == skillIndex[k] then
k = k + 1
j = 0
end
end
-- Return the full wikitable
return header({recipes[1].dispCraftStn}) .. rows .. '|-\n|}\n'
end
return p