85,585
edits
Site News |
---|
Warning: This wiki contains spoilers. Read at your own risk! Social media: If you would like, please join our Discord server, and/or follow us on X (Twitter) or Tumblr! |
Thecornerman (talk | contribs) mNo edit summary |
Thecornerman (talk | contribs) (Removed unused skillList function) |
||
(20 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
function p.main(frame) | function p.main(frame) | ||
in_args = frame:getParent().args | in_args = frame:getParent().args -- fields from template call | ||
skills = {}; name = '' -- list of skill names, and base skill name | |||
local i = 0; num = 0; type = ''; row = ''; lastrar = 0 | |||
if in_args[ | local skl_hdr = '' -- initializing sub-header for skill list in table | ||
name = in_args[ | |||
blank = { | |||
[1] = false | |||
} | |||
-- availability table; numbered fields allows ipairs to iterate in order | |||
local avail = {} | |||
for i = 1, 10 do | |||
avail[i] = {} | |||
end | |||
local typelook = { | |||
["forge"] = 6, | |||
["trial"] = 7, | |||
["quest"] = 8, | |||
["squad"] = 9, | |||
["seal"] = 10 | |||
} | |||
if in_args['skill'] ~= nil then -- if a skill field is declared | |||
name = in_args['skill'] -- sets base name to that skill field | |||
else | else | ||
name = tostring(mw.title.getCurrentTitle()) | -- sets base name to page name | ||
name = tostring(mw.title.getCurrentTitle()):gsub("Attack", "Atk"): | |||
gsub("Speed", "Spd"):gsub("Defense", "Def"): | |||
gsub("Resistance", "Res"):gsub("⁄", "/") | |||
end | end | ||
if in_args[ | if in_args['tiers'] ~= nil then -- if tiers field is declared | ||
tierSet(in_args[ | tierSet(in_args['tiers']) -- calls function to fill skill list by tier | ||
else | else | ||
skills[1] = name | skills[1] = name -- skill list is 1 item long, just base name | ||
end | |||
for k, v in pairs(in_args) do | |||
type = tostring(k):match("%a+") | |||
num = tonumber(tostring(k):match("%d+")) | |||
row = typelook[type] | |||
if type == "skill" and num ~= nil then | |||
skills[num] = v | |||
elseif row ~= nil and num ~= nil then | |||
blank[row] = true | |||
avail[row][num] = v | |||
if row > lastrar then -- if current rarity is greater than last | |||
lastrar = row | |||
end | |||
end | |||
end | end | ||
local args = { | local length = #skills -- sets length variable to length of skill list | ||
where = "skill=' | |||
local args = { -- additional arguments for cargo query | |||
-- what data to include | |||
where = "_pageNamespace=0 AND skill IN (\"", | |||
orderBy = 'sort', -- how to sort data | |||
limit = 500 -- maximum number of data rows to call | |||
} | } | ||
-- lookup table for skills, converting skill name to a number | |||
-- using numbers allows ipairs to conserve the order of the skills | |||
local skl_lookup = { | local skl_lookup = { | ||
[skills[1]] = 1 | [skills[1]] = 1 | ||
} | } | ||
if length > 1 then -- if more than 1 skill is listed | |||
-- sets skill header; unnecessary for fewer than 1 skill | |||
if | skl_hdr = '|-\n' .. | ||
skl_hdr = | '! ' .. skills[1] .. '\n' | ||
end | end | ||
names = skills[1] | |||
for i = 2, | for i = 2, length do -- loop for i between 2 and length | ||
-- expands "where" argument | |||
skl_lookup[skills[i]] = i | names = names .. '", "' .. skills[i] | ||
skl_hdr = skl_hdr .. | skl_lookup[skills[i]] = i -- expands skill lookup table | ||
skl_hdr = skl_hdr .. '! ' .. skills[i] .. '\n' -- expands skill header | |||
end | end | ||
args['where'] = args['where'] .. names:gsub("'", "\\'") .. '")' | |||
if skl_hdr ~= | local hdr = '! style="border-top-left-radius: 10px" ' -- main header | ||
hdr = hdr .. | |||
if skl_hdr ~= '' then -- if skill header is not blank | |||
-- first cell of main header needs rowspan to accommodate skill header | |||
hdr = hdr .. 'rowspan="2" ' | |||
end | end | ||
hdr = hdr .. | hdr = hdr .. '| Method\n' .. -- pimary text of main header | ||
'! style="border-top-right-radius: 10px" '.. | |||
'colspan="' .. length .. '"| Data\n' | |||
local | -- cargo query | ||
local results = cargo.query('FEH_skill_sets', | |||
'unit, _pageName, rarity, skill', args) | |||
for _, v in ipairs(results) do -- iterates through cargo results | |||
rar = tonumber(v['rarity']) -- rarity of unit | |||
skl = skl_lookup[v['skill']] -- number corresponding to skill version | |||
for _, v in ipairs(results) do | |||
rar = tonumber(v[ | |||
skl = skl_lookup[v[ | |||
if rar > lastrar then | if rar > lastrar then -- if current rarity is greater than last | ||
lastrar = rar | lastrar = rar | ||
end | end | ||
blank[rar] = true | |||
-- if skill at given rarity has not appeared yet | |||
if avail[rar][skl] == nil then | if avail[rar][skl] == nil then | ||
avail[rar][skl] = | avail[rar][skl] = '' -- declares as empty string | ||
else | else | ||
avail[rar][skl] = avail[rar][skl] .. | avail[rar][skl] = avail[rar][skl] .. ' • ' -- adds seperator | ||
end | end | ||
-- adds unit | |||
avail[rar][skl] = avail[rar][skl] .. | avail[rar][skl] = avail[rar][skl] .. | ||
'[[' .. v['_pageName'] .. '#' .. v['unit'] .. '|' .. v['unit'] .. ']]' | |||
end | end | ||
local output = | -- initializes main output variable and temporary row variable | ||
local output = ''; local row = '' | |||
for k, v in ipairs(avail) do | local misc = { | ||
[6] = "[[Weapon Refinery|Forge]]", | |||
[7] = "[[Tempest Trials]]", | |||
[8] = "Sacred Seal quests", | |||
[9] = "[[Squad Assault]]", | |||
[10] = "[[Sacred Seal Forge]]" | |||
} | |||
for k, v in ipairs(avail) do -- iterates through avail table | |||
last = k == lastrar -- when last row is reached | |||
if | if blank[k] == true then -- if row is not empty | ||
row = | row = '|-\n' -- starts new row | ||
if | if last then -- if last row is reached | ||
row = row .. | -- adds corner rounding | ||
row = row .. '| style="border-bottom-left-radius: 10px" ' | |||
end | end | ||
row = row .. | |||
-- sets first cell of row | |||
if k > 5 then -- non-unit rows | |||
row = row .. '| ' .. misc[k] .. '\n' | |||
else -- unit rows | |||
row = row .. '| Unit (' .. ('★'):rep(k) .. ')\n' | |||
end | |||
for i = 1, length do -- iterates for each skill | |||
-- if last row and last column is reached | |||
if last and i == length then | |||
-- add corner rounding | |||
row = row .. '| style="border-bottom-right-radius: 10px" ' | |||
end | |||
row = row .. '| ' | |||
if v[i] == nil then -- if table element is empy | |||
row = row .. '—' -- sets cell to em dash | |||
else | |||
row = row .. v[i] -- sets cell to element content | |||
end | |||
row = row .. '\n' | |||
end | end | ||
output = output .. row -- adds row to output | |||
end | end | ||
end | end | ||
return hdr .. skl_hdr .. output -- final output | |||
end | end | ||
Line 140: | Line 186: | ||
local i = 0 | local i = 0 | ||
if tiers == | -- if tiers is set to + or II | ||
if tiers == '+' or tiers == 'II' then | |||
-- sets skill list as base name and base name with + or II | |||
skills[1] = name | skills[1] = name | ||
skills[2] = name .. tiers:gsub( | skills[2] = name .. tiers:gsub('II', ' II') | ||
else | else | ||
for i = 1, tiers do | for i = 1, tiers do -- iterates for number of specified tiers | ||
-- sets skill list as base name and tiers 1–# set | |||
skills[i] = name .. ' ' .. i | |||
end | end | ||
end | end | ||
end | end | ||
return p | return p |