Module:Stats
Jump to navigation
Jump to search
Documentation
[purge]
Displays stats for units. Call with Template:Stats, code is in Module:Stats.
Parameters
inline
: If not empty stats will be shown in one line, else in a table formathp
: Healthma
: Manash
: Shieldpd
: Physical Defensemd
: Magical Defensedm
: Damagecr
: Critical Chancera
: Rangecd
: Cooldownar
: Areakb
: Knockbacksp
: Speeddu
: Durationrg
: Ragegr
: Greedrr
: Rerollba
: Banishcu
: Curse
Examples
{{stats|hp=33|dm=8|sh=4|cr=2%|pd=20%|md=10%}}
8 | |||
33 | |||
4 | |||
2 | % | ||
20 | % | ||
10 | % |
{{stats|hp=20.5|ra=8.33 m|cd=1.2 s|cr=2%}}
20 | .5 | ||
2 | % | ||
1 | .2 | s | |
8 | .33 | m |
{{stats|hp=33|dm=8|sh=4|cr=2%|pd=20%|md=10%|inline=1}}
{{stats | first = Base stats | second = Maxed<br/>Base stats | dm = 5 | dm2 = 6.25 | dmGain = 1 | hp = 11 | hp2 = 14.3 | hpGain = 1 | sh = 13 m | sh2 = 16.9 m | shGain = 2 | cr = 5% | cr2 = 5.63% | crGain = 1 | pd = 0% | pd2 = 15% | pdGain = 3 | md = 0% | md2 = 15% | mdGain = 3 }}
Base stats | Maxed Base stats | ||||||
5 | 6 | .25 | |||||
11 | 14 | .3 | |||||
13 | m | 16 | .9 | m | |||
5 | % | 5 | .63 | % | |||
0 | % | 15 | % | ||||
0 | % | 15 | % |
local p = {}
local statNames = require ('Module:Stats/StatNames')
function p.stats(f)
return p.create(f:getParent().args)
end
function p.create(args)
local usedStats = {}
local useInline = args.inline ~= nil
local useInlineBlock = args.inlineBlock ~= nil
local useGain = args.first ~= nil and args.second ~= nil
for _, statNames in ipairs(statNames) do
local statAbbreviation = statNames[1]
local statValue = args[statAbbreviation]
if statValue ~= nil and statValue ~= '' then
local statName = statNames[2]
local secondValue = ''
local gain = ''
if useGain then
secondValue = args[statAbbreviation..'2']
gain = args[statAbbreviation..'Gain']
table.insert(usedStats, p.statEntryFormatGain(statName, statValue, secondValue, gain))
else
table.insert(usedStats, p.statEntryFormat(statName, statValue, useInline, true))
end
end
end
if #usedStats == 0 then
return ''
end
if useInline then
-- one line, separated by bullet points
return table.concat(usedStats, ' • ')
end
-- table format
if useGain then
return '<table class="plain-table" style="text-align:left; display:inline-block; border-spacing: 0; border: 2px solid gray; padding: 1em">'..
'<tr><td></td><td colspan=3 style="text-align: center; font-weight: bold">'..args.first..'</td><td></td><td colspan=3 style="text-align: center; font-weight: bold">'..args.second..'</td></tr>'..
'<tr>'..table.concat(usedStats, '</tr><tr>')..'</tr></table>'
end
local inlineBlockStyle = ''
if useInlineBlock then inlineBlockStyle = ' display:inline-block;' end
return '<table class="plain-table" style="text-align:left; border-spacing: 0;'..inlineBlockStyle..'"><tr>'..
table.concat(usedStats, '</tr><tr>')..'</tr></table>'
end
function p.statEntryFormat(name, val, inline, withIcon)
if inline then
return '[[File:'..name..'.png|link='..name..'|16x16px]] '..val
else
local wholeNumberPart, decimalPart, unit = string.match(val, '^(%d*)(%.?%d*) ?(.*)$')
local iconColumn = ''
if withIcon then
iconColumn = '<td style="padding-right: 0.3em;">[[File:'..name..'.png|link='..name..'|16x16px]]</td>'
end
return iconColumn..'<td style="text-align: right; padding: 0">'..
wholeNumberPart..'</td><td style="padding: 0">'..decimalPart..'</td><td style="padding-left: 0.2em">'..unit..'</td>'
end
end
function p.statEntryFormatGain(name, val, secondVal, gain)
local gainCell = ''
gain = tonumber(gain)
if gain ~= nil and gain >= 0 then
gainCell = '<td style="padding: 0 1em;">[[File:StatGain'..gain..'.png|12px]]</td>'
end
return p.statEntryFormat(name, val, false, true)..
gainCell..
p.statEntryFormat('', secondVal, false, false)
end
return p