Module:EncounterTable: Difference between revisions

From Caves of Qud Wiki
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.main(frame)
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 to calculate chance--
  --second pass: first row is either an item of a table (where the output is Item from (table)
   for i, row in result do
  local finalTable = {}
     result['chance'] = row['weight']/totalWeight
   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(result)
   return p.formatTable(finalTable)
end
end


function p.formatTable(table)
function p.formatTable(final)
--format the full table. only item OR table can be defined at once.
  local tblheader = '<tr><th>Item</th><th>Quantity</th><th>Weight</th><th>Chance</th></tr>'
   return "place holder"
  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