Anonymous

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!

Module:FEH skill availability: Difference between revisions

From Fire Emblem Wiki, your source on Fire Emblem information. By fans, for fans.
Removed unused skillList function
mNo edit summary
(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
local seals = in_args["seal1"] ~= nil or in_args["seal2"] ~= nil;
skills = {}; name = '' -- list of skill names, and base skill name
local trials = in_args["trial"] ~= nil
skills = {}; name = ""
local i = 0; num = 0; type = ''; row = ''; lastrar = 0
if in_args["skill"] ~= nil then
local skl_hdr = '' -- initializing sub-header for skill list in table
name = in_args["skill"]
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["tiers"] ~= nil then
if in_args['tiers'] ~= nil then -- if tiers field is declared
tierSet(in_args["tiers"])
tierSet(in_args['tiers']) -- calls function to fill skill list by tier
elseif in_args["skill1"] ~= nil then
skillList()
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='" .. skills[1] .. "'",
orderBy = "unit"
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
}
}
local skl_hdr = ""
if length > 1 then -- if more than 1 skill is listed
-- sets skill header; unnecessary for fewer than 1 skill
if #skills > 1 then
skl_hdr = '|-\n' ..
skl_hdr = "|-\n" ..
'! ' .. skills[1] .. '\n'
  "! " .. skills[1] .. "\n"
end
end
local i = 0
names = skills[1]
for i = 2, #skills do
for i = 2, length do -- loop for i between 2 and length
args["where"] = args["where"] .. " OR skill='" .. skills[i] .. "'"
-- expands "where" argument
skl_lookup[skills[i]] = i
names = names .. '", "' .. skills[i]
skl_hdr = skl_hdr .. "! " .. skills[i] .. "\n"
skl_lookup[skills[i]] = i -- expands skill lookup table
skl_hdr = skl_hdr .. '! ' .. skills[i] .. '\n' -- expands skill header
end
end
local hdr = "! style=\"border-top-left-radius: 10px\" "
args['where'] = args['where'] .. names:gsub("'", "\\'") .. '")'
if skl_hdr ~= "" then
local hdr = '! style="border-top-left-radius: 10px" ' -- main header
hdr = hdr .. "rowspan=\"2\" "
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 .. "| Method\n" ..
hdr = hdr .. '| Method\n' .. -- pimary text of main header
  "! style=\"border-top-right-radius: 10px\" "..
'! style="border-top-right-radius: 10px" '..
  "colspan=\"" .. #skills .. "\"| Data\n"
'colspan="' .. length .. '"| Data\n'
local avail = {
-- cargo query
[1] = {},
local results = cargo.query('FEH_skill_sets',
[2] = {},
'unit, _pageName, rarity, skill', args)
[3] = {},
[4] = {},
[5] = {}
}
local results = cargo.query("FEH_skill_sets", "unit, _pageName, rarity, skill", args);
for _, v in ipairs(results) do -- iterates through cargo results
local lastrar = 0
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["rarity"])
skl = skl_lookup[v["skill"]]
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['_pageName'] .. '#' .. v['unit'] .. '|' .. v['unit'] .. ']]'
end
end
local output = ""; local row = ""; local lastrow = false
-- initializes main output variable and temporary row variable
local output = ''; local row = ''
for k, v in ipairs(avail) do
local misc = {
lastrow = not(seals or trials) and k == lastrar
[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 #v ~= 0 then
if blank[k] == true then -- if row is not empty
row = "|-\n"
row = '|-\n' -- starts new row
if lastrow then
if last then -- if last row is reached
row = row .. "| style=\"border-bottom-left-radius: 10px\" "
-- adds corner rounding
row = row .. '| style="border-bottom-left-radius: 10px" '
end
end
row = row .. "| Unit (" .. (""):rep(k) .. ")\n"
end
-- sets first cell of row
if k > 5 then -- non-unit rows
for m, n in ipairs(v) do
row = row .. '| ' .. misc[k] .. '\n'
if lastrow and m == #skills then
else -- unit rows
row = row .. "| style=\"border-bottom-right-radius: 10px\" "
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
row = row .. "| " .. n .. "\n"
output = output .. row -- adds row to output
end
end
output = output .. row
end
end
if trials then
return hdr .. skl_hdr .. output -- final output
row = "|-\n"
if not seals then
row = row .. "| style=\"border-bottom-left-radius: 10px\" "
end
row = row .. "| [[Tempest Trials]]\n"
if not seals and #skills == 1 then
row = row .. "| style=\"border-bottom-right-radius: 10px\" "
end
row = row .. "| " .. in_args["trial"] .. "\n"
output = output .. row
end
if seals then
output = output .. sealSet(#skills)
end
output = hdr .. skl_hdr .. output
return output
end
end


Line 140: Line 186:
local i = 0
local i = 0
if tiers == "+" or tiers == "II" then
-- 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("II", " II")
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
skills[i] = name .. " " .. i
-- sets skill list as base name and tiers 1–# set
end
skills[i] = name .. ' ' .. i
end
end
 
function skillList()
local i = 1
while in_args["skill" .. i] ~= nil do
skills[i] = in_args["skill" .. i]
i = i + 1
end
end
 
function sealSet(tiers)
local row = "|-\n" ..
"| style=\"border-bottom-left-radius: 10px\" " ..
"| [[Sacred Seal Forge]]\n"
if in_args["seal1"] == nil then
row = row .. "| style=\"border: none; background: none\" |\n"
end
local i = 2
while in_args["seal" .. i] ~= nil do
if i == tiers then
row = row .. "| style=\"border-bottom-right-radius: 10px\" "
end
end
row = row .. "| " .. in_args["seal" .. i] .. "\n"
i = i + 1
end
end
return row
end
end


return p
return p