ARK: Survival Evolved Wiki
Mr Pie 5 (обсуждение | вклад)
м (1 версия импортирована)
TigerMehMat (обсуждение | вклад)
Нет описания правки
(не показано 10 промежуточных версий этого же участника)
Строка 41: Строка 41:
 
count = 1
 
count = 1
 
if printCategories then
 
if printCategories then
table.insert(categories,'[[Category:Crafted with '..res..']]')
+
table.insert(categories,'[[Категория:Создается с '..res..']]')
 
end
 
end
 
end
 
end
Строка 51: Строка 51:
 
roundedCnt = math.ceil(bcnt)
 
roundedCnt = math.ceil(bcnt)
 
if roundedCnt ~= bcnt then
 
if roundedCnt ~= bcnt then
roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..bcnt..' to be precise">'..roundedCnt..'</span>'
+
roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..bcnt..' если быть точным">'..roundedCnt..'</span>'
 
end
 
end
 
table.insert(baseResourcesList,roundedCnt..' × || [[File:'..string.gsub(bres,':',' ')..'.png|30px]] '..dlclink(bres))
 
table.insert(baseResourcesList,roundedCnt..' × || [[File:'..string.gsub(bres,':',' ')..'.png|30px]] '..dlclink(bres))
Строка 59: Строка 59:
 
collapsibleBaseClassH,collapsibleBaseClassC = ' class="mw-collapsible mw-collapsed"', ' class="mw-collapsible-content"'
 
collapsibleBaseClassH,collapsibleBaseClassC = ' class="mw-collapsible mw-collapsed"', ' class="mw-collapsible-content"'
 
end
 
end
baseResourcesDiv = '<div style="display:inline-block;margin:0.2em 0.2em 0;vertical-align:top;text-align:left"'..collapsibleBaseClassH..'>\'\'\'Total Base Ingredients\'\'\'<div'..collapsibleBaseClassC..'>\n{|\n|-\n| align="right" | '..table.concat(baseResourcesList,'\n|-\n| align="right" | ')..'\n|}\n</div></div>'
+
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
 
end
 
local collapsibleButton = ''
 
local collapsibleButton = ''
Строка 68: Строка 68:
 
table.insert(collapsibles,'mw-customtoggle-res'..i)
 
table.insert(collapsibles,'mw-customtoggle-res'..i)
 
end
 
end
collapsibleButton = ' <span class="'..table.concat(collapsibles,' ')..'">[<span style="cursor:pointer;" class="pseudo-link">Expand</span>]</span>'
+
collapsibleButton = ' <span class="'..table.concat(collapsibles,' ')..'">[<span style="cursor:pointer;" class="pseudo-link">Развернуть</span>]</span>'
 
else
 
else
 
-- base resources are the same as displayed resources, so don't show them additionally
 
-- base resources are the same as displayed resources, so don't show them additionally
Строка 74: Строка 74:
 
end
 
end
 
end
 
end
return '<div style="display:inline-block;margin:0.2em 1em 0.2em 0;vertical-align:top;text-align:left">\'\'\'Resources breakdown\'\'\''..collapsibleButton..'\n\n'..table.concat(resourceList,'\n')..'</div>'..baseResourcesDiv..table.concat(categories)
+
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
 
end
   
Строка 80: Строка 80:
 
local dlclink = require('Module:DLCLink').link
 
local dlclink = require('Module:DLCLink').link
 
local breakdowns = mw.loadData( 'Module:ResourceBreakdown/breakdowns' )
 
local breakdowns = mw.loadData( 'Module:ResourceBreakdown/breakdowns' )
  +
local aliases = mw.loadData('Module:ResourceBreakdown/aliases')
  +
local aliasesOut = {}
 
local baseResources = {}
 
local baseResources = {}
 
local recursiveReturned = {}
 
local recursiveReturned = {}
Строка 85: Строка 87:
 
local collapsibleClass = ''
 
local collapsibleClass = ''
 
local iconsize = '20'
 
local iconsize = '20'
  +
  +
-- Returned aliasesOut
  +
for ind1,res1 in pairs(aliases) do
  +
aliasesOut[res1] = ind1
  +
end
  +
-- end Returned aliasesOut
  +
 
if indent > 0 then
 
if indent > 0 then
 
style = 'border-left:1px solid grey;margin-left:1.6em;'
 
style = 'border-left:1px solid grey;margin-left:1.6em;'
Строка 100: Строка 109:
 
roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..count..' to be precise">'..roundedCnt..'</span>'
 
roundedCnt = '<span style="cursor: help; border-bottom: 2px dotted #397d75;" title="'..count..' to be precise">'..roundedCnt..'</span>'
 
end
 
end
  +
if aliasesOut[resource] ~= nil then
 
  +
resource = aliasesOut[resource]
local resourceBreakdown = {'<div style="'..style..'padding-left:5px"'..collapsibleClass..'>'..fontweight..roundedCnt..' × [[File:'..string.gsub(resource,':',' ')..'.png|'..iconsize..'px]] '..dlclink(resource)..fontweight}
 
  +
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 resource is combined, list components
if breakdowns[resource] ~= nil then
+
if breakdowns[aliases[resource]] ~= nil then
for res,cnt in pairs(breakdowns[resource]) do
+
for res,cnt in pairs(breakdowns[aliases[resource]]) do
 
recursiveReturned = p.breakdown(res,cnt*count,indent+1,collapsible,collapsibleId)
 
recursiveReturned = p.breakdown(res,cnt*count,indent+1,collapsible,collapsibleId)
 
collapsibleId = recursiveReturned[3]
 
collapsibleId = recursiveReturned[3]

Версия от 11:57, 26 апреля 2019

Для документации этого модуля может быть создана страница Модуль: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