ARK: Survival Evolved Wiki
Advertisement
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Для документации этого модуля может быть создана страница Модуль:ResourceBreakdown/doc

local p = {}
function p.breakdownList( f )
  local dlclink = require('Module:DLCLink').link
  local args = f:getParent().args
  local resourceList = {}
  local baseResources = {}
  local showBaseIngredients, collapsibleIngredients, collapsibleBaseIngredients = true, false, false
  local printCategories, categories = false, {}
  if args.showBaseIngredients ~= nil and args.showBaseIngredients == 'false' then
    showBaseIngredients = false
  end
  if args.collapsibleIngredients ~= nil and args.collapsibleIngredients == 'true' then
    collapsibleIngredients = true
  end
  if args.collapsibleBaseIngredients ~= nil and args.collapsibleBaseIngredients == 'true' then
    collapsibleBaseIngredients = true
  end
  if args.printCategories ~= nil and args.printCategories == 'true' then
    printCategories = true
  end

  local count, collapsibleId = 1, 1
  for _,res in ipairs(args) do
    if string.len(res) > 0 then
      if tonumber(res) ~= nil then
        count = tonumber(res)
      else
        local returnTable = p.breakdown(res,count,0,collapsibleIngredients,collapsibleId)
        collapsibleId = returnTable[3]
        table.insert(resourceList,returnTable[1])

        -- insert base resources
        for bres,bcnt in pairs(returnTable[2]) do
          if baseResources[bres] == nil then
            baseResources[bres] = 0
          end
          -- add count to baseresource
          baseResources[bres] = baseResources[bres] + bcnt
        end
        -- set resource count default to 1 (if no number is given)
        count = 1
        if printCategories then
          table.insert(categories,'[[Категория:Создается с '..res..']]')
        end
      end
    end
  end
  local baseResourcesList, baseResourcesDiv, roundedCnt = {}, '', ''
  if showBaseIngredients then
    for bres,bcnt in pairs(baseResources) do
      roundedCnt = math.ceil(bcnt)
      if roundedCnt ~= bcnt then
        roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..bcnt..' если быть точным">'..roundedCnt..'</span>'
      end
      table.insert(baseResourcesList,roundedCnt..' × || [[File:'..string.gsub(bres,':',' ')..'.png|30px]] '..dlclink(bres))
    end
    local collapsibleBaseClassH, collapsibleBaseClassC = '',''
    if collapsibleBaseIngredients then
      collapsibleBaseClassH,collapsibleBaseClassC = ' class="mw-collapsible mw-collapsed"', ' class="mw-collapsible-content"'
    end
    baseResourcesDiv = '<div style="display:inline-block;margin:0.2em 0.2em 0;vertical-align:top;text-align:left"'..collapsibleBaseClassH..'>\'\'\'Базовые Ингридиенты\'\'\' <div'..collapsibleBaseClassC..'>\n{|\n|-\n| align="right" | '..table.concat(baseResourcesList,'\n|-\n| align="right" | ')..'\n|}\n</div></div>'
  end
  local collapsibleButton = ''
  if collapsibleIngredients then
    if collapsibleId > 1 then
      local collapsibles = {}
      for i=1,(collapsibleId-1) do
        table.insert(collapsibles,'mw-customtoggle-res'..i)
      end
      collapsibleButton = ' <span class="'..table.concat(collapsibles,' ')..'">[<span style="cursor:pointer;" class="pseudo-link">Развернуть</span>]</span>'
    else
      -- base resources are the same as displayed resources, so don't show them additionally
      baseResourcesDiv = ''
    end
  end
  return '<div style="display:inline-block;margin:0.2em 1em 0.2em 0;vertical-align:top;text-align:left">\'\'\'Список ресурсов\'\'\''..collapsibleButton..'\n\n'..table.concat(resourceList,'\n')..'</div>'..baseResourcesDiv..table.concat(categories)
end

function p.breakdown(resource,count,indent,collapsible,collapsibleId)
  local dlclink = require('Module:DLCLink').link
  local breakdowns = mw.loadData( 'Module:ResourceBreakdown/breakdowns' )
  local aliases = mw.loadData('Module:ResourceBreakdown/aliases')
  local aliasesOut = {}
  local baseResources = {}
  local recursiveReturned = {}
  local style, fontweight = '', ''
  local collapsibleClass = ''
  local iconsize = '20'

  -- Returned aliasesOut
  for ind1,res1 in pairs(aliases) do
    aliasesOut[res1] = ind1
  end
  -- end Returned aliasesOut
  
  if indent > 0 then
    style = 'border-left:1px solid grey;margin-left:1.6em;'
    if collapsible and indent == 1 then
      collapsibleClass = ' class="mw-collapsible mw-collapsed" id="mw-customcollapsible-res'..collapsibleId..'"'
      collapsibleId = collapsibleId+1
    end
  else
    fontweight = '\'\'\''
    iconsize = '25'
  end

  local roundedCnt = math.ceil(count)
  if roundedCnt ~= count then
    roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..count..' to be precise">'..roundedCnt..'</span>'
  end
  if aliasesOut[resource] ~= nil then
    resource = aliasesOut[resource]
  end
  local resourceBreakdown = {'<div style="'..style..'padding-left:5px"'..collapsibleClass..' data-wikark="craft">'..fontweight..roundedCnt..' × [[File:'..string.gsub(resource,':',' ')..'.png|'..iconsize..'px]] '..dlclink(resource)..fontweight}
  -- if resource is combined, list components
  if breakdowns[aliases[resource]] ~= nil then
    for res,cnt in pairs(breakdowns[aliases[resource]]) do
      recursiveReturned = p.breakdown(res,cnt*count,indent+1,collapsible,collapsibleId)
      collapsibleId = recursiveReturned[3]
      table.insert(resourceBreakdown,recursiveReturned[1])
      -- insert base resources
      for bres,bcnt in pairs(recursiveReturned[2]) do
        if baseResources[bres] == nil then
          baseResources[bres] = 0
        end
        -- add count to baseresource
        baseResources[bres] = baseResources[bres] + bcnt
      end
    end
  else
    -- no breakdown-data found, assuming it's a base resource, add it to basecount
    if baseResources[resource] == nil then
      baseResources[resource] = 0
    end
    -- add count to baseresource
    baseResources[resource] = baseResources[resource] + count
  end
  return {table.concat(resourceBreakdown,'\n')..'</div>',baseResources,collapsibleId}
end

return p
Advertisement