Factorio вики
Advertisement

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

local p = {}
local getArgs = require('Dev:Arguments').getArgs

p.disamb = {
    ["Ворота"] = true,
    ["Твердотопливный двигатель"] = true,
    ["Электродвигатель"] = true,
    ["Аккумулятор"] = true,
    ["Бетон"] = true,
    ["Огнемёт"] = true,
    ["Силовая броня"] = true,
    ["Прибор ночного видения"] = true,
    ["Портативная солнечная панель"] = true,
    ["Портативный термоядерный реактор"] = true,
    ["Персональная лазерная защита"] = true,
    ["Электроразрядная защита"] = true,
    ["Модуль скорости"] = true,
    ["Модуль эффективности"] = true,
    ["Модуль продуктивности"] = true,
    ["Ракетная шахта"] = true,
    ["Персональная дронстанция"] = true,
    ["Персональная дронстанция MK2"] = true,
    ["Атомная бомба"] = true,
    ["Аккумуляторный модуль"] = true,
    ["Аккумуляторный модуль MK2"] = true,
    ["Оборудование для игнорирования конвейеров"] = true,
    ["Химический исследовательский пакет"] = true,
    ["Взрывчатка для скал"] = true,
    ["Электроразрядная защита"] = true,
    ["Портативный генератор энергетического щита"] = true,
    ["Быстрый манипулятор"] = true,
    ["Вагон-цистерна"] = true,
    ["Портативный термоядерный реактор"] = true,
    ["Тяжёлая броня"] = true,
    ["Отсыпка территории"] = true,
    ["Логистический исследовательский пакет"] = true,
    ["Конструкция малой плотности"] = true,
    ["Смазочная жидкость"] = true,
    ["Военный исследовательский пакет"] = true,
    ["Модульная броня"] = true,
    ["Прибор ночного видения"] = true,
    ["Персональная лазерная защита"] = true,
    ["Персональная дронстанция"] = true,
    ["Персональная дронстанция MK2"] = true,
    ["Силовая броня"] = true,
    ["Силовая броня МК2"] = true,
    ["Производственный исследовательский пакет"] = true,
    ["Модуль продуктивности"] = true,
    ["Радар"] = true,
    ["Блок управления ракеты"] = true,
    ["Ракетное топливо"] = true,
    ["Ракетная шахта"] = true,
    ["Портативная солнечная панель"] = true,
    ["Космический исследовательский пакет"] = true,
    ["Модуль скорости"] = true,
    ["Пакетный манипулятор"] = true,
    ["Стальной инструмент"] = true,
    ["Вспомогательный исследовательский пакет"] = true
    }

function p.trim(s)
    return (s:gsub("^%s*(.-)%s*$", "%1"))
    end
    
function p.trimpar(s)
    return (s:gsub("^(.-)%s%((.-)%)", "%1"))
end

function p.divide(s1, s2)
    local r = {}
    local i = 0
    for x in string.gmatch(s1, "[^;]+") do
        i=i+1
        r[i]=p.trim(x)
        if p.disamb[r[i]] then r[i]=r[i]..s2 end
    end
    return r
end

function p.techIB(frame)
    local result = ""
    local req = p.divide(frame.args[1], " (технология)")
    for i,x in ipairs(req) do
        result=result.."<span class=\"tech\" style=\"background-color:"..frame.args[2]..";\">[[Файл:"..x..".png|64px|link="..x.."]]"
        y=string.match(x, "%s%d+") 
        if (y~=nil) then
            result=result.."<div>\[\["..x.."|"..p.trim(y).."\]\]<\/div>"
            end
        result=result.."<\/span>"
        end
    
    return result
end

function p.techAL(frame)
    local result = ""
    local tl = p.divide(frame.args[1], " (предмет)")
    for i,x in ipairs(tl) do
        result=result..frame:expandTemplate({title = 'Template:Иконка предмета', args = {x}})
        end
    
    return result
end

function p.techEF(frame)
    local result="\n"
    local efs = p.divide(frame.args[1],"")
    for i,x in ipairs(efs) do
        result=result.."*"..x.."\n"
    end
    return result
end

function itIcon(par1, par2)
    local result = ""
    local x = par1
    local i = par2
    if p.disamb[x] then x=x.." (предмет)" end
    result = result.."<span class=\"iticon\">[[Файл:"..x..".png|link="..x.."]]"
    if i then result = result.."<div>[["..x.."|"..i.."]]</div>" end
    result = result.."</span>"
    return result
end

function p.techRES(frame)
    local result=""
    local sp = {[1]="Время", [2]="Исследовательский пакет 1", [3]="Исследовательский пакет 2", [4]="Исследовательский пакет 3", [5]="Инопланетный исследовательский пакет"}
    local res=p.divide(frame.args[1],"")
    for i in pairs(res) do
        if res[i] and tonumber(res[i])~=0 then result=result..itIcon(sp[i], res[i])
        end
    end
    return result
end

function p.techTable(frame)
    local result = ""
    local title = ""
    local args = getArgs(frame)
    
    for x in string.gmatch(args[1], "[^;]+") do
        x=p.trim(x)
        if p.disamb[x] then x=x.." (технология)" end
        result=result.."<span class=\"tech gray\">\[\[Файл:"..x..".png|64px|link="..x.."\]\]"
        y=string.match(x, "%s%d+") 
        if (y~=nil) then
            result=result.."<div>\[\["..x.."|"..p.trim(y).."\]\]<\/div>"
            end
        result=result.."<\/span>"
        end
    
    return result
end

function p.itemRecipe(frame)
    local item, quantity, result = "", "", ""
    for x in string.gmatch(frame.args[1], "[^\+]+") do
        y=x:find(",")
        if y==nil then
            quantity="1"
            item=p.trim(x)
        else quantity=x:sub(y+1)
            item=x:sub(1, (y-1))
            end
        if p.disamb[item] then y=item.." (предмет)" else y=item end
        result=result.."| style=\"line-height: 40px;\" |"..frame:expandTemplate({title = 'Template:Иконка предмета', args = {y, "2px 5px 2px 0"}}).."||"..quantity.." x "..item.."\n|-\n"
       end
    return result
end

function p.linkString(frame)
	local result = ""
	local br = frame.args[2]
	
	for x in string.gmatch(frame.args[1], "[^\,]+") do
		result = result.."[["..p.trim(x).."]], "
		if br~=nil then
			result = result.."<br/>"	
		end
	end
	if br~=nil then
		result = result:sub(1,-5)
	end
	result = result:sub(1,-4)
	return result
end

return p
Advertisement