Module:SkillChainChart

local cargo = mw.ext.cargo local Util = require 'Module:Util' local HeroUtil = require 'Module:HeroUtil' local List = require 'Module:ListUtil' local Hash = require 'Module:HashUtil' local escq = require 'Module:EscQ'.main1

local main = function (args) local RARITY_TXTS = Util.getRarityTexts

local cat = args[1] or '' local skills = List.group_by(cargo.query( 'UnitSkills=US,Skills=S,Units=U', S._pageName=page,S.Name=name,S.Description=desc,S.SP=sp,S.WikiName=wikiname,U._pageName=unitpage,IFNULL(CONCAT(U.Name,': ',U.Title),U.Name)=unitname,		 IFNULL(defaultRarity,6)=defaultR,IFNULL(unlockRarity,6)=unlockR, { join = 'US.skill=S.WikiName,US.WikiName=U.WikiName', where = ("Exclusive=0 AND RefinePath IS NULL AND S.Next IS NULL AND IFNULL(U.Properties__full,) NOT LIKE '%%enemy%%' AND IFNULL(U.Properties__full,) NOT LIKE '%%story%%' AND Scategory='%s'"):format(escq(cat)), groupBy = 'S.WikiName,U.WikiName', orderBy = 'unitpage', limit = 5000, }), function (v) return v.wikiname end) local avail = HeroUtil.getLowestRarities {current = true}

local tbl = mw.html.create('table'):addClass('wikitable'):addClass('default'):addClass('sortable') :css('text-align', 'center') local tr = tbl:tag('tr') tr:tag('th'):css('width', '150px'):wikitext('Skill') tr:tag('th'):wikitext('Description') tr:tag('th'):wikitext('SP') tr:tag('th'):addClass('unsortable'):wikitext(RARITY_TXTS[4] .. ' Heroes') tr:tag('th'):addClass('unsortable'):wikitext(RARITY_TXTS[5] .. ' Heroes')

local sortFn = function (v1, v2, k1, k2) return v1[1].name < v2[1].name or (v1[1].name == v2[1].name and k1 < k2) end for _, heroes in Hash.sorted_pairs(skills, sortFn) do		tr = tbl:tag('tr') tr:tag('td'):wikitext(('%s%s'):format(heroes[1].page, heroes[1].name ~= heroes[1].page and ('|' .. heroes[1].name) or '')) tr:tag('td'):wikitext(heroes[1].desc) tr:tag('td'):wikitext(heroes[1].sp) local r4 = tr:tag('td') local r5 = tr:tag('td') for _, v in ipairs(heroes) do			local minRarity = math.max(math.min(tonumber(v.defaultR), tonumber(v.unlockR)), avail[v.unitpage] and avail[v.unitpage]:bounds or 6) if minRarity <= 4 then r4:wikitext(Util.getHeroIcon(v.unitpage, '40px')) elseif minRarity <= 5 then r5:wikitext(Util.getHeroIcon(v.unitpage, '40px')) end end end

return tbl end

return require 'Module:MakeMWModule'.makeMWModule {main = main}