Редактирование: Модуль:RecipeTable
Материал из Eco - Русская Wiki
Сделанные вами изменения будут показаны читателям после того, как их утвердит уполномоченный участник (подробнее).
Стабильная версия была проверена 4 марта 2021. 8 изменения ожидают проверки.
Внимание: некоторые из ожидающих проверки изменений относятся к редактируемой вами части страницы. (показать эти изменения)
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
-- Module:RecipeTable https://wiki.play.eco/en/Module:RecipeTable | -- Module:RecipeTable https://wiki.play.eco/en/Module:RecipeTable | ||
local p = {} | local p = {} | ||
-- Header for the wikitable | -- Header for the wikitable | ||
function header(args) | function header( args ) | ||
local headerStr = '{| class=\"wikitable mw-collapsible\" style=\"text-align: center;\"\n|-\n' | local headerStr = '{| class=\"wikitable mw-collapsible\" style=\"text-align: center;\"\n|-\n' | ||
-- Show or hide the Crafting Station column | -- Show or hide the Crafting Station column | ||
if args[1] == '1' then | if args[1] == '1' then | ||
headerStr = headerStr .. '! | headerStr = headerStr .. '! Верстак !' | ||
end | end | ||
-- Item, Level Needed, Materials, Crafting Time, Labour Cost and XP Gained Specialty | |||
headerStr = headerStr .. '! colspan=\"4\" | Предмет !! colspan=\"4\" | Материалы !! Требуемый уровень !! Время изготовления <br>(Мин) !! Требует работы || Получаемый опыт !!\n' | |||
return headerStr | return headerStr | ||
end | end | ||
function imagedisp(name, nameEN, | function imagedisp( name,nameEN ) | ||
local str = '' | |||
if name then | |||
name = string.gsub(name, '.skillbook', 'skillbook') | |||
end | |||
local borderImageClass = '' | local borderImageClass = '' | ||
if borderColour == 'green' then | |||
borderImageClass = ' borderGreen' | |||
elseif borderColour == 'yellow' then | |||
borderImageClass = ' borderYellow' | |||
end | end | ||
local | local iconClass = 'iconRecipe' | ||
if style == 'tag' then | if style == 'tag' then | ||
iconClass = 'iconRecipe iconWhite' | |||
name = name .. 'Tag' | |||
nameEN = nameEN .. 'Tag' | |||
elseif style == 'skill' then | elseif style == 'skill' then | ||
iconClass = 'iconRecipe iconBrightBlue' | |||
end | end | ||
if | -- Manual override for image file | ||
if nameEN then | |||
image = string.gsub(nameEN, ' ', '') .. '_Icon.png' | |||
else | |||
image = 'NoImage.png' | |||
end | |||
str = str .. '<div class="iconContainer" style="width:64px; height:64px"><div class="iconStack">[[File:' .. image .. '|frameless|class=iconRecipe|link=' .. name ..']]</div><div class="iconBorder" style=\"position:absolute;\"></div></div>\n[[' .. name .. ']]' | |||
return str | |||
end | end | ||
function stationcell(args) | function stationcell( args ) | ||
local str = '' | |||
str = str .. '| ' .. imagedisp(args[1],args[2]) | |||
return str | |||
end | end | ||
function itemcell(args) | function itemcell( args ) | ||
local str = '' | |||
str = str .. '| ' .. imagedisp(args[1],args[3]) | |||
str = str .. '<br>x' .. args[2] .. '\n' | |||
return str | |||
end | end | ||
function ingredientcell(args) | function ingredientcell( args ) | ||
local str = '' | |||
str = str .. '| ' .. imagedisp(args[2],args[5]) | |||
if args[1] == 'TAG' then | |||
-- Assumes str ends in ]] | |||
str = string.sub(str, 0,-3) .. 'Тег]]' | |||
end | |||
str = str .. '<br>x' .. args[3] .. '\n' | |||
return str | |||
end | end | ||
function skillreqcell(args) | function skillreqcell( args ) | ||
local str = '' | local str = '' | ||
str = str .. '| ' .. imagedisp(args[1],args[3]) | |||
str = str .. '<br> Уровень ' .. args[2] .. ' \n' | |||
return str | |||
end | end | ||
-- Does this even exist anymore? | -- Does this even exist anymore? | ||
Строка 92: | Строка 90: | ||
-- Create a wikitable of recipes | -- Create a wikitable of recipes | ||
function p.main(recipes) | function p.main( recipes ) | ||
local rows = '' | local rows = '' | ||
-- Get each row | -- Get each row | ||
for i = 1, #recipes do | for i = 1, #recipes do | ||
-- get information from the current recipe for building | |||
local checkImage = recipes[i].checkImage | |||
local craftStn = recipes[i].craftStn | |||
local skillNeeds = recipes[i].skillNeeds | |||
--use last variant as this is always the default variant | |||
local numberOfVariants = recipes[i].numberOfVariants | |||
local products = {{'','',''}} | |||
local ingredients = {{'',''}} | |||
--loop through variants to select default variant ingredients | |||
for k, v in pairs(recipes[i].variants) do | |||
--given pairs doesn't guarantee order, check that product matches default variant | |||
if k == recipes[i].defaultVariant then | |||
ingredients = v.ingredients | |||
products = v.products | |||
end | |||
end | |||
local baseCraftTime = recipes[i].baseCraftTime | |||
local baseLaborCost = recipes[i].baseLaborCost | |||
local baseXPGain = recipes[i].baseXPGain | |||
-- determine the size needed for products to display correctly | |||
local ingrednum = #ingredients | |||
local rowspan = '|' | |||
local rowspanProducts = '|' | |||
--Code to incorporate rowspan for ingrediants and variants here | |||
local rowspanCount = 0 | |||
--accomodate both variants and multiple ingredients | |||
if | |||
if ingrednum > 4 then | |||
rowspanCount = rowspanCount + 2 | |||
end | |||
--suspect there will be a bug here for many variants & many ingredients - might need x2 multipler per variant. | |||
if(#recipes == 1) then --only add variant rowspans if there is one recipe (i.e. variants will be displayed) | |||
if tonumber(recipes[i].numberOfVariants) > 1 then | |||
rowspanCount = rowspanCount + tonumber(recipes[i].numberOfVariants) | |||
rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" ' | |||
end | |||
end | |||
if rowspanCount > 0 then | |||
rowspan = '| rowspan=\"' .. rowspanCount .. '\" ' | |||
if(#recipes > 1) then | |||
rowspanProducts = '| rowspan=\"' .. rowspanCount .. '\" ' | |||
else | |||
rowspanProducts = '| rowspan=\"' .. rowspanCount - recipes[i].numberOfVariants - 1 .. '\" ' | |||
end | |||
end | |||
-- String to return | |||
local row = '|-\n' | |||
-- Add new row if products or ingredients are passed in with at least 1 item | |||
if (products[1] and ingredients[1]) then | |||
-- Show or hide the Crafting Station column | |||
if recipes[i].dispCraftStn == '1' then | |||
row = row .. rowspan .. stationcell({craftStn[1][1],craftStn[1][2]}) .. '\n' | |||
end | |||
-- Add the products columns | |||
local prodnum = #products | |||
for a = 1, prodnum do | |||
if prodnum == 1 then | |||
row = row .. rowspanProducts .. ' colspan=\"4\" ' | |||
end | |||
if ((prodnum == 2) or (prodnum == 3 and a == 2)) then | |||
row = row .. rowspanProducts .. ' colspan=\"2\" ' | |||
end | |||
row = row .. itemcell({products[a][1], products[a][2], products[a][3]}) | |||
if (tonumber(numberOfVariants) > 1) then | |||
row = row .. '<i>Есть варианты</i> \n' | |||
end | |||
end | |||
-- Add the FIRST row of Ingredients column | |||
local numing = ingrednum | |||
if ingrednum > 4 then | |||
numing = 4 | |||
end | |||
for b = 1, numing do | |||
if (ingrednum == 1) then | |||
row = row .. '| colspan=\"4\" ' | |||
end | |||
if ((ingrednum == 2) or (ingrednum == 3 and b == 2)) then | |||
row = row .. '| colspan=\"2\" ' | |||
end | |||
row = row .. ingredientcell(ingredients[b]) | |||
end | |||
-- Add the Skill needed column | |||
if (skillNeeds[1] ~= '' and skillNeeds[1] ~= nil) then | |||
row = row .. rowspan .. skillreqcell({skillNeeds[1][1], skillNeeds[1][2],skillNeeds[1][3]}) | |||
else | |||
row = row .. rowspan | |||
if ingrednum > 4 then | |||
row = row .. '|' | |||
end | |||
row = row .. ' \'\'None\'\' \n' | |||
end | |||
-- Add the Crafting time column | |||
row = row .. rowspan | |||
if rowspanCount > 1 then | |||
row = row .. '|' | |||
end | |||
if baseCraftTime then | |||
row = row .. baseCraftTime .. '\n' | |||
else | |||
row = row .. rowspan .. ' \'\'отсутствующий\'\' \n' | |||
end | |||
-- Add the Labour time column | |||
row = row .. rowspan | |||
if rowspanCount > 1 then | |||
row = row .. '|' | |||
end | |||
if baseLaborCost then | |||
row = row .. baseLaborCost .. '\n' | |||
else | |||
row = row .. rowspan .. ' \'\'отсутствующий\'\' \n' | |||
end | |||
-- Add the XP gain column | |||
row = row .. rowspan | |||
if rowspanCount > 1 then | |||
row = row .. '|' | |||
end | |||
if baseXPGain then | |||
row = row .. baseXPGain .. '\n' | |||
else | |||
row = row .. rowspan .. ' \'\'отсутствующий\'\' \n' | |||
end | |||
-- Add the SECOND row of ingredients to ingredients column if applicable | |||
if ingrednum > 4 then | |||
row = row .. '|-\n' | |||
for b = 5, ingrednum do | |||
if (ingrednum == 5) then | |||
row = row .. '| colspan=\"4\" ' | |||
end | |||
if ((ingrednum == 6) or (ingrednum == 7 and b == 6)) then | |||
row = row .. '| colspan=\"2\" ' | |||
end | |||
row = row .. ingredientcell(ingredients[b]) | |||
end | |||
end | |||
rows = rows .. row | |||
end | |||
--Show variants in table if only 1 recipe in list | |||
if (#recipes == 1 and tonumber(recipes[i].numberOfVariants) > 1) then | |||
for k, v in pairs(recipes[i].variants) do | |||
--start new row for variants | |||
row = '|-\n' | |||
--Skip default variant | |||
if v.products[1][1] ~= recipes[i].defaultVariant then | |||
local prodnum = #products | |||
for a = 1, prodnum do | |||
if prodnum == 1 then | |||
row = row .. rowspanProducts .. ' colspan=\"4\" ' | |||
end | |||
if ((prodnum == 2) or (prodnum == 3 and a == 2)) then | |||
row = row .. rowspanProducts .. ' colspan=\"2\" ' | |||
end | |||
row = row .. itemcell({v.products[a][1], v.products[a][2], v.products[a][3]}) | |||
end | |||
--will need to cycle ingrediants to fill out complete table | |||
--row = row .. itemcell({v.products[1][1], v.products[1][2]}) | |||
local numing = ingrednum | |||
if ingrednum > 4 then | |||
numing = 4 | |||
end | |||
for b = 1, numing do | |||
if (ingrednum == 1) then | |||
row = row .. '| colspan=\"4\" ' | |||
end | |||
if ((ingrednum == 2) or (ingrednum == 3 and b == 2)) then | |||
row = row .. '| colspan=\"2\" ' | |||
end | |||
row = row .. ingredientcell(v.ingredients[b]) | |||
end | |||
end | |||
rows = rows .. row | |||
end | |||
end | |||
end | |||
-- Return the full wikitable | -- Return the full wikitable | ||
return header({recipes[1].dispCraftStn}) .. rows .. '|-\n|}\n' | |||
end | end | ||
return p | return p |