Bearbeiten von „Modul:RecipeTable

Aus Eco - Deutsches Wiki
Wechseln zu:Navigation, Suche

Deine Änderungen werden angezeigt, sobald ein dazu berechtigter Benutzer sie akzeptiert hat. (Hilfe)

Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden. Ein eigenes Benutzerkonto hat eine ganze Reihe von Vorteilen.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 1: Zeile 1:
-- Module:RecipeTable https://wiki.play.eco/en/Module:RecipeTable
-- Modul:CraftingParser (https://wiki.play.eco/en/Modul:CraftingParser)
local p = {}
local p = {}


local Utils = require("Module:Utils")
local Utils = require('Modul:Utils')
local L = require("Module:Localization")
local L = require('Modul:Localization')


-- Header for the wikitable
-- Compares two recipes ( a < b ? true : false )
function header(args)
function recipeCompare(a, b)
    local headerStr = '{| class=\"wikitable mw-collapsible\" style=\"text-align: center;\"\n|-\n'


     -- Show or hide the Crafting Station column
     --not in v0.9
     if args[1] == '1' then
    --if not a.efficiencySkills[1] and not b.efficiencySkills[1] then return false
         headerStr = headerStr .. '! ' .. L.t('Crafting Station') .. ' !'
    --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
    -- Item, Level Needed, Materials, Crafting Time, Labour Cost and XP Gained Specialty
    headerStr = headerStr .. '! colspan=\"4\" | ' .. L.t('Item') .. ' !! colspan=\"4\" | ' .. L.t('Materials') .. ' !! ' .. L.t('Level Needed') .. ' !! ' .. L.t('Crafting Time<br>(mins)') .. ' !! ' .. L.t('Labour Cost') .. ' || ' .. L.t('XP Gained') .. ' !!\n'
    return headerStr
end
end


function imagedisp(name, nameEN, style, borderColour)
    local borderImageClass = ''
    local icon
    if borderColour == 'green' then
        borderImageClass = ' borderGreen'
    elseif borderColour == 'yellow' then
        borderImageClass = ' borderYellow'
    end


     local iconBG
-- Parses arguments into a table of recipes
     if style == 'tag' then
function frameParse( args )
        iconBG = 'iconGrey'
     local parsedRecipes = {}
        icon = L.tag(name) .. 'Tag'
 
        name = L.t('%s Tag'):format(name)
     -- Set variables
    elseif style == 'skill' then
    local dispCraftStn = tonumber( args.displayCraftStation )
        iconBG = 'iconBrightBlue'
    local checkImage = tonumber( args.checkForImage )
        icon = nameEN
    end


     if not icon then
     -- Iterate over every recipe passed in
         icon = name
    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
     end


     return Utils.build_icon(icon, name, 'iconRecipe', iconBG, borderImageClass, true) .. '\n[[' .. name .. ']]'
     return parsedRecipes
end
end


function stationcell(args)
 
    local str = ''
-- Formats and sorts recipes
    str = str .. '| ' .. imagedisp(args[1], args[2])
function formatRecipes( recipes )
    return str
  -- Sort recipes
  table.sort( recipes, recipeCompare )
 
  return recipes
end
end


function itemcell(args)
-- Called from Template:RecipeTable
     local str = ''
-- Calls Modul:RecipeTable
     str = str .. '| ' .. imagedisp(args[1], args[3])
-- Returns the wikitext returned by Modul:RecipeTable
     str = str .. '<br>x' .. args[2] .. '\n'
function p.raw( f )
     return str
    -- get args from the Template, parse them into recipes
     local recipes = frameParse( Utils.normaliseArgs(f) )
 
    -- Format the recipes
     recipes = formatRecipes( recipes )
 
    -- Call RecipeTable
     local recipeTable = require( "Modul:RecipeTable" )
     return recipeTable.main( recipes )
end
end


function ingredientcell(args)
 
     local str = ''
-- Called from Modul:GetRecipes
     local borderColour
-- Calls Modul:RecipeTable
     if args[4] == 'False' then
-- Returns the wikitext returned by Modul:RecipeTable
         borderColour = 'green'
function p.formattedItem( products, ingredients, item )
     elseif args[4] == 'True' then
    -- Format the recipes, and call RecipeTable on each table
        borderColour = 'yellow'
    local recipeTable = require( "Modul:RecipeTable" )
     local returnVal = '=== '..L.t('Crafting Recipes')..' ===\n\n'
      
     if (products ~= nil and #products ~= 0) then
         returnVal = returnVal .. recipeTable.main( formatRecipes(products) ) .. '\n\n=== '..L.t('Used in Recipes')..' ===\n\n'      
     else
        returnVal = returnVal .. "''"..L.t('None').."''\n\n=== "..L.t('Used in Recipes').." ===\n\n "
     end
     end
     if args[1] == 'TAG' then
   
         style = 'tag'
     if (ingredients ~= nil and #ingredients ~= 0) then
         returnVal = returnVal .. recipeTable.main( formatRecipes(ingredients) )
     else
     else
         style = nil
         returnVal = returnVal .. "''"..L.t('None').."''\n"     
     end
     end
    return str .. '| ' .. imagedisp(args[2], args[5], style, borderColour) .. '<br>x' .. args[3] .. '\n'
end


function skillreqcell(args)
     return returnVal
    local str = ''
    str = str .. '| ' .. imagedisp(args[1], args[3], 'skill')
    str = str .. '<br> ' .. L.t('Level') .. ' ' .. args[2] .. ' \n'
     return str
end
end




-- Does this even exist anymore?
-- Called from Modul:GetRecipes
--function groupedskillcell( args )
-- Calls Modul:RecipeTable
--   local str = ''
-- Returns formatted wikitext, including wikitext returned from Modul:RecipeTable
-- str = str .. '| ' .. imagedisp(args[1],args[3])
function p.formattedTable( recipes, table )
-- if args[2] ~= nil then
    -- Format the recipes, and call RecipeTable
-- str = str .. ' <br> ' .. imagedisp(args[2])
    local recipeTable = require( "Modul:RecipeTable" )
-- end
    local returnVal = '=== ' .. L.t('Recipes at %s'):format(table) .. ' ===\n\n'
-- return str
    if #recipes == 0 then
--end
        returnVal = returnVal .. "''"..L.t('None').."''\n"
    else
        returnVal = returnVal .. recipeTable.main( formatRecipes( recipes ) )
    end
   
    return returnVal
end


-- Create a wikitable of recipes
function p.main(recipes)
    local rows = ''


    -- Get each row
-- Called from Modul:GetRecipes
    for i = 1, #recipes do
-- Calls Modul:RecipeTable
        -- get information from the current recipe for building
-- Returns formatted wikitext, including wikitext returned from Modul:RecipeTable
        local checkImage = recipes[i].checkImage
function p.formattedGroup( recipes, group )
        local craftStn = recipes[i].craftStn
    -- Format the recipes, and call RecipeTable
        local skillNeeds = recipes[i].skillNeeds
    local recipeTable = require( "Modul:RecipeTable" )
        --use last variant as this is always the default variant
    local returnVal = '=== ' .. L.t('%s Recipes'):format(group) .. ' ===\n\n'
        local numberOfVariants = recipes[i].numberOfVariants
    if #recipes == 0 then
        local products = {}
        returnVal = returnVal .. "''"..L.t('None').."''\n"
        local ingredients = {}
    else
 
        returnVal = returnVal .. recipeTable.main( formatRecipes( recipes ) )
        --loop through variants to select default variant ingredients
if numberOfVariants == 1 then
            ingredients = recipes[i].variants[1].ingredients
            products = recipes[i].variants[1].products
        else
        --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
        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 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>' .. L.t('Has Variants') .. '</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 .. ' \'\'' .. L.t('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 .. ' \'\'' .. L.t('Missing') .. '\'\' \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 .. ' \'\'' .. L.t('Missing') .. '\'\' \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 .. ' \'\'' .. L.t('Missing') .. '\'\' \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
     end
 
      
     -- Return the full wikitable
     return returnVal
     return header({ recipes[1].dispCraftStn }) .. rows .. '|-\n|}\n'
end
end


return p
return p
Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!
Du gibst uns hiermit deine Zusage, dass du den Text selbst verfasst hast, dass der Text Allgemeingut (public domain) ist oder dass der Urheber seine Zustimmung gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin. Bitte beachte, dass alle Eco - Deutsches Wiki-Beiträge automatisch unter der „CC BY-NC-SA 4.0“ stehen (siehe Eco:Urheberrechte für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.

Um das Wiki vor automatisiertem Bearbeitungsspam zu schützen, bitten wir dich, das folgende hCaptcha zu lösen:

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)

Die folgende Vorlage wird auf dieser Seite verwendet: