Warframe вики
Warframe вики
5861
страница
Нет описания правки
Нет описания правки
Строка 388: Строка 388:
 
end
 
end
 
 
if hitsScored >= hitsRequred then -- вместо >= должно быть ==
+
if hitsScored == hitsRequred then
 
Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
 
Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
 
countGallery = countGallery + 1
 
countGallery = countGallery + 1

Версия от 14:20, 24 мая 2020

Модуль:ZL
Данные

--Исходно взято с англовики Module:Mods 12.05.2020

local p = {}

local ModData = mw.loadData("Модуль:Мод/Данные")
local Shared = require("Модуль:Функции")
local Icons = require("Модуль:Иконка")  

local function getMod(name)
    local _mod = ModData[name]
    if _mod ~= nil and _mod.Name == name then
        return _mod
    else
        for modName, Mod in Shared.skpairs(ModData) do
            if modName == name or Mod.Name == name then
                return Mod
            end
        end
    end
end

local function ifModExists(name, _mod)
    if type(_mod) ~= table then
        _mod = ModData[name]
    elseif _mod.Name == name then
        return true
    end
    
    if _mod ~= nil and _mod.Name == name then
        return true
    else
        for modName, Mod in Shared.skpairs(ModData) do
            if modName == name or Mod.Name == name then
                return true
            end
        end
    end
    return false
end

function p.modImage(Mod) --картинка Мода (используется в Шаблон:Мод инфобокс)
    local ModName = Mod.args[1]
    local Mod = getMod(ModName)

    if(ModName == nil) then
        return '[[Файл:Мод_рамка_вики.png|x300px|center|middle]]<br /><span style="color:red; font-weight:bold;">ОШИБКА: Не указано название Мода</span>[[Категория:Ошибка Мод инфобокс]]'
    elseif ifModExists (ModName,Mod) == false then
        return '[[Файл:Мод_рамка_вики.png|x300px|center|middle]]<br /><span style="color:red; font-weight:bold;">ОШИБКА: Данный Мод не найден в базе модов</span>[[Категория:Ошибка Мод инфобокс]]'
    elseif(Mod.Image == nil) then
        return '[[Файл:Мод_рамка_вики.png|x300px|center|middle|link=Файл:'..ModName..'_вики.png]]<span style="color:red; font-weight:bold;">ОШИБКА: Не найдена картинка Мода. Проверьте корректность параметра "Изображение" или загрузите картинку</span>[[Категория:Ошибка Мод инфобокс]]'
    end
    
    return "[[Файл:"..Mod.Image.."|x300px|center|middle]]"
end

function p.modTransmutable(Mod) --надпись о Преобразовании (используется в Шаблон:Мод инфобокс)
    local ModName = Mod.args[1]
    local Mod = getMod(ModName)

    if(ModName == nil or ifModExists (ModName,Mod) == false ) then
        return ''
    elseif(Mod.Transmutable == nil or Mod.Transmutable) then
        return '[[Преобразование|<span style="color:green">Преобразуется</span>]][[Категория:Трансмутируемые моды]]'
    else 
        return '[[Преобразование|<span style="color:red">Не преобразуется</span>]][[Категория:Нетрансмутируемые моды]]'
    end
end

function p.modTax(Mod) --надпись о Налоге (используется в Шаблон:Мод инфобокс)
    local ModName = Mod.args[1]
    local Mod = getMod(ModName)

    if(ModName == nil or ifModExists (ModName,Mod) == false or Mod.Rarity == nil) then
        return ''
    end
    if(Mod.Rarity == "Обычный") then 
        return Icons.Item("Кредиты", "2&#8239;000")
    elseif(Mod.Rarity == "Необычный") then 
        return Icons.Item("Кредиты", "4&#8239;000")
    elseif(Mod.Rarity == "Редкий") then 
        return Icons.Item("Кредиты", "8&#8239;000")
    elseif(Mod.Rarity == "Легендарный") then 
        return Icons.Item("Кредиты", "1&#8239;000&#8239;000")
    else 
        return ''
    end
    
end

function p.modSyndicate(Mod) --Список синдикатов (используется в Шаблон:Мод инфобокс)
    local ModName = Mod.args[1]
    local Mod = getMod(ModName)

    local temp = '<span style="font-weight:bold;">Синдикаты:</span><br />'
 
    if(ModName == nil or ifModExists (ModName,Mod) == false or Mod.Syndicates == nil or type(Mod.Syndicates) ~= "table" or Shared.tableCount(Mod.Syndicates) == 0) then return ""
    end
    
    local synResult = ""
    for i, syn in pairs(Mod.Syndicates) do
        local tempSyn = Icons.Syn(syn, syn)
        synResult = synResult..tempSyn..': 25&#8239;000'..Icons.Item("Очки Синдиката")..'<br />'
    end
    return temp..synResult
end

function p.getValue(Mod)
    local ModName = Mod.args[1]
    local ValName = Mod.args[2]
    local Mod = getMod(ModName)
    
    if(ModName == nil) then
        return "ОШИБКА: Не указано название Мода"
    elseif(ValName == nil) then
        return "ОШИБКА: Параметр не указан"
    elseif ifModExists (ModName,Mod) == false then
        return "ОШИБКА: Мод "..ModName.." не найден"
    end
    
    if(ValName == "Название") then
        return ModName
    elseif(ValName == "Изображение") then
        if(Mod.Image ~= nil) then
            return Mod.Image
        else
            return "Мод рамка вики.png"
        end
    elseif(ValName == "Ссылка") then
        if(Mod.Link ~= nil) then
            return Mod.Link
        else
            return Mod.Name
        end
    elseif(ValName == "Полярность") then
        if(Mod.Polarity ~= nil) then
            return Mod.Polarity
        else
            return "Отсутствует"
        end
    elseif(ValName == "ПолярностьИконка") then
        if(Mod.Polarity ~= nil) then
            return Icons.Pol(Mod.Polarity)
        else
            return "Отсутствует"
        end
    elseif(ValName == "Редкость") then
        if(Mod.Rarity ~= nil) then
            return Mod.Rarity
        else
            return "Редкость неизвестна"
        end
    elseif(ValName == "Тип") then
        if(Mod.Type ~= nil) then
            return Mod.Type
        else
            return "Тип неизвестен"
        end
    elseif(ValName == "Налог") then
        if(Mod.Rarity ~= nil) then 
            if(Mod.Rarity == "Обычный") then
                return Icons.Icon("Кредиты").." 2,000"
            elseif(Mod.Rarity == "Необычный") then
                return Icons.Icon("Кредиты").." 4,000"
            elseif(Mod.Rarity == "Редкий") then
                return Icons.Icon("Кредиты").." 8,000"
            elseif(Mod.Rarity == "Легендарный") then
                return Icons.Icon("Кредиты").." 1,000,000"
            else
                return nil
            end
        else
            return nil
        end
    elseif(ValName == "Преобразование") then
        if(Mod.Transmutable ~= nil) then
            if(Mod.Transmutable) then
                return '[[Преобразование|<span style="color:green">Преобразуется</span>]][[Категория:Трансмутируемые моды]]'
            else
                return '[[Преобразование|<span style="color:red">Не преобразуется</span>]][[Категория:Нетрансмутируемые моды]]'
            end
        else
            return '[[Преобразование|<span style="color:green">Преобразуется</span>]][[Категория:Трансмутируемые моды]]'
        end
    elseif(ValName == "Получение") then
        if(Mod.Syndicates ~= nil) then
            return Mod.Syndicates[1]..', '..Mod.Syndicates[2]
        else
            return 'Ошибка'
        end
    else
        return ModData[ModName][ValName]
    end
end


------------------------------------------------------------
--------Выведение подборки модов с определенными параметрами
------------------------------------------------------------
function p.buildModGallery(frame)    
    nameParametr = frame.args[1]
    modParametr = frame.args[2]
    buildGallery = ''
    Gallery = ''
    countGallery = 0
    parametr = ''
    if(nameParametr == 'Редкость') then parametr = 'Mod.Rarity'
    elseif(nameParametr == 'Полярность') then parametr = 'Mod.Polarity'
    elseif(nameParametr == 'Тип') then parametr = 'Mod.Type'
    else return '<span style="color:red">Неизвестный параметр</span>' end
    
    if(nameParametr == 'Редкость') then
        for key, Mod in Shared.skpairs(ModData) do 
            if(Mod.Rarity == modParametr) then
                Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
                countGallery = countGallery + 1
            end
        end
    elseif(nameParametr == 'Полярность') then
        for key, Mod in Shared.skpairs(ModData) do 
            if(Mod.Polarity == modParametr) then
                Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
                countGallery = countGallery + 1
            end
        end
    elseif(nameParametr == 'Тип') then
        for key, Mod in Shared.skpairs(ModData) do 
            if(Mod.Type == modParametr) then
                Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
                countGallery = countGallery + 1
            end
        end
    else return 'Параметр не определен'
end
    buildGallery = 
"Модов с параметром '''"..nameParametr.." ("..modParametr..")''' на текущий момент - " ..countGallery..":<br/>" ..Gallery
    return buildGallery
end 

function p.buildModGallery2(frame)    --пробный !!!!!!!!!!!!!!
    local nameParametr = frame.args[1]
    local modParametr = frame.args[2]
    local buildGallery = ''
    local Gallery = ''
    local countGallery = 0
    local parametr = ''
    if(nameParametr == 'Редкость') then parametr = "Rarity"
    elseif(nameParametr == 'Полярность') then parametr = "Polarity"
    elseif(nameParametr == 'Тип') then parametr = "Type"
    else return '<span style="color:red">Неизвестный параметр</span>' end
    
    for key, Mod in Shared.skpairs(ModData) do 
        if(Mod[parametr] == modParametr and Mod.Rarity == "Редкий") then
            Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
            countGallery = countGallery + 1
        end
    end
    buildGallery = 
"Модов с параметром '''"..nameParametr.." ("..modParametr..")''' на текущий момент - " ..countGallery..":<br/>" ..Gallery
    return buildGallery..' '..parametr
end 

------------------------------------------------------------
--------Выведение подборки модов с определенными параметрами (недоработанный)
------------------------------------------------------------
function p.buildModGalleryAdv(frame)    
    local nameParametr1 = frame.args[1]
    local modParametr1 = frame.args[2]
    local nameParametr2 = frame.args[3]
    local modParametr2 = frame.args[4]
    local nameParametr3 = frame.args[5]
    local modParametr3 = frame.args[6]
    local buildGallery = ''
    local Gallery = ''
    local countGallery = 0
    local parametr1 = ''
    local parametr2 = ''
    local parametr3 = ''
    
    if(nameParametr1~='' or nameParametr1~=nil) then
        if(nameParametr1 == 'Редкость') then parametr1 = 'Rarity'
        elseif(nameParametr1 == 'Полярность') then parametr1 = 'Polarity'
        elseif(nameParametr1 == 'Тип') then parametr1 = 'Type'
        else return '<span style="color:red">Неизвестный параметр</span>' 
        end
    end
    if(nameParametr2~='' or nameParametr2~=nil) then
        if(nameParametr2 == 'Редкость') then parametr2 = 'Rarity'
        elseif(nameParametr2 == 'Полярность') then parametr2 = 'Polarity'
        elseif(nameParametr2 == 'Тип') then parametr2 = 'Type'
        else return '<span style="color:red">Неизвестный параметр</span>'
        end
    end
    if(nameParametr3~='' or nameParametr3~=nil) then
        if(nameParametr3 == 'Редкость') then parametr3 = 'Rarity'
        elseif(nameParametr3 == 'Полярность') then parametr3 = 'Polarity'
        elseif(nameParametr3 == 'Тип') then parametr3 = 'Type'
        else return '<span style="color:red">Неизвестный параметр</span>'
        end
    end

    for key, Mod in Shared.skpairs(ModData) do 
        if(Mod.Rarity == modParametr1 and Mod.Polarity == modParametr2 and Mod.Type == modParametr3) then
            Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
        end
    end
    
    if (Gallery=='' or Gallery==nil) then return 'Модов удовлетворяющих такому фильтру не существует' end

    buildGallery = 
"Модов с параметром '''"..nameParametr.." ("..modParametr..")''' на текущий момент - " ..countGallery..":<br/>" ..Gallery

    return buildGallery
end


function p.buildModGalleryAdv1(frame)    
    
    for j=1, 3 do
        if(parametr[j] ~= '') then
            i = 0
            for key, Mod in Shared.skpairs(ModDataTemp) do 
                if(parametr[1] == modParametr) then
                    _ModDataTemp[i]=Mod
                    i=i+1
                end
            end
        end
        if(_ModDataTemp~='') then ModDataTemp = _ModDataTemp end
    end

    for k in pairs(ModDataTemp) do Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]' end

    buildGallery = 
"Модов с параметром '''"..nameParametr.." ("..modParametr..")''' на текущий момент - " ..countGallery..":<br/>" ..Gallery
    
    return buildGallery
end 

function p.buildModGalleryAdv2(frame)    
    local nameParametr = {frame.args[1], frame.args[3], frame.args[5]}
    local modParametr = {frame.args[2], frame.args[4], frame.args[6]}
    local buildGallery = ''
    local Gallery = ''
    local countGallery = 0
    local parametr = {}
    
    for i=1, 6 do
    if(nameParametr[i]~='' or nameParametr[i]~=nil) then
        if(nameParametr[i] == 'Редкость') then parametr[i] = 'Rarity'
        elseif(nameParametr[i] == 'Полярность') then parametr[i] = 'Polarity'
        elseif(nameParametr[i] == 'Тип') then parametr[i] = 'Type'
        else return '<span style="color:red">Неизвестный параметр</span>' 
        end
    end
    end

    for key, Mod in Shared.skpairs(ModData) do 
        if Mod[parametr[1]] == modParametr[1] and Mod[parametr[2]] == modParametr[2] and Mod[parametr[3]] == modParametr[3] then
            Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
        end
    end

    buildGallery = 
"Модов с параметром '''"..nameParametr[1].." ("..modParametr[2]..")''' на текущий момент - " ..countGallery..":<br/>" ..Gallery

    return buildGallery
end

function p.buildModGalleryAdv3(frame) -- Поимённый вариант
    local varImported = {frame.args["Редкость"], frame.args["Полярность"], frame.args["Тип"]}
    local varIndex = {'Rarity', 'Polarity','Type',}
    local varCount = 3 -- пекущее количество параметров 
    local Gallery = ''
    local countGallery = 0
    local hitsScored
    
    local hitsRequred = varCount -- нахождение сколько параметров должны совпасть
    for i=1,varCount do
    if varImported[i] == nil or varImported[i] == "" then               
        hitsRequred = hitsRequred - 1
        end
    end
    
    for key, Mod in Shared.skpairs(ModData) do
        hitsScored = 0
        for i=1, varCount do
            if Mod[varIndex[i]] == varImported[i] then hitsScored = hitsScored+1
        end
        
        if hitsScored == hitsRequred then                       
            Gallery = Gallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
            countGallery = countGallery + 1
            end
        end
    end

return "Модов с указанными параментрами на текущий момент - " ..tostring(countGallery)..":<br/>" ..Gallery
end

-- подредактировать!!! локализовать Проверить кусок по перебору при нескольких параметрах

function p.buildModTableByRarity()    
 
    buildLegendaryTable = ''
    buildLegendaryGallery = ''
    countLegendary = 0
    buildRareTable = ''
    buildRareGallery = ''
    countRare = 0
    buildUncommonTable = ''
    buildUncommonGalley = ''
    countUncommon = 0
    buildCommonTable = ''
    buildCommonGallery = ''
    countCommon = 0
 
    for key, Mod in Shared.skpairs(ModData) do 
--        mw.log(Mod.Rarity)
 
        if Mod.Rarity == 'Легендарный' then
            buildLegendaryTable = buildLegendaryTable.. '[[Файл:' .. Mod.Image .. '|110px|link=' .. Mod.Name ..']]'
            buildLegendaryGallery = buildLegendaryGallery.. '[[Файл:' ..Mod.Image.. '|x180px]]'
            countLegendary = countLegendary + 1
        elseif Mod.Rarity == "Редкий" then
            buildRareTable = buildRareTable .. "[[Файл:" .. Mod.Image .. "|110px|link=" .. Mod.Name .."]]"
            buildRareGallery = buildRareGallery.. "Файл:" ..Mod.Image
            countRare = countRare + 1
        elseif Mod.Rarity == "Необычный" then
            buildUncommonTable = buildUncommonTable .. "[[Файл:" .. Mod.Image .. "|110px|link=" .. Mod.Name .."]]"
            buildUncommonGalley = buildUncommonGalley.. "Файл:" ..Mod.Image
            countUncommon = countUncommon + 1
        elseif Mod.Rarity == "Обычный" then
            buildCommonTable = buildCommonTable .. "[[Файл:" .. Mod.Image .. "|110px|link=" .. Mod.Name .."]]"
            buildCommonGallery = buildCommonGallery.. "Файл:" ..Mod.Image
            countCommon = countCommon +1
        end
    end
    
    countTotal = countLegendary + countRare + countUncommon + countCommon
--[[        buildTable = 
countTotal .. "\n" ..
'{| border="1" cellpadding="1" cellspacing="1" class="emodtable" \n' ..
'|-\n' ..
'! Легендарные \n' ..countLegendary.. '\n' ..
'| ' ..buildLegendaryTable.. '\n' ..
'|-\n' ..
'! Редкие \n' ..countRare.. '\n' ..
'| ' ..buildRareTable.. '\n' ..
'|-\n' ..
'! Необычные \n' ..countUncommon.. '\n' ..
'| ' ..buildUncommonTable.. '\n' ..
'|-\n' ..
'! Обычные \n' ..countCommon.. '\n' ..
'| ' ..buildCommonTable.. '\n' ..
'|}'
 
    return buildTable]]--
    buildGallery =
'Легендарных Модов '..countLegendary..' :<br/>' ..buildLegendaryGallery
    return buildGallery
end 


--[[
function p.getValueRaw(Mod)
    local ModName = Mod.args[1]
    local ValName = Mod.args[2]
    local Mod = getMod(ModName)
    if Mod ~= nil then
        return Mod[ValName]
    end
end
]]--

--[[
function p.buildModTableByPolarity()
 
    buildMaduraiTable = ""
    buildVazarinTable = ""
    buildNaramonTable = ""
    buildZenurikTable = ""
    buildPenjagaTable = "" --wtf is penjaga
    buildUnairuTable = ""
    
    countMadurai = 0
    countVazarin = 0
    countNaramon = 0
    countZenurik = 0
    countPenjaga = 0
    countUnairu = 0
 
--Madurai "V" "Madurai"
--Vazarin "D"
--Naramon "Bar"
--Zenurik "Ability" "Zenurik"
--Penjaga "Sentinel"
-- Unairu Pol Unairu  - R - Introduced in Update 13.0 and used for certain Melee Stance Mods. 
 
    for key, Mod in Shared.skpairs(ModData) do
--        mw.log(Mod.Polarity)
 
        if Mod.Polarity == "V" or Mod.Polarity == "Madurai" then
            buildMaduraiTable = buildMaduraiTable .. "[_[File:" .. Mod.Image .. "|114px|link=" .. Mod.Name .."]_]"
            countMadurai = countMadurai + 1
        elseif Mod.Polarity == "D" or Mod.Polarity == "Vazarin" then
            buildVazarinTable = buildVazarinTable .. "[_[File:" .. Mod.Image .. "|114px|link=" .. Mod.Name .."]_]"
            countVazarin = countVazarin + 1
        elseif Mod.Polarity == "Bar" or Mod.Polarity == "Dash" or Mod.Polarity == "Naramon" then
            buildNaramonTable = buildNaramonTable .. "[_[File:" .. Mod.Image .. "|114px|link=" .. Mod.Name .."]_]"
            countNaramon = countNaramon + 1
        elseif Mod.Polarity == "Ability" or Mod.Polarity == "Zenurik" or Mod.Polarity == "Scratch" then
            buildZenurikTable = buildZenurikTable .. "[_[File:" .. Mod.Image .. "|114px|link=" .. Mod.Name .."]_]"
            countZenurik = countZenurik + 1
        elseif Mod.Polarity == "Sentinel" or Mod.Polarity == "Penjaga" then
            buildPenjagaTable = buildPenjagaTable .. "[_[File:" .. Mod.Image .. "|114px|link=" .. Mod.Name .."]_]"
            countPenjaga = countPenjaga + 1
        elseif Mod.Polarity == "R" or Mod.Polarity == "Unairu" or Mod.Polarity == "Ward" then
            buildUnairuTable = buildUnairuTable .. "[_[File:" .. Mod.Image .. "|114px|link=" .. Mod.Name .."]_]"
            countUnairu = countUnairu + 1
        end
    end
 
    countTotal = countMadurai + countVazarin + countNaramon + countZenurik + countPenjaga + countUnairu
        buildTable = 
countTotal .. "\n" .. 
"{| border=\"1\" cellpadding=\"1\" cellspacing=\"1\" class=\"article-table\"\n" ..
"|-\n" ..
"!Madurai\n" .. countMadurai .. "\n" ..
"| " .. buildMaduraiTable .. "\n" ..
"|-\n" ..
"! Vazarin\n" .. countVazarin .. "\n" ..
"| " .. buildVazarinTable .. "\n" ..
"|-\n" ..
"! Naramon\n" .. countNaramon .. "\n" ..
"| " .. buildNaramonTable .. "\n" ..
"|-\n" ..
"! Zenurik\n" .. countZenurik .. "\n" ..
"| " .. buildZenurikTable .. "\n" ..
"|-\n" ..
"! Penjaga\n" .. countPenjaga .. "\n" ..
"| " .. buildPenjagaTable .. "\n" ..
"|-\n" ..
"!Unairu\n" .. countUnairu .. "\n" ..
"| " .. buildUnairuTable .. "\n" ..
"|}"
 
    return buildTable
end
]]--
--[[
function p.getPolarityList()
    local pols = {}
    
    for name, Mod in Shared.skpairs(ModData) do
        if(pols[Mod.Polarity] == nil) then 
            pols[Mod.Polarity] = 1 
        else 
            pols[Mod.Polarity] = pols[Mod.Polarity] + 1 
        end
    end
    
    local result = "POLARITIES:"
    for key, trash in Shared.skpairs(pols) do
        result = result.."\n"..key.." ("..trash..")"
    end
    return result
end

function p.getRarityList()
    local pols = {}
    
    for name, Mod in Shared.skpairs(ModData) do
        if(pols[Mod.Rarity] == nil) then 
            pols[Mod.Rarity] = 1 
        else 
            pols[Mod.Rarity] = pols[Mod.Rarity] + 1 
        end
    end
    
    local result = "RARITIES:"
    for key, trash in Shared.skpairs(pols) do
        result = result.."\n"..key.." ("..trash..")"
    end
    return result
end
]]--
function p.tooltipText(Mod) --добить по всплывающей подсказке под нашу вики
    local Name = Mod.args ~= nil and Mod.args[1]
    local newName = Mod.args ~= nil and Mod.args[2]
    local Mod = nil
    if newName == '' then newName = nil end
    
    if Name == nil then
        return '<span style="color:red;">{{[[Шаблон:Моды|Mod]]}}</span> Введите название Мода.[[Категория:'..'Ошибка Tooltip Моды]]'
    else
        Mod = getMod(Name)
    end
    
    if Mod == nil then
        return '<span style="color:red;">{{[[Шаблон:Моды|Mod]]}}</span> "'..Name..'" не найден[[Категория:'..'Ошибка Tooltip Моды]]'
    else
        local Link = Mod.Link ~= nil and Mod.Link or nil
        
        local linkText = ''
        if Link ~= nil and newName ~= nil then
            linkText = Link..'|'..newName
        elseif newName ~= nil then
            linkText = Name..'|'..newName
        elseif Link ~= nil then
            linkText = Link..'|'..Name
        else
            linkText = Name
        end
        
        --mw.log(Link)
        local tMod ={}
        table.insert(tMod,'<span class="mod-tooltip" data-param="'..Name..'">')
        table.insert(tMod,'[[File:Mod_TT_20px.png|link='..Name..']]'..'&thinsp;[[')
        table.insert(tMod,linkText..']]</span>')
        
        return table.concat(tMod)
    end
end

-- accepts three parameters: 
-- a string that represents mod rarity: 'Common', 'Uncommon', 'Rare', 'Legendary', 'Amalgam', 'Peculiar', 'Requiem', 'All', or ''
-- a string that represents polarity: 'Madurai', 'Naramon', 'Vazarin', 'Zenurik', 'Unairu', 'Penjaga', or nil
-- a string that represents transmutability: 'true', 'false', '', or nil (counting both transmutable and non-transmutable mods)
function p.getModCount(Mod)
    local total = 0
    local rarity = Mod.args[1]
    local polarity = Mod.args[2]
    local transmutable = Mod.args[3]
    
    if (rarity == '' or rarity == nil) then
       rarity = 'All' 
    end
    
    if (polarity == '' or polarity == nil) then
        polarity = 'All'
    end
    
    if (transmutable == 'true') then
        transmutable = true
    elseif (transmutable == 'false') then
        transmutable = false
    else
        transmutable = 'All'
    end
    
    -- treating mods without Transmutable attribute as transmutable
    for name, Mod in Shared.skpairs(ModData['Моды']) do
        if ((Mod['Rarity'] == rarity or rarity == 'All') and 
            (Mod['Polarity'] == polarity or polarity == 'All') and
            (Mod['Transmutable'] == nil or Mod['Transmutable'] == transmutable or transmutable == 'All') and
            not Shared.contains(ModData['IgnoreInCount'], name)) then
            
            total = total + 1
        end
    end
    
    return total
end

return p