mNo edit summary |
mNo edit summary |
||
(18 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
p = {} -- p stands for package | |||
local headers = '!Level\ | local headers = '!Level\ | ||
![[Health]]\ | ![[Health]]<br />Total (increment)\ | ||
![[Armor Weight|A.W.]]\ | ![[Armor Weight|A.W.]]<br />Total (increment)\ | ||
![[Skills]]\ | ![[Skills]]\ | ||
' | ' | ||
local tableBegin = '{| class="wikitable"\ | local tableBegin = '{| class="wikitable" style="text-align: center;"\ | ||
|+ {{ | ' | ||
local tableCaption = '|+ {{ROOTPAGENAME}} Level Advancement\ | |||
' | ' | ||
Line 14: | Line 16: | ||
' | ' | ||
function p. | function p.makeHeaders( frame ) | ||
return "Not Implemented Yet!!" | |||
end | |||
function p.makeHealthOrWeight( value, multiplier ) | |||
if value == nil then return "" end | |||
local result, increment | |||
if multiplier == 0 then | |||
result = 0 | |||
increment = "0" | |||
else | |||
result = value['inc'] * multiplier | |||
increment = tostring( value['inc'] ) | |||
end | |||
return tostring( math.floor( result )) .. " (+" .. increment .. ")" | |||
end | |||
function p.makeRows( text, start, hp, aw ) | |||
local buffer, count, row, skills | |||
local health = { values } | |||
local weight = {} | |||
skills = p.splitTextWithNulls( text ) | |||
if start == nil then | if start == nil then | ||
if # | if #skills > 6 then | ||
row = 6 | row = 6 | ||
else | else | ||
Line 28: | Line 51: | ||
row = start | row = start | ||
end | end | ||
if hp == nil or #hp == 0 then | |||
health = nil | |||
else | |||
for min, max in hp:gmatch "(%d+)-%s*(%d+)" do | |||
health['min'] = tonumber( min ) | |||
health['max'] = tonumber( max ) | |||
--print("min: " .. min .. ", max: " .. max) | |||
end | |||
if health['min'] > 0 then | |||
health['max'] = health['max'] - health['min'] | |||
health['min'] = 0 | |||
end | |||
health['inc'] = health['max'] / (#skills - 1) | |||
end | |||
if aw == nil or #aw == 0 then | |||
weight = nil | |||
else | |||
for min, max in aw:gmatch "(%d+)-%s*(%d+)" do | |||
weight['min'] = tonumber( min ) | |||
weight['max'] = tonumber( max ) | |||
--print("min: " .. min .. ", max: " .. max) | |||
end | |||
if weight['min'] > 0 then | |||
weight['max'] = weight['max'] - weight['min'] | |||
weight['min'] = 0 | |||
end | |||
weight['inc'] = weight['max'] / (#skills - 1) | |||
end | |||
buffer = "" | buffer = "" | ||
for _, v in ipairs( | count = 0 | ||
buffer = buffer .. '|-' | for _, v in ipairs(skills) do | ||
buffer = buffer .. '|-' .. "\n" .. '| style="text-align:right;" |' .. tostring(row) .. "\n" | |||
buffer = buffer .. '|' .. "\n" | buffer = buffer .. '|' .. p.makeHealthOrWeight( health, count ) .. "\n" | ||
buffer = buffer .. '|' .. "\n" | buffer = buffer .. '|' .. p.makeHealthOrWeight( weight, count ) .. "\n" | ||
buffer = buffer .. '|' .. v .. "\n" | buffer = buffer .. '| style="text-align:left;" |' .. p.makeSkills(v) .. "\n" | ||
count = count + 1 | |||
row = row + 1 | row = row + 1 | ||
end | end | ||
Line 43: | Line 99: | ||
end | end | ||
function p. | function p.makeSkills( text ) | ||
local buffer = "" | |||
local skills = p.splitTextWithNulls( text, "," ) | |||
for _, v in ipairs(skills) do | |||
buffer = buffer .. "[[" .. v .. "]]<br />\n" | |||
end | |||
return string.sub(buffer, 1, -8) | |||
end | end | ||
function p.makeTable( frame ) | function p.makeTable( frame ) | ||
local buffer = | if frame.args['skills'] == nil or frame.args['skills'] == '' then | ||
local | return '' | ||
else | |||
local start = p.processStart( frame ) | |||
local caption = p.processCaption( frame ) | |||
local headers = p.processHeaders( frame ) | |||
local rows = p.makeRows( frame.args['skills'], start, frame.args['hp'], frame.args['aw'] ) | |||
return tableBegin .. caption .. headers .. rows .. tableEnd | |||
end | |||
end | |||
function p.processCaption( frame ) | |||
local buffer | |||
if frame.args['name'] == nil then | |||
buffer = tableCaption | |||
else | |||
buffer = '|+ ' .. frame.args['name'] .. "'s Level Advancement\ | |||
" | |||
end | |||
return buffer | |||
end | |||
function p.processHeaders( frame ) | |||
local buffer | |||
if frame['args']['headers'] == nil then | |||
buffer = headers | |||
else | |||
buffer = makeHeaders( frame['args']['headers'] ) | |||
end | |||
return buffer | |||
end | |||
function p.processStart( frame ) | |||
local start = nil | |||
if frame.args['start'] == nil then | if frame.args['start'] == nil then | ||
if ( frame.args['type'] ~= nil ) and ( frame.args['type'] ~= '' ) then | |||
if string.lower(frame.args['type']) == 'base' then | if string.lower(frame.args['type']) == 'base' then | ||
start = 1 | start = 1 | ||
Line 64: | Line 160: | ||
end | end | ||
return start | |||
end | end | ||
Latest revision as of 02:26, 10 November 2022
Documentation for this module may be created at Module:Role Advancement Table/doc
p = {} -- p stands for package
local headers = '!Level\
![[Health]]<br />Total (increment)\
![[Armor Weight|A.W.]]<br />Total (increment)\
![[Skills]]\
'
local tableBegin = '{| class="wikitable" style="text-align: center;"\
'
local tableCaption = '|+ {{ROOTPAGENAME}} Level Advancement\
'
local tableEnd = '|}\
'
function p.makeHeaders( frame )
return "Not Implemented Yet!!"
end
function p.makeHealthOrWeight( value, multiplier )
if value == nil then return "" end
local result, increment
if multiplier == 0 then
result = 0
increment = "0"
else
result = value['inc'] * multiplier
increment = tostring( value['inc'] )
end
return tostring( math.floor( result )) .. " (+" .. increment .. ")"
end
function p.makeRows( text, start, hp, aw )
local buffer, count, row, skills
local health = { values }
local weight = {}
skills = p.splitTextWithNulls( text )
if start == nil then
if #skills > 6 then
row = 6
else
row = 1
end
else
row = start
end
if hp == nil or #hp == 0 then
health = nil
else
for min, max in hp:gmatch "(%d+)-%s*(%d+)" do
health['min'] = tonumber( min )
health['max'] = tonumber( max )
--print("min: " .. min .. ", max: " .. max)
end
if health['min'] > 0 then
health['max'] = health['max'] - health['min']
health['min'] = 0
end
health['inc'] = health['max'] / (#skills - 1)
end
if aw == nil or #aw == 0 then
weight = nil
else
for min, max in aw:gmatch "(%d+)-%s*(%d+)" do
weight['min'] = tonumber( min )
weight['max'] = tonumber( max )
--print("min: " .. min .. ", max: " .. max)
end
if weight['min'] > 0 then
weight['max'] = weight['max'] - weight['min']
weight['min'] = 0
end
weight['inc'] = weight['max'] / (#skills - 1)
end
buffer = ""
count = 0
for _, v in ipairs(skills) do
buffer = buffer .. '|-' .. "\n" .. '| style="text-align:right;" |' .. tostring(row) .. "\n"
buffer = buffer .. '|' .. p.makeHealthOrWeight( health, count ) .. "\n"
buffer = buffer .. '|' .. p.makeHealthOrWeight( weight, count ) .. "\n"
buffer = buffer .. '| style="text-align:left;" |' .. p.makeSkills(v) .. "\n"
count = count + 1
row = row + 1
end
return buffer
end
function p.makeSkills( text )
local buffer = ""
local skills = p.splitTextWithNulls( text, "," )
for _, v in ipairs(skills) do
buffer = buffer .. "[[" .. v .. "]]<br />\n"
end
return string.sub(buffer, 1, -8)
end
function p.makeTable( frame )
if frame.args['skills'] == nil or frame.args['skills'] == '' then
return ''
else
local start = p.processStart( frame )
local caption = p.processCaption( frame )
local headers = p.processHeaders( frame )
local rows = p.makeRows( frame.args['skills'], start, frame.args['hp'], frame.args['aw'] )
return tableBegin .. caption .. headers .. rows .. tableEnd
end
end
function p.processCaption( frame )
local buffer
if frame.args['name'] == nil then
buffer = tableCaption
else
buffer = '|+ ' .. frame.args['name'] .. "'s Level Advancement\
"
end
return buffer
end
function p.processHeaders( frame )
local buffer
if frame['args']['headers'] == nil then
buffer = headers
else
buffer = makeHeaders( frame['args']['headers'] )
end
return buffer
end
function p.processStart( frame )
local start = nil
if frame.args['start'] == nil then
if ( frame.args['type'] ~= nil ) and ( frame.args['type'] ~= '' ) then
if string.lower(frame.args['type']) == 'base' then
start = 1
elseif string.lower(frame.args['type']) == 'spec' then
start = 6
end
end
else
start = tonumber( frame.args['start'] )
end
return start
end
function p.splitTextWithNulls( text, seperator )
local buffer = ''
local length = string.len(text)
local pos = 1
local results = {}
if length > 0 then
if seperator == nil then
seperator = "|"
end
while pos <= length do
local char = string.sub(text, pos, pos)
if (char ~= seperator) then
buffer = buffer .. char
else
table.insert(results, buffer)
buffer = ""
end
if (pos == length) then
table.insert(results, buffer)
end
pos = pos + 1
end
end
return results
end
return p