Module:EncounterTable: Difference between revisions
Jump to navigation
Jump to search
(Created page with "local p = {} function p.splitArgs(input, fieldlist, sep) if not input or input == '' then return end sep = sep or '%s*;;;%s*' local result = {} local inputTbl...") |
No edit summary |
||
Line 23: | Line 23: | ||
function p. | function p.start(frame) | ||
local tblName = frame.args['name'] or '' | |||
local result = {} | local result = {} | ||
local totalWeight = 0 | local totalWeight = 0 | ||
for i, row in frame.args do | for i, row in ipairs(frame.args) do | ||
local newrow = p.splitEncounterTableArgs(row) | local newrow = p.splitEncounterTableArgs(row) | ||
result[i] = newrow | result[i] = newrow | ||
totalWeight = totalWeight + tonumber(newrow['weight']) | totalWeight = totalWeight + tonumber(newrow['weight']) | ||
end | end | ||
--second pass | --second pass: first row is either an item of a table (where the output is Item from (table) | ||
for i, row in | local finalTable = {} | ||
for i, row in ipairs(table) do | |||
if row['table'] == 'none' then | |||
if row['item'] == 'none' then | |||
error('A table or item must be specified!') | |||
else | |||
finalTable['item'] = '[[' .. row['item'] .. ']]' | |||
end | |||
elseif row['item'] ~= 'none' then | |||
error('A table and item cannot be specified at the same time. Choose one ya silly') | |||
else | |||
finalTable['item'] = 'Item from [[EncounterTable:' .. row['table'] .. '|' .. row['table'] .. ']]' | |||
end | |||
-- dice tooltip quantity | |||
finalTable['quantity'] = frame:expandTemplate{title='Dice tooltip', args={row['quantity']}} | |||
finalTable['weight'] = row['weight'] | |||
-- calculate final chance | |||
finalTable['chance'] = row['weight']/totalWeight | |||
end | end | ||
--format table. | --format table. | ||
return p.formatTable( | return p.formatTable(finalTable) | ||
end | end | ||
function p.formatTable( | function p.formatTable(final) | ||
local tblheader = '<tr><th>Item</th><th>Quantity</th><th>Weight</th><th>Chance</th></tr>' | |||
return " | local tr = '' | ||
for _, v in ipairs(final) do | |||
tr = tr .. ' <tr><td>' .. v['item'] .. '</td><td>' .. v['quantity'] .. '</td><td>' .. v['weight'] .. '</td><td>' .. v['chance'] .. '</td></tr>' | |||
end | |||
return '<table class="wikitable">' .. tblheader .. tr .. '</table>' | |||
end | end | ||
return p | return p |
Revision as of 18:03, 12 November 2019
local p = {}
function p.splitArgs(input, fieldlist, sep)
if not input or input == '' then return end
sep = sep or '%s*;;;%s*'
local result = {}
local inputTbl = util_text.split(input,sep)
for i, v in ipairs(fieldlist) do
if not inputTbl[i] then
error(('Missing parameter %s - maybe wrong child template?'):format(v))
end
if inputTbl[i] ~= '' then
result[v] = inputTbl[i]
end
end
return result
end
function p.splitEncounterTableArgs(row)
local TABLE_ARGS = { 'table', 'item', 'quantity', 'weight' }
return splitArgs(row, TABLE_ARGS)
end
function p.start(frame)
local tblName = frame.args['name'] or ''
local result = {}
local totalWeight = 0
for i, row in ipairs(frame.args) do
local newrow = p.splitEncounterTableArgs(row)
result[i] = newrow
totalWeight = totalWeight + tonumber(newrow['weight'])
end
--second pass: first row is either an item of a table (where the output is Item from (table)
local finalTable = {}
for i, row in ipairs(table) do
if row['table'] == 'none' then
if row['item'] == 'none' then
error('A table or item must be specified!')
else
finalTable['item'] = '[[' .. row['item'] .. ']]'
end
elseif row['item'] ~= 'none' then
error('A table and item cannot be specified at the same time. Choose one ya silly')
else
finalTable['item'] = 'Item from [[EncounterTable:' .. row['table'] .. '|' .. row['table'] .. ']]'
end
-- dice tooltip quantity
finalTable['quantity'] = frame:expandTemplate{title='Dice tooltip', args={row['quantity']}}
finalTable['weight'] = row['weight']
-- calculate final chance
finalTable['chance'] = row['weight']/totalWeight
end
--format table.
return p.formatTable(finalTable)
end
function p.formatTable(final)
local tblheader = '<tr><th>Item</th><th>Quantity</th><th>Weight</th><th>Chance</th></tr>'
local tr = ''
for _, v in ipairs(final) do
tr = tr .. ' <tr><td>' .. v['item'] .. '</td><td>' .. v['quantity'] .. '</td><td>' .. v['weight'] .. '</td><td>' .. v['chance'] .. '</td></tr>'
end
return '<table class="wikitable">' .. tblheader .. tr .. '</table>'
end
return p