Difference between revisions of "Module:Apt"
m (removing colored draconians from the average aptitude calculation) |
|||
| Line 73: | Line 73: | ||
local sum = 0 | local sum = 0 | ||
for _, sp in pairs(data) do | for _, sp in pairs(data) do | ||
| − | if sp.Aptitudes[skill] | + | if sp.Aptitudes[skill] then |
count = count + 1 | count = count + 1 | ||
sum = sum + sp.Aptitudes[skill] | sum = sum + sp.Aptitudes[skill] | ||
Revision as of 16:54, 10 February 2017
Documentation for this module may be created at Module:Apt/doc
local p = {}
local data = mw.loadData('Module:Table of species')
local function name_arg(frame)
local name = frame.args[1]
if not name or name == "" then
name = mw.title.getCurrentTitle().text
end
return name
end
local function is_colored_draconian(species)
return species:match(" Draconian$")
end
local function species_sorted()
local species = {}
for sp in pairs(data) do
if not is_colored_draconian(sp) then
table.insert(species, sp)
end
end
table.sort(species)
return species
end
function p.aptitude(frame)
local sp = frame.args[1]
local sk = frame.args[2]
if not sp or not sk then
return ""
end
return data[sp].Aptitudes[sk] or "N/A"
end
function p.skill_table(frame)
local skill = name_arg(frame)
local headers = {}
local species = species_sorted()
for _, sp in ipairs(species) do
local header = ("'''[[%s|%s]]'''"):format(sp, data[sp].Abbrev)
table.insert(headers, header)
end
local result = [[{| class="wikitable" border="1"
|-
|]]
result = result .. table.concat(headers, "\n|")
result = result .. "\n|-\n"
for _, sp in ipairs(species) do
result = result .. "| " .. (data[sp].Aptitudes[skill] or "N/A") .. "\n"
end
result = result .. "|}"
return result
end
function p.skill_draconian_exceptions(frame)
local skill = name_arg(frame)
local normal = data['Draconian'].Aptitudes[skill]
local result = ''
for name, species in pairs(data) do
if is_colored_draconian(name) and species.Aptitudes[skill] ~= normal then
local col = name:match("^%a*")
result = result .. '* [[Draconian#' .. col .. '|' .. col .. ' draconian]]s get ' .. species.Aptitudes[skill] .. '.\n'
end
end
return result
end
function p.skill_average(frame)
local skill = name_arg(frame)
local count = 0
local sum = 0
for _, sp in pairs(data) do
if sp.Aptitudes[skill] then
count = count + 1
sum = sum + sp.Aptitudes[skill]
end
end
return string.format("%.3f", sum / count)
end
local function aptitude_chart(skills, header)
local result = header
-- constants used by sort_key
local a_ord = string.byte('a')
local z_ord = string.byte('z')
local aa_ord = string.byte('A')
-- generates the table keys
local function sort_key(i)
local result
if i > z_ord - a_ord then
i = i - (z_ord - a_ord) - 1
result = '!' .. string.char(aa_ord + i)
else
result = '"' .. string.char(a_ord + i)
end
return result
end
local i = 0
for _, sp in ipairs(species_sorted()) do
result = result .. '|<span style="display:none;">' .. sort_key(i) .. '</span>' .. sp .. "\n"
for _, sk in ipairs(skills) do
result = result .. "||" .. (data[sp].Aptitudes[sk] or "N/A") .. "\n"
end
result = result .. "|-\n"
i = i + 1
end
result = result .. "|}"
return result
end
function p.aptitude_chart_general(frame)
local skills = {'Armour', 'Dodging', 'Stealth',
'Shields', 'Invocations', 'Evocations', 'Hit Points', 'Magic Points', 'Experience'}
local header = [=[
{| class="wikitable sortable" style="font-size:75%" border=1
! scope="col" | [[Species]]
! scope="col" | [[Armour (skill)|Arm]]
! scope="col" | [[Dodging|Ddg]]
! scope="col" | [[Stealth|Sth]]
! scope="col" | [[Shields (skill)|Shd]]
! scope="col" | [[Invocations|Inv]]
! scope="col" | [[Evocations|Evo]]
! scope="col" | [[HP]]
! scope="col" | [[MP]]
! scope="col" | [[Exp]]
|-
]=]
return aptitude_chart(skills, header)
end
function p.aptitude_chart_combat(frame)
local skills = {'Fighting', 'Short Blades', 'Long Blades', 'Maces & Flails',
'Axes', 'Polearms', 'Staves', 'Unarmed Combat', 'Throwing', 'Slings', 'Bows', 'Crossbows'}
local header = [=[
{| class="wikitable sortable" style="font-size:75%" border=1
! scope="col" | [[Species]]
! scope="col" | [[Fighting|Fgt]]
! scope="col" | [[Short Blades|SBl]]
! scope="col" | [[Long Blades|LBl]]
! scope="col" | [[Maces & Flails|M&F]]
! scope="col" | [[Axes|Axs]]
! scope="col" | [[Polearms|Pla]]
! scope="col" | [[Staves|Stv]]
! scope="col" | [[Unarmed Combat|UC]]
! scope="col" | [[Throwing|Thr]]
! scope="col" | [[Slings|Slg]]
! scope="col" | [[Bows|Bws]]
! scope="col" | [[Crossbows|Crb]]
|-
]=]
return aptitude_chart(skills, header)
end
function p.aptitude_chart_magic(frame)
local skills = {'Spellcasting', 'Conjurations', 'Hexes', 'Charms',
'Summonings', 'Necromancy', 'Translocations', 'Transmutations',
'Fire Magic', 'Ice Magic', 'Air Magic', 'Earth Magic', 'Poison Magic'}
local header = [=[
{| class="wikitable sortable" style="font-size:75%" border=1
! scope="col" | [[Species]]
! scope="col" | [[Spellcasting|Spc]]
! scope="col" | [[Conjurations|Coj]]
! scope="col" | [[Hexes|Hex]]
! scope="col" | [[Charms|Cha]]
! scope="col" | [[Summonings|Sum]]
! scope="col" | [[Necromancy|Nec]]
! scope="col" | [[Translocations|Trl]]
! scope="col" | [[Transmutations|Trm]]
! scope="col" | [[Fire Magic|Fir]]
! scope="col" | [[Ice Magic|Ice]]
! scope="col" | [[Air Magic|Air]]
! scope="col" | [[Earth Magic|Ear]]
! scope="col" | [[Poison Magic|Poi]]
|-
]=]
return aptitude_chart(skills, header)
end
return p