Module:SkillBox
Jump to navigation
Jump to search
DescriptionTemplate to make a table showing essential information and effects of a skill. Usage{{#invoke:SkillBox|create|parameter1|parameter2|parameter3
Valid parameters:
id The ID of this skill. If filled in, the Show/Hide all levels button will be made available.
Should only be used for 5th and 6th job skills, otherwise add the id as a comment above the skillbook, i.e. <!--id-->
skillName Skill icon and name. If the skill has a separate page detailing its effects at all levels, link to that.
skillType Active or Passive
reqLv Add the skill's Level Requirement
Leave blank if not applicable.
masterLevel Maximum Level of the skill
combatOrders Whether this skill is affected by Combat Orders.
vSkill Whether it is a V Skill. If so, it will display 5 extra levels.
description Skill's description
formula Formula used by skill. Should be same formula as what is used in the detailed page. Will display values of Level 1 and
masterLevel
Note, if adding a negative value, the expression must be converted to its negative equivalent.
Example: -{#expr:30+x} -> {#expr:-30-x}
This is due to HTML parsing misinterpreting the prefixed dash.
Example{{#invoke:SkillBox|create <!--172121000-->
|id=172121000
|skillName=[[File:Skill Strike (4th Job).png]] [[Strike#4th Job|Strike]]
|skillType=Active
|reqLv=
|masterLevel=30
|vSkill=
|combatOrders=1
|description=Pan swings his paws forward to deal damage.<br />Required Skill: <span class="darkorange-text">Strike (3rd Job) Lv. 20</span>
|formula=MP Cost: {#expr:35+floor(x/6)}, Max Enemies Hit: 7, Damage: {#expr:225+3*x}%, Number of Attacks: 6
}}
|
Output:
| Active | ||
|---|---|---|
| Master Level | 30 | |
| Description | Pan swings his paws forward to deal damage. Required Skill: Strike (3rd Job) Lv. 20 | |
| Level | 1 | MP Cost: 35, Max Enemies Hit: 7, Damage: 228%, Number of Attacks: 6 |
| 30 | MP Cost: 40, Max Enemies Hit: 7, Damage: 315%, Number of Attacks: 6 | |
| MP Cost: 40, Max Enemies Hit: 7, Damage: 318%, Number of Attacks: 6 | ||
| MP Cost: 40, Max Enemies Hit: 7, Damage: 321%, Number of Attacks: 6 | ||
| Active | ||
|---|---|---|
| Master Level | 30 | |
| Description | Pan swings his paws forward to deal damage. Required Skill: Strike (3rd Job) Lv. 20 | |
| Level | 1 | MP Cost: 35, Max Enemies Hit: 7, Damage: 228%, Number of Attacks: 6 |
| 2 | MP Cost: 35, Max Enemies Hit: 7, Damage: 231%, Number of Attacks: 6 | |
| 3 | MP Cost: 35, Max Enemies Hit: 7, Damage: 234%, Number of Attacks: 6 | |
| 4 | MP Cost: 35, Max Enemies Hit: 7, Damage: 237%, Number of Attacks: 6 | |
| 5 | MP Cost: 35, Max Enemies Hit: 7, Damage: 240%, Number of Attacks: 6 | |
| 6 | MP Cost: 36, Max Enemies Hit: 7, Damage: 243%, Number of Attacks: 6 | |
| 7 | MP Cost: 36, Max Enemies Hit: 7, Damage: 246%, Number of Attacks: 6 | |
| 8 | MP Cost: 36, Max Enemies Hit: 7, Damage: 249%, Number of Attacks: 6 | |
| 9 | MP Cost: 36, Max Enemies Hit: 7, Damage: 252%, Number of Attacks: 6 | |
| 10 | MP Cost: 36, Max Enemies Hit: 7, Damage: 255%, Number of Attacks: 6 | |
| 11 | MP Cost: 36, Max Enemies Hit: 7, Damage: 258%, Number of Attacks: 6 | |
| 12 | MP Cost: 37, Max Enemies Hit: 7, Damage: 261%, Number of Attacks: 6 | |
| 13 | MP Cost: 37, Max Enemies Hit: 7, Damage: 264%, Number of Attacks: 6 | |
| 14 | MP Cost: 37, Max Enemies Hit: 7, Damage: 267%, Number of Attacks: 6 | |
| 15 | MP Cost: 37, Max Enemies Hit: 7, Damage: 270%, Number of Attacks: 6 | |
| 16 | MP Cost: 37, Max Enemies Hit: 7, Damage: 273%, Number of Attacks: 6 | |
| 17 | MP Cost: 37, Max Enemies Hit: 7, Damage: 276%, Number of Attacks: 6 | |
| 18 | MP Cost: 38, Max Enemies Hit: 7, Damage: 279%, Number of Attacks: 6 | |
| 19 | MP Cost: 38, Max Enemies Hit: 7, Damage: 282%, Number of Attacks: 6 | |
| 20 | MP Cost: 38, Max Enemies Hit: 7, Damage: 285%, Number of Attacks: 6 | |
| 21 | MP Cost: 38, Max Enemies Hit: 7, Damage: 288%, Number of Attacks: 6 | |
| 22 | MP Cost: 38, Max Enemies Hit: 7, Damage: 291%, Number of Attacks: 6 | |
| 23 | MP Cost: 38, Max Enemies Hit: 7, Damage: 294%, Number of Attacks: 6 | |
| 24 | MP Cost: 39, Max Enemies Hit: 7, Damage: 297%, Number of Attacks: 6 | |
| 25 | MP Cost: 39, Max Enemies Hit: 7, Damage: 300%, Number of Attacks: 6 | |
| 26 | MP Cost: 39, Max Enemies Hit: 7, Damage: 303%, Number of Attacks: 6 | |
| 27 | MP Cost: 39, Max Enemies Hit: 7, Damage: 306%, Number of Attacks: 6 | |
| 28 | MP Cost: 39, Max Enemies Hit: 7, Damage: 309%, Number of Attacks: 6 | |
| 29 | MP Cost: 39, Max Enemies Hit: 7, Damage: 312%, Number of Attacks: 6 | |
| 30 | MP Cost: 40, Max Enemies Hit: 7, Damage: 315%, Number of Attacks: 6 | |
| MP Cost: 40, Max Enemies Hit: 7, Damage: 318%, Number of Attacks: 6 | ||
| MP Cost: 40, Max Enemies Hit: 7, Damage: 321%, Number of Attacks: 6 | ||
-- <nowiki>
-- Module:SkillBox
-- A module for showing max level effects of skills
-- HT
local SkillBox = {}
local getArgs = require('Module:Arguments').getArgs
function SkillBox.createTable(args)
local frame = mw.getCurrentFrame()
local ret = {}
local skillId = tonumber(args['id']) or 0 -- Skill ID
local skillName = tostring(args['skillName']) -- Name of skill
local skillType = tostring(args['skillType']) -- Active or Passive
local reqLv = tostring(args['reqLv'] or 0) -- Required level
local masterLevel = tonumber(args['masterLevel']) -- Master Level
local combatOrders = tonumber(args['combatOrders']) or 0 -- Affected by Combat Orders?
local vSkill = tonumber(args['vSkill']) or 0 -- Is V skill?
local description = tostring(args['description']) -- Skill description
local formula = tostring(args['formula'] or '') -- Formula
local tableExpandable = skillId > 0 and masterLevel > 2
if tableExpandable then
ret[#ret + 1] = '<div width="100%" style="max-width:1280px">' ..
'<span class="mw-customtoggle-tblF' .. skillId ..
' mw-customtoggle-tblS' .. skillId ..
' wds-button" style="border:solid grey 2px;border-radius:6px;padding:5px;float:right;">' ..
'Show/hide all levels</span></div>\n'
end
ret[#ret + 1] = SkillBox.createTableHeader(skillType, skillName, reqLv, description, masterLevel, skillId, tableExpandable, true, vSkill, combatOrders)
ret[#ret + 1] = SkillBox.createRow(formula, masterLevel, tableExpandable, true, vSkill, combatOrders)
if tableExpandable then
ret[#ret + 1] = SkillBox.createTableHeader(skillType, skillName, reqLv, description, masterLevel, skillId, tableExpandable, false, vSkill, combatOrders)
ret[#ret + 1] = SkillBox.createRow(formula, masterLevel, tableExpandable, false, vSkill, combatOrders)
end
return table.concat(ret)
end
function SkillBox.createTableHeader(skillType, skillName, reqLv, description, masterLevel, skillId, tableExpandable, isFirstTable, vSkill, combatOrders)
local ret = {}
ret[#ret + 1] = '{|class="wikitable'
if tableExpandable then
if isFirstTable then
ret[#ret + 1] = ' mw-collapsible" id="mw-customcollapsible-tblF' .. skillId .. '"'
else
ret[#ret + 1] = ' mw-collapsible mw-collapsed" id="mw-customcollapsible-tblS' .. skillId .. '"'
end
else
ret[#ret + 1] = '"'
end
ret[#ret + 1] = ' width="100%" style="text-align:left;max-width:1280px;"\n' ..
'|-\n' ..
'!style="font-size:12px"|' .. skillType ..
'\n!colspan="2" width="20%"|' .. skillName
if reqLv ~= '0' and reqLv ~= '' then
ret[#ret + 1] =
'\n|-\n' ..
'!colspan="2" width="20%"|Level Requirement\n' ..
'|width="80%"|' .. reqLv
end
ret[#ret + 1] =
'\n|-\n' ..
'!colspan="2" width="20%"|Master Level\n' ..
'|' .. masterLevel .. '\n' ..
'|-\n' ..
'!colspan="2" width="20%"|Description\n' ..
'|width="80%"|' .. description
ret[#ret + 1] = '\n|-\n'
if masterLevel == 1 then
ret[#ret + 1] = '!width="10%"|Level\n'
else
if tableExpandable then
if isFirstTable then
ret[#ret + 1] = '!rowspan="' .. (2 + vSkill + combatOrders * 2) .. '" width="10%"|Level\n'
else
ret[#ret + 1] = '!rowspan="' .. (masterLevel + vSkill * 5 + combatOrders * 2) .. '" width="10%"|Level\n'
end
else
ret[#ret + 1] = '!rowspan="' .. (2 + vSkill + combatOrders * 2) .. '" width="10%"|Level\n'
end
end
return table.concat(ret)
end
function SkillBox.createRow(formula, masterLevel, tableExpandable, isFirstTable, vSkill, combatOrders)
local frame = mw.getCurrentFrame()
local ret = {}
local levelList = {}
if isFirstTable then
if masterLevel ~= 1 then
if vSkill > 0 then
levelList = {1, masterLevel, masterLevel + 5}
else
if combatOrders > 0 then
levelList = {1, masterLevel, masterLevel + 1, masterLevel + 2}
else
levelList = {1, masterLevel}
end
end
else
if combatOrders > 0 then
levelList = {1, 2, 3}
else
levelList = {1}
end
end
else
for i = 1, (masterLevel + vSkill * 5 + combatOrders * 2) do
levelList[i] = i
end
end
for _, i in ipairs(levelList) do
local parsedFormula = formula:gsub(
"{#expr:(.-)}",
function(expr)
return "{{#expr:" .. expr:gsub("x", i) .. "}}"
end
)
local hasLogarithm = (parsedFormula:find("log") ~= 'nil')
if hasLogarithm then
-- log, one or more 0-9 chars, open parenthesis, one or more 0-9 chars, close parenthesis
parsedFormula = parsedFormula:gsub(
"log[%d]+%([%d]+%)",
function(logarithmString)
local baseIndex, _ = logarithmString:find("log") + 3
local openParenthesisIndex = logarithmString:find("%(")
local closeParenthesisIndex = logarithmString:find("%)")
local base = tonumber(logarithmString:sub(baseIndex, openParenthesisIndex - 1))
local xVal = tonumber(logarithmString:sub(openParenthesisIndex + 1, closeParenthesisIndex - 1))
return tostring(math.floor(math.log10(xVal) / math.log10(base)))
end
)
end
if combatOrders > 0 and i > masterLevel then
if i == masterLevel + 1 then
ret[#ret + 1] = '!width="10%"|[[File:Skill Combat Orders.png|24px|link=Decent Combat Orders]] ' .. tostring(i) .. '\n|'
else
ret[#ret + 1] = '!width="10%"|[[File:Skill Combat Orders.png|24px|link=Combat Orders]] ' .. tostring(i) .. '\n|'
end
else
ret[#ret + 1] = '!width="10%"|' .. tostring(i) .. '\n|'
end
ret[#ret + 1] = frame:preprocess(parsedFormula)
if i ~= (masterLevel + vSkill * 5 + combatOrders * 2) then
ret[#ret + 1] = '\n|-\n'
end
end
ret[#ret + 1] = '\n|}\n'
return table.concat(ret)
end
function SkillBox.create(frame)
local args = getArgs(frame)
return SkillBox.createTable(args)
end
function SkillBox.main(frame)
local args = frame:getParent().args
return SkillBox.createTable(args)
end
return SkillBox
-- </nowiki>