League of Legends Wiki
Advertisement
League of Legends Wiki

Данный модуль реализует функции шаблона {{Statistic icon}}. Он производит парсинг введенного текста на предмет ключевых слов (характеристик чемпиона), после чего выводит соответствующую найденную иконку.

From Модуль:Stats icon/doc


-- <pre>
--[[Данный скрипт упрощает использование шаблона Statistic icon, 
    позволяя вводить падежные формы характеристик в тексте статьи. 
    Скрипт производит парсер введенного слова и возвращает соответствующую 
    иконку характеристики чемпиона]]
-- Используется в [[Шаблон:Statistic icon]] и [[Шаблон:Stil]]
-- Автор: Участник:Mortorium

local p = {}
local lib = require('Module:Feature')

-- Таблица, сводящая все падежные варианты в форму именительного (nominative) падежа
-- Она должна быть в формате последовательности, чтобы сохранялся порядок провеки слов
local anyToNominative = {
    {"адаптивн",                  "адаптивная сила"},
    
    -- Все подтипы урона
    {"физического урона",         "физический урон"},
    {"физическому урону",         "физический урон"},
    {"физическим уроном",         "физический урон"},
    {"физическом уроне",          "физический урон"},
    {"магического урона",         "магический урон"},
    {"магическому урону",         "магический урон"},
    {"магическим уроном",         "магический урон"},
    {"магическом уроне",         "магический урон"},
    {"чистого урона",             "чистый урон"},
    {"чистому урону",             "чистый урон"},
    {"чистым урона",              "чистый урон"},
    {"чистом уроне",              "чистый урон"},
    
    -- "силы"
    {"силы умений",               "сила умений"},
    {"силе умений",               "сила умений"},
    {"силу умений",               "сила умений"},
    {"силой умений",              "сила умений"},
    {"ap",                        "сила умений"},
    {"силы атаки",                "сила атаки"},
    {"силе атаки",                "сила атаки"},
    {"силу атаки",                "сила атаки"},
    {"силой атаки",               "сила атаки"},
    {"ad",                        "сила атаки"},
    
    -- Физические атакующие характеристики
    {"скорость атаки",            "скорость атаки"},
    {"скорости атаки",            "скорость атаки"},
    {"скоростью атаки",           "скорость атаки"},
    {"as",                        "скорость атаки"},
    
    {"шанс",                      "шанс критического удара"},
    {"шанса",                     "шанс критического удара"},
    {"шансу",                     "шанс критического удара"},
    {"шансом",                    "шанс критического удара"},
    {"шансе",                     "шанс критического удара"},
    
    {"критического урона",        "критический урон"},
    {"критическому урону",        "критический урон"},
    {"критическим уроном",        "критический урон"},
    {"критическом уроне",         "критический урон"},
    
    -- чтобы поиск не пошел до слова "броня"
    {"пробивание брони",          "пробивание брони"},
    {"пробивания брони",          "пробивание брони"},
    {"пробиванию брони",          "пробивание брони"},
    {"пробиванием брони",         "пробивание брони"},
    {"пробивании брони",          "пробивание брони"},
    {"проброн",                   "пробивание брони"},
    {"смертоносност",             "смертоносность"},
    
    -- магические атакующие характеристики
    {"магическое пробиван",       "магическое пробивание"},
    {"магического пробиван",      "магическое пробивание"},
    {"магическому пробиван",      "магическое пробивание"},
    {"магическим пробиван",       "магическое пробивание"},
    {"магическом пробиван",       "магическое пробивание"},
    {"магпроб",                   "магическое пробивание"},
    
    {"магический вампиризм",      "магический вампиризм"},
    {"магического вампиризма",    "магический вампиризм"},
    {"магическому вампиризму",    "магический вампиризм"},
    {"магическим вампиризмом",    "магический вампиризм"},
    {"магическом вампиризме",     "магический вампиризм"},
    
    -- Стоит отдельно от атакующих физических характеристик, чтобы не был учтен раньше магического вампиризма
    {"вампиризм",                 "вампиризм"},
    
    {"физического вытягивание жизни",   "физическое вытягивание жизни"},
    {"физическому вытягиванию жизни",   "физическое вытягивание жизни"},
    {"физическим вытягиванием жизни",   "физическое вытягивание жизни"},
    {"физическом вытягивании жизни",    "физическое вытягивание жизни"},
    
    {"всестороннего вытягивания жизни", "всестороннее вытягивание жизни"},
    {"всестороннему вытягиванию жизни", "всестороннее вытягивание жизни"},
    {"всесторонним вытягиванием жизни", "всестороннее вытягивание жизни"},
    {"всестороннем вытягивании жизни",  "всестороннее вытягивание жизни"},
    
    {"эффективности лечения и щитов", "эффективность лечения и щитов"},
    {"эффективностью лечения и щитов", "эффективность лечения и щитов"},
    {"эффективность восстановления и прочность щитов", "эффективность лечения и щитов"},
    {"эффективность лечения и прочность щитов", "эффективность лечения и щитов"},
    {"эщи",                       "эффективность лечения и щитов"},
    
    {"прочность щитов",           "прочность щитов"},
    {"прочности щитов",           "прочность щитов"},
    {"прочностью щитов",          "прочность щитов"},
    
    -- чтобы поиск не пошел до слова "здоровье"
    {"восстановление здоровья",   "восстановление здоровья"},
    {"восстановления здоровья",   "восстановление здоровья"},
    {"восстановлению здоровья",   "восстановление здоровья"},
    {"восстановлением здоровья",  "восстановление здоровья"},
    {"восстановлении здоровья",   "восстановление здоровья"},
    
    {"здоровь",                   "здоровье"},
    {"hp",                        "здоровье"},
    
    {"брони",                     "броня"},
    {"броне",                     "броня"},
    {"броню",                     "броня"},
    {"броней",                    "броня"},
    
    {"сопротивления магии",       "сопротивление магии"},
    {"сопротивлению магии",       "сопротивление магии"},
    {"сопротивлением магии",      "сопротивление магии"},
    {"сопротивлении магии",       "сопротивление магии"},
    {"mr",                        "сопротивление магии"},
    
    {"сопротивления замедлению",  "сопротивление замедлению"},
    {"сопротивлению замедлению",  "сопротивление замедлению"},
    {"сопротивлением замедлению", "сопротивление замедлению"},
    {"сопротивлении замедлению",  "сопротивление замедлению"},
    
    {"стойкост",                  "стойкость"},
    
    {"перезарядк",                "перезарядка"},
    
    {"ускорения умений",          "ускорение умений"},
    {"ускорению умений",          "ускорение умений"},
    {"ускорением умений",         "ускорение умений"},
    {"ускорении умений",          "ускорение умений"},
    
    -- чтобы поиск не пошел до слова "мана"
    {"восстановление маны",       "восстановление маны"},
    {"восстановления маны",       "восстановление маны"},
    {"восстановлению маны",       "восстановление маны"},
    {"восстановление маны",       "восстановление маны"},
    {"восстановлением маны",      "восстановление маны"},
    {"восстановлении маны",       "восстановление маны"},
    
    {"мана",                      "мана"},
    {"маны",                      "мана"},
    {"мане",                      "мана"},
    {"ману",                      "мана"},
    {"маной",                     "мана"},
    
    -- чтобы поиск не пошел до слова "энергия"
    {"восстановление энергии",    "восстановление энергии"},
    {"восстановления энергии",    "восстановление энергии"},
    {"восстановлению энергии",    "восстановление энергии"},
    {"восстановление энергии",    "восстановление энергии"},
    {"восстановлением энергии",   "восстановление энергии"},
    {"восстановлении энергии",    "восстановление энергии"},
    
    {"энерги",                    "энергия"},
    
    {"золот",                     "золото"},
    
    {"опыт",                      "опыт"},
    
    {"скорость передвижения",     "скорость передвижения"},
    {"скорости передвижения",     "скорость передвижения"},
    {"скоростью передвижения",    "скорость передвижения"},
    {"ms",                        "скорость передвижения"},
    
    {"дальност",                  "дальность"},
}

local rusToEng = {
    {"адаптивная сила",           {"Ability power.png", "Attack damage.png"}},
    {"сила умений",               {"Ability power icon.png"}},
    {"физический урон",           {"Attack damage icon.png"}},
    {"магический урон",           {"Ability power icon.png"}},
    {"чистый урон",               {"Hybrid penetration icon.png"}},
    {"сила атаки",                {"Attack damage icon.png"}},
    {"скорость атаки",            {"Attack speed icon.png"}},
    {"шанс критического удара",   {"Critical strike chance icon.png"}},
    {"критический урон",          {"Critical strike damage icon.png"}},
    {"пробивание брони",          {"Armor penetration icon.png"}},
    {"смертоносность",            {"Armor penetration icon.png"}},
    {"магическое пробивание",     {"Magic penetration icon.png"}},
    {"магический вампиризм",      {"Spell vamp icon.png"}},
    {"вампиризм",                 {"Life steal icon.png"}},
    {"физическое вытягивание жизни", {"Life steal icon.png"}},
    {"всестороннее вытягивание жизни", {"Omnivamp icon.png"}},
    {"эффективность лечения и щитов", {"Heal and shield power icon.png"}},
    {"исцеление",                 {"Heal and shield power icon.png"}},
    {"прочность щитов",           {"Heal and shield power icon.png"}},
    {"щит",                       {"Hybrid resistances icon.png"}},
    {"восстановление здоровья",   {"Health regeneration icon.png"}},
    {"здоровье",                  {"Health icon.png"}},
    {"броня",                     {"Armor icon.png"}},
    {"сопротивление магии",       {"Magic resistance icon.png"}},
    {"сопротивление замедлению",  {"Slow immune icon.png"}},
    {"стойкость",                 {"Tenacity icon.png"}},
    {"перезарядка",               {"Cooldown icon.png"}},
    {"ускорение умений",          {"Cooldown reduction icon.png"}},
    {"восстановление маны",       {"Mana regeneration icon.png"}},
    {"мана",                      {"Mana icon.png"}},
    {"восстановление энергии",    {"Energy regeneration icon.png"}},
    {"энергия",                   {"Energy icon.png"}},
    {"опыт",                      {"Experience icon.png"}},
    {"золото",                    {"Gold icon.png"}},
    {"скорость передвижения",     {"Movement speed icon.png"}},
    {"дальность",                 {"Range icon.png"}},
}

local function toNominative(text) 
    local link = mw.ustring.lower(text)
    for i, value in ipairs(anyToNominative) do
        if mw.ustring.find(mw.ustring.lower(link), value[1]) then
            link = value[2]
            return link
        end
    end

    return link
end

local function getIcon(nominative, size)
    local images = ""
    local imageStr = ""
    
    for i, value in ipairs(rusToEng) do
        if(nominative == value[1]) then 
            images = value[2]
        end
    end
    
    if(type(images) == "table") then
        for i, v in ipairs(images) do
            imageStr = imageStr .. mw.ustring.format(
                "[[File:%s|%s|link=%s]]",
                images[i],
                size,
                nominative)
        end
    end
    
    return imageStr
end

local function formatImageLinks(images)
    str = ""
    for key, value in pairs(images) do
        str = str .. "[[File:" .. value .. "|15px|link=]]"
    end    
    return str
end  

-- Возвращает название иконки с символом характеристики
function p.statisticIcon(frame)
    local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
    
    local text = args['text'] or args[1]
    local icononly = args['icononly'] == "true"
    local addLink = args['addlink'] == "true"
    local size = args["size"] or "16px"
    
    local link = args['link'] or args[2] or text
    link = toNominative(link)
    local image = getIcon(link, size)
    
    if(icononly) then return image end
    
    if(addLink) then 
        return mw.ustring.format("%s [[%s|%s]]", image, link, text)
    else
        return image .. " " .. text
    end
end  

return p

-- </pre>
-- [[Category:Lua]]
Advertisement