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