Module:Apt

From CrawlWiki
Revision as of 23:43, 18 September 2013 by CommanderC (talk | contribs)
Jump to: navigation, search

Documentation for this module may be created at Module:Apt/doc

local p = {}
 
function p.aptitude(frame)
  local data = mw.loadData('Module:Table of aptitudes')
  local sp = frame.args[1]
  local sk = frame.args[2]
  if not sp or not sk then
    return ""
  end
  if sp == "Draconian" then
    sp = "Base Draconian"
  end
  return data[sp][sk]
end

function p.skill_table(frame)
  local data = mw.loadData('Module:Table of aptitudes')
  local skill = frame.args[1]
  local species = {'Human',  'Centaur', 'Demigod', 'Demonspawn',
   'Base Draconian', 'Deep Dwarf', 'Deep Elf', 'High Elf',
   'Sludge Elf', 'Felid', 'Ghoul', 'Halfling', 'Kobold', 'Merfolk', 
   'Minotaur', 'Mummy', 'Naga', 'Octopode', 'Ogre', 'Hill Orc',
   'Spriggan', 'Tengu', 'Troll', 'Vampire'}
  local result = [=[
{| class="wikitable" border="1"
|-
|'''[[Human|Hu]]'''
|'''[[Centaur|Ce]]'''
|'''[[Demigod|Dg]]'''
|'''[[Demonspawn|Ds]]'''
|'''[[Draconian|Dr]]'''
|'''[[Deep Dwarf|DD]]
|'''[[Deep Elf|DE]]'''
|'''[[High Elf|HE]]'''
|'''[[Sludge Elf|SE]]'''
|'''[[Felid|Fe]]'''
|'''[[Ghoul|Gh]]'''
|'''[[Halfling|Ha]]'''
|'''[[Kobold|Ko]]'''
|'''[[Merfolk|Mf]]'''
|'''[[Minotaur|Mi]]'''
|'''[[Mummy|Mu]]'''
|'''[[Naga|Na]]'''
|'''[[Octopode|Op]]'''
|'''[[Ogre|Og]]'''
|'''[[Hill Orc|HO]]'''
|'''[[Spriggan|Sp]]'''
|'''[[Tengu|Te]]'''
|'''[[Troll|Tr]]'''
|'''[[Vampire|Vp]]'''
|-
]=]
  for _, sp in ipairs(species) do
    result = result .. "| " .. data[sp][skill] .. "\n"
  end
  result = result .. "|}"
  return result
end

function p.aptitude_chart_general(frame)
  local data = mw.loadData('Module:Table of aptitudes')
  local skill = frame.args[1]
  local species = {'Human',  'Centaur', 'Demigod', 'Demonspawn',
   'Base Draconian', 'Deep Dwarf', 'Deep Elf', 'High Elf',
   'Sludge Elf', 'Felid', 'Ghoul', 'Halfling', 'Kobold', 'Merfolk', 
   'Minotaur', 'Mummy', 'Naga', 'Octopode', 'Ogre', 'Hill Orc',
   'Spriggan', 'Tengu', 'Troll', 'Vampire'}
  local skills = {'Armour', 'Dodging', 'Stealth', 'Stabbing',
   'Shields', 'Traps', 'Invocations', 'Evocations', 'HP', 'MP', 'Experience'}
  local result = [=[
{| 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" | [[Stabbing|Stb]]
! scope="col" | [[Shields (skill)|Shd]]
! scope="col" | [[Traps|Trp]]
! scope="col" | [[Invocations|Inv]]
! scope="col" | [[Evocations|Evo]]
! scope="col" | [[HP]]
! scope="col" | [[MP]]
! scope="col" | [[Exp]]
|-
]=]
  -- 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
  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) do
    result = result .. '|<span style="display:none;">' .. sort_key(i) .. '</span>' .. sp .. "\n"
    for _,sk in ipairs(skills) do
      result = result .. "||" .. data[sp][sk] .. "\n"
    end
    result = result .. "|-\n"
    i = i + 1
  end
  result = result .. "|}"
  return result
end

return p