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
local p = {}
local p = {}


local Utils = require("Module:Utils")
-- A cell in the table
local L = require("Module:Localization")
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
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 .. '! ' .. L.t('Crafting Station') .. ' !'
         headerStr = headerStr .. '! Crafting Station !'
     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'
     -- 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 imagedisp(name, nameEN, style, borderColour)
-- Row for recipe
     local borderImageClass = ''
function recipeRow( recipe )
     local icon
    -- Parse recipe
     if borderColour == 'green' then
    local checkImage = recipe.checkImage
         borderImageClass = ' borderGreen'
    local craftStn = recipe.craftStn
     elseif borderColour == 'yellow' then
    local item1 = recipe.item1
         borderImageClass = ' borderYellow'
    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
     end


     local iconBG
     -- Show or hide the Crafting Station column
     if style == 'tag' then
     if recipe.dispCraftStn == 1 then
         iconBG = 'iconGrey'
         row = row .. cell({checkImage, craftStn[1], craftStn[2]})
        icon = L.tag(name) .. 'Tag'
        name = L.t('%s Tag'):format(name)
    elseif style == 'skill' then
        iconBG = 'iconBrightBlue'
        icon = nameEN
     end
     end


     if not icon then
    -- Add the Item columns
         icon = name
     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
     end


     return Utils.build_icon(icon, name, 'iconRecipe', iconBG, borderImageClass, true) .. '\n[[' .. name .. ']]'
     -- Add the Skill needed column
end
    if recipe.skillNeed[1] ~= '' then
        row = row .. cell({checkImage, skillNeed[1], skillNeed[2], nil, skillNeed[3]})
    else
        row = row .. '| \'\'None\'\' |'
    end


function stationcell(args)
    -- Add the Materials column
    local str = ''
    if mater2[1] then
     str = str .. '| ' .. imagedisp(args[1], args[2])
        if mater3[1] then
     return str
            if mater4[1] then
end
                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


function itemcell(args)
    -- Add the Crafting time column
     local str = ''
     if ctime then
    str = str .. '| ' .. imagedisp(args[1], args[3])
        row = row .. '| ' .. ctime
    str = str .. '<br>x' .. args[2] .. '\n'
    return str
end
 
function ingredientcell(args)
    local str = ''
    local borderColour
    if args[4] == 'False' then
        borderColour = 'green'
    elseif args[4] == 'True' then
        borderColour = 'yellow'
    end
    if args[1] == 'TAG' then
        style = 'tag'
     else
     else
         style = nil
         row = row .. '| \'\'missing\'\''
     end
     end
     return str .. '| ' .. imagedisp(args[2], args[5], style, borderColour) .. '<br>x' .. args[3] .. '\n'
      
end
     row = row .. '\n'
 
     return row
function skillreqcell(args)
    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?
--function groupedskillcell( args )
--    local str = ''
-- str = str .. '| ' .. imagedisp(args[1],args[3])
-- if args[2] ~= nil then
-- str = str .. ' <br> ' .. imagedisp(args[2])
-- end
-- return str
--end


-- Create a wikitable of recipes
-- Create a wikitable of recipes
function p.main(recipes)
function p.main( recipes )
     local rows = ''
     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
     -- Get each row
    local j = 0
    local k = 1
     for i = 1, #recipes do
     for i = 1, #recipes do
         -- get information from the current recipe for building
         -- Main part of the row
         local checkImage = recipes[i].checkImage
         rows = rows .. recipeRow(recipes[i])
        local craftStn = recipes[i].craftStn
          
         local skillNeeds = recipes[i].skillNeeds
         -- Affect by Skill
         --use last variant as this is always the default variant
         if j == 0 and recipes[i].affSkill1[1] ~= nil then
         local numberOfVariants = recipes[i].numberOfVariants
             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'
        local products = {}
        elseif recipes[i].affSkill1[1] == nil then
        local ingredients = {}
            rows = rows .. '| |\n'
 
        --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
         end
         if rowspanCount > 0 then
         j = j + 1
            rowspan = '| rowspan=\"' .. rowspanCount .. '\" '
         if j == skillIndex[k] then
            if (#recipes > 1) then
             k = k + 1
                rowspanProducts = '| rowspan=\"' .. rowspanCount .. '\" '
             j = 0
            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
     end


     -- Return the full wikitable
     -- Return the full wikitable
     return header({ recipes[1].dispCraftStn }) .. rows .. '|-\n|}\n'
     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: