Star Trek Wrath of Gems Wikia
Advertisement

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

-- eventtables module
-- inside: [[Category:Modules]] using this line once...
-- has some functions to create wikitables more easily than mw.html.create...

-- <pre>

local p = {}
local getargs = require('Dev:Arguments').getArgs
local utils = require('Module:Utilities')
local glbls = require('Module:Globals')

-- semi-dummy statement because 'out' is going to hold the final html-object...
glbls.out = true
glbls.rows = true
glbls.passStr = ''
glbls.sortable = 'sortable'

local StoryTable = { 'Lvl #', 'Mission Title', 'Level Type CrewFight/ Diplomacy/ ShipBattle', 
                    'Storyline', '#Prizes' }
local StorylineTable = { 'Lvl #', 'Mission Title', 'Lvl Type C/D/S', 
                    'Storyline', '#E', '#N', '#L', }
--local StorylineTable = { 'Lvl #', 'Mission Title', 'Lvl Type C/D/S',
--        'Mission Enemy(ies)', 'Storyline', '#E', '#N', '#L', }
local StoryEnemyTable = { 'Lvl #', 'Mission Title', 'CrewFight/ Diplomacy/ ShipBattle', 
                    'EnemyDetails', 'Enemy(ies)', }
local EnemiesTable = { 'Lvl #', 'Mission Title', 'Type C/D/S', 
                    'Easy', 'Normal', 'Legendary', 'Enemy(ies)', }
--local ScoringTable = { 'Lvl #', 'Mission Title', 'Mission Points', 'Total # Prizes', 
local ScoringTable = { 'Mission #', 'Mission Points', 'Total # Prizes', 
                    '1st Win Prize', '2nd Win Prize', '3rd Win Prize', 
                    '4th Win Prize', }
local ScoringStoryTable = { 'Mission #',      'Total # Prizes', '1st Win Prize', 
                    '2nd Win Prize', '3rd Win Prize', '4th Win Prize', }
local RewardsPointsTable = { 'Row #', 'Easy Points', 'Easy Rewards', 
                    'Normal Points', 'Normal Rewards',
                    'Legendary Points', 'Legendary Rewards', }
local RewardsTables = { 'Points', 'Rewards',  }
local RewardsEasy = { 100,  '{{P|b}}',          300,    '{{P|d|150|x}}',
                    600,    '{{P|w|2|w}}',      1000,   '{{P|h|5|h}}',
                    1500,   '{{P|g|15|g}}',     2100,   '[[tbd...]]',
                    2800,   '{{P|d|200|x}}',    3600,   '[[tbd...]]',
                    4500,   '{{P|d|250|x}}',    5500,   '{{P|g|45|g}}',
                    6600,   '{{P|d|500|x}}',    7800,   '{{P|b|2}}',
                    9100,   '{{P|d|1000|x}}',   10500,  '{{P|g|75|g}}',
                    12000,  '{{P|d|1500|x}}',   13600,  '{{P|r}}',
                    15300,  '{{P|g|150|g}}',    17100,  '[[tbd...]]',
                    19000,  '[[tbd...]]',     }
local RewardsNormal = { 200,    '{{P|b}}',      600,    '{{P|d|300|x}}',
                    1200,       '{{P|w|4}}',    2000,   '{{P|h|10}}',
                    3000,       '{{P|g|25|g}}', 4200,   '[[tbd...]]',
                    5600,       '{{P|d|400}}',  7200,   '[[tbd...]]',
                    9000,       '{{P|d|500|x}}',  11000, '{{P|g|75|g}}',
                    13200,      '{{P|d|1000|x}}', 15600, '{{P|b|3}}',
                    18200,      '{{P|d|2000|x}}', 21000, '{{P|g|150|g}}',
                    24000,      '{{P|d|3000|x}}', 30000, '{{P|r}}',
                    35000,      '{{P|g|300|g}}',    45000,  '[[tbd...]]',
                    50000,      '[[tbd...]]',     }
local RewardsLegendary = { 300,    '{{P|b}}',   900,    '{{P|d|600|x}}',
                    1800,   '{{P|w|8}}',        3000,   '{{P|h|20}}',
                    4500,   '{{P|g|50|g}}',     6300,   '[[tbd...]]',
                    8400,   '{{P|d|800}}',      10800,  '[[tbd...]]',
                    13500,  '{{P|d|1000|x}}',   16500,  '{{P|g|150|g}}',
                    19800,  '{{P|d|2000|x}}',   23400,  '{{P|r}}',
                    27300,  '{{P|d|4000|x}}',   31500,  '{{P|g|300|g}}',
                    40000,  '{{P|d|6000|x}}',   55000,  '{{P|r|2}}',
                    70000,  '{{P|g|600|g}}',    85000,  '[[tbd...]]',
                    90000,'[[tbd...]]',       }
local RewardsPositionTable = { 'Row #', 
                'Solo Posn', 'Easy Solo Rewards', 
                'Normal Solo Rewards', 'Legendary Solo Rewards',
                'Team Posn', 'Easy Team Rewards', 
                'Normal Team Rewards', 'Legendary Team Rewards', }
local PositionsTable = { 'Positions Solo Players', 
                        'Rewards earned Solo', 
                        'Positions Team Alliances', 
                        'Rewards earned Team',   }
local Positions = { '1 - 2',                '1 - 2',
                    '3 - 10',               '3 - 5',
                    '11 - 20',              '6 - 10',
                    '21 - 50',              '11 - 20',
                    '51 - 100',             '21 - 35',
                    '101 - 150',            '36 - 50',
                    '151 - 300',            '51 - 70',
                    '301 - 800',            '71 - 90',
                    '801 - 1000',           '91 - 120',
                    '1001 - 2000',          '121 - 150',
                    '2,001 - 5,000',        '151 - 200',
                    '5,001 - 10,000',       '201 - 1000',
                    'lower than 10,000',    'lower than 1000',  }
--                    '5,001 - 10,000',       '201 - 500',
--                    'lower than 10,000',    'lower than 500',  }

glbls.choices = StorylineTable
glbls.numPrzEasy = 0
glbls.numPrzNorm = 0
glbls.numPrzLegd = 0
glbls.numBoni = 0
glbls.numLvls = 0

local function updateFirstNumbers(mtx,locBs,which)
    -- now we have to 'undo' the first-column-numbering for bonuses
    -- routine goes up the triangles of bonus-levels doing each subtraction
    local newLvl,numB,curB
    tmpNM = which[1]
    for i,v in ipairs(locBs) do
        curB = v
        for m=curB,#mtx do
            numB = i - 1
            newLvl = m - numB
            mtx[m][tmpNM] = newLvl
            if m == curB then
                mtx[m][tmpNM] = newLvl - 0.5
            else
                mtx[m][tmpNM] = newLvl - 1
            end
        end
    end
    return mtx
end


local function addHeader(namtbl)
	local row = mw.html.create('tr')
	local usecols = {}
    if not namtbl or type(namtbl)~='string' then
        usecols = glbls.choices
    else
        if namtbl == 'Enemies' then
            usecols = EnemiesTable
        elseif namtbl == 'RewardsPoints' then
            usecols = RewardsPointsTable
        elseif namtbl == 'RewardsPosition' or
                namtbl == 'RewardsEasy' or
                namtbl == 'RewardsNormal' or
                namtbl == 'RewardsLegendary' then
            --usecols = RewardsPositionTable
            usecols = PositionsTable
        elseif namtbl == 'Scoring' or
                namtbl == 'ScoringEasy' or
                namtbl == 'ScoringNormal' or
                namtbl == 'ScoringLegendary' then
            usecols = ScoringTable
        elseif namtbl == 'StoryEnemy' then
            usecols = StoryEnemyTable
        elseif namtbl == 'ScoringStory' then
            usecols = ScoringStoryTable
        elseif namtbl == 'Story' then
            usecols = StoryTable
        else
            usecols = StorylineTable
        end
    end
    -- store-back out...
    glbls.choices = usecols
	-- the :tag adds nodes-to-builder (row) and returns updated-instance (row)
    for _,c in ipairs(usecols) do
        if c=='Mission Title' then
            row
                :tag('th')
                    --:css('text-align','left;')
                    :css('width','35%')
                    :wikitext(c):done()
        elseif c=='Storyline' or c=='Enemy(ies)' or c=='EnemyDetails' then
            row
                :tag('th')
                    --:css('text-align','left;')
                    :css('width','45%')
                    :wikitext(c):done()
        elseif c=='Mission Enemy(ies)' then
            row
                :tag('th')
                    --:css('text-align','left;')
                    :css('width','15%')
                    :wikitext(c):done()
        else
            row
                --:tag('th'):wikitext(utils.TitleCase(c)):done()
                :tag('th')
                    :attr('scope','col')
                    :css('text-align','center;')
                    :wikitext(c):done()
        end
    -- endfor
    end
	return row
end


local function addParagraph(str,typ)
        local pa
        if typ ~= nil then
            pa = mw.html.create(typ)
        else
            pa = mw.html.create('p')
        end
        
            pa
                --:tag('th'):wikitext(utils.TitleCase(c)):done()
                --:tag('th')
                    :css('text-align','left;')
                    :wikitext(str):done()
        return pa
end

local function addRow(tbl,useMulticol)
	local row = mw.html.create('tr')
	-- the :tag adds nodes-to-builder (row) and returns updated-instance (row)
	local origCols,j,datMulti,colMulti
    if useMulticol ~= nil then 
        -- currently only do this on mission-points-rows...
        --origCols = 4 
        origCols = useMulticol
        datMulti = {}
        colMulti = {}
    else
        origCols = 0
    end
	local dat
    for i,c in ipairs(glbls.choices) do
        dat = tbl[c]
            row
                :css('text-align','center;')
                :tag('td'):wikitext(dat):done()
--        end
    end
    return row
end



local function parseArgsRewardsPoints()
    local keys,rewards,points
    local titles,mtx
    keys = {}
    points = {}
    rewards = {}
    mtx = {}
    glbls.choices = RewardsPointsTable
    titles = RewardsPointsTable
    -- glbls.data is a table holding 'what' and sets-of-three things
    for i,v in ipairs(glbls.data) do
        j = (i-1) % 3
        if j==1 then keys[#keys+1] = tostring(v) end
        if j==2 then points[#points+1] = tostring(v) end
        if i ~= 1 and j==0 then rewards[#rewards+1] = tostring(v) end
    end
    if (#keys ~= #points) or (#keys ~= #rewards) then return nil end
    mtx = {}
    for m=1,#keys do mtx[m]={} end
    -- need to split-apart points/rewards into 3-cols...
    for i,v in ipairs(keys) do
        local mkPts,mkRwds
        -- use code: // for split-pattern...
        mkPts = utils.splitStrPat(points[i],'%/%/')
        mkRwds = utils.splitStrPat(rewards[i],'%/%/')
        mtx[i][titles[1]] = v
        mtx[i][titles[2]] = mkPts[1]
        mtx[i][titles[3]] = mkRwds[1]
        mtx[i][titles[4]] = mkPts[2]
        mtx[i][titles[5]] = mkRwds[2]
        mtx[i][titles[6]] = mkPts[3]
        mtx[i][titles[7]] = mkRwds[3]
    end
    return mtx
end

local function parseArgsRewardsPosition(which)
    local keys,rewards,solo,team,rse,rsn,rsl,rte,rtn,rtl
    local tmpNM,tmpVAL
    local titles,mtx
    keys = {}
    solo = {}
    rse = {}
    rsn = {}
    rsl = {}
    rte = {}
    rtn = {}
    rtl = {}
    team = {}
    mtx = {}
    --glbls.choices = RewardsPositionTable
    glbls.choices = PositionsTable
    titles = PositionsTable
    --titles = RewardsPositionTable
    --rewards = RewardsPositionTable
    -- glbls.data is a table holding 'what' and sets-of-seven things
    for i,v in ipairs(glbls.data) do
        j = (i-1) % 7
        if j==1 then keys[#keys+1] = tostring(v) end
        --if j==2 then solo[#solo+1] = tostring(v) end
        if j==2 then rse[#rse+1] = tostring(v) end
        if j==3 then rsn[#rsn+1] = tostring(v) end
        if j==4 then rsl[#rsl+1] = tostring(v) end
        if j==5 then rte[#rte+1] = tostring(v) end
        if j==6 then rtn[#rtn+1] = tostring(v) end
        --if i ~= 1 and j==0 then team[#team+1] = tostring(v) end
        if i ~= 1 and j==0 then rtl[#rtl+1] = tostring(v) end
    end
    if (#keys ~= #rse) or (#keys ~= #rtl) then return nil end
    mtx = {}
    --for m=1,#keys do mtx[m]={} end
    tmpVAL = #Positions/2
    for m=1,tmpVAL do mtx[m]={} end
    --for m=1,#keys do mtx[m]={} end
    for i,v in ipairs(keys) do
        mtx[i][titles[1]] = Positions[2*i-1]
        mtx[i][titles[3]] = Positions[2*i]
        if which=='easy' then
                mtx[i][titles[2]] = rse[i]
                mtx[i][titles[4]] = rte[i]
        elseif which=='normal' then
                mtx[i][titles[2]] = rsn[i]
                mtx[i][titles[4]] = rtn[i]
        elseif which=='legendary' then
                mtx[i][titles[2]] = rsl[i]
                mtx[i][titles[4]] = rtl[i]
        else
            -- unused ?
                mtx[i][titles[2]] = "?"
                mtx[i][titles[4]] = "?"
        end
    end
    -- fill-out the table...
    --if #keys < #Positions/2 then
    --    for i = #keys+1, #Positions/2 do
    if #keys < tmpVAL then
        for i = #keys+1,tmpVAL do
                mtx[i][titles[1]] = Positions[2*i-1]
                mtx[i][titles[3]] = Positions[2*i]
                mtx[i][titles[2]] = "'''''-nothing-'''''"
                mtx[i][titles[4]] = "'''''-nothing-'''''"
        end
    end
    glbls.rows = utils.tableShallowCopy(mtx)
    return mtx
end



local function parseArgsEnemies()
    local keys,titles,nme,de,dn,dl
    local j,chkBonus,locBs
    local rows,mtx,tmpNM,tmpVAL
    keys = {}
    titles = {}
    nme = {}
    de = {}
    dn = {}
    dl = {}
    locBs = {}
    -- glbls.data is a table holding 'what' and sets-of-six things
    for i,v in ipairs(glbls.data) do
        j = (i-1) % 6
        if j==1 then keys[#keys+1] = tostring(v) end
        if j==2 then titles[#titles+1] = tostring(v) end
        if j==3 then nme[#nme+1] = tostring(v) end
        if j==4 then de[#de+1] = tostring(v) end
        if j==5 then dn[#dn+1] = tostring(v) end
        if i ~= 1 and j==0 then dl[#dl+1] = tostring(v) end
    end
    if (#keys ~= #titles) or (#keys ~= #dl) then return nil end
    mtx = {}
    for m=1,#keys do mtx[m]={} end
    -- #EnemiesTable is 7
    -- title=='.' for bonus-level
    for i,v in ipairs(titles) do
        -- bonus is stored in TITLEs
        tmpNM = EnemiesTable[2]
        if v=='.' then
            locBs[#locBs+1] = i
            mtx[i][tmpNM] = '--BONUS--'
        else
            mtx[i][tmpNM] = v
        end
        -- others
        tmpNM = EnemiesTable[1]
        mtx[i][tmpNM] = i  -- level-#
        tmpNM = EnemiesTable[4]
        mtx[i][tmpNM] = de[i]
        tmpNM = EnemiesTable[5]
        mtx[i][tmpNM] = dn[i]
        tmpNM = EnemiesTable[6]
        mtx[i][tmpNM] = dl[i]
    end
    -- key is X### for cols 3 and tier-#/enemy
    for i,v in ipairs(keys) do
        local mkNameBgn = '{{nowrap| '
        local mkTierBgn = '[[:Category:Tier '
        local mkT,mkNME,junk,mkNMET
        tmpNM = EnemiesTable[3]
        mtx[i][tmpNM] = string.sub(v,1,1)
        tmpNM = EnemiesTable[7]
        --mtx[i][tmpNM] = nme[i]
        mkNMET = {}
        -- cant split on space cuz of spaces-in-name-links...
        --mkNME = utils.splitStrPat(nme[i],'[%s]+')
        mkNME = utils.splitStrPat(nme[i],'%]%]')
        for j=2,string.len(v) do
            Tnum = utils.toNum(string.sub(v,j,j))
            -- recreating name-links...
            mkT = mkTierBgn..tostring(Tnum)..'|T-'..tostring(Tnum)..']] '
            -- adding {{nowrap}} 
            --mkT = mkNameBgn..mkTierBgn..tostring(Tnum)
            --mkT = mkT..'|T-'..tostring(Tnum)..']] '
            --mkNMET[j-1] = mkT..mkNME[j-1]..']]}}'
            -- adding {{nowrap}} AGAIN...
            --mkNMET[j-1] = mkNameBgn..mkT..mkNME[j-1]..']] }}'
            mkNMET[j-1] = mkT..mkNME[j-1]..']]'
        end
        --junk = table.concat(mkNMET,', ')
        junk = table.concat(mkNMET,', <br>')
        mtx[i][tmpNM] = junk
        -- override...
        --mtx[i][tmpNM] = nme[i]
    end
    -- now we have to 'undo' the level-numbering for bonuses
    mtx = updateFirstNumbers(mtx,locBs,EnemiesTable)
    --return rows
    glbls.rows = utils.tableShallowCopy(mtx)
    return mtx
end

local function parseArgsScoring(which)
    local keys,titles,Eprz,Nprz,Lprz
    local j,chkBonus,locBs
    local tmpNM,tmpVAL
    local mtx
    -- glbls.data is a table holding 'what' and sets-of-three prizes
    keys = {}
    titles = {}
    Eprz = {}
    Nprz = {}
    Lprz = {}
    locBs = {}
    for i,v in ipairs(glbls.data) do
        j = (i-1) % 5
        if j==1 then keys[#keys+1] = tostring(v) end
        if j==2 then titles[#titles+1] = tostring(v) end
        if j==3 then Eprz[#Eprz+1] = tostring(v) end
        if j==4 then Nprz[#Nprz+1] = tostring(v) end
        if i ~= 1 and j==0 then Lprz[#Lprz+1] = tostring(v) end
    end
    if (#keys ~= #titles) or (#keys ~= #Lprz) then return nil end
    mtx = {}
    for m=1,#keys do mtx[m]={} end
    -- #ScoringTable is 7
    for i,v in ipairs(keys) do
        -- others (do first...)
        tmpNM = ScoringTable[1]
        mtx[i][tmpNM] = i  -- level-#
        tmpNM = ScoringTable[2]
        tmpVAL = 25  -- score-per-level
        if which=='easy' then
            mtx[i][tmpNM] = i * tmpVAL * 1 -- 25 pts
            tmpNM = ScoringTable[3]
            tmpVAL = string.sub(v,2,2)  -- #-prizes
            mtx[i][tmpNM] = tmpVAL
            tmpNM = ScoringTable[4]
            tmpVAL = Eprz[i]
            mtx[i][tmpNM] = tmpVAL
        elseif which=='normal' then
            mtx[i][tmpNM] = i * tmpVAL * 2 -- 50 pts
            tmpNM = ScoringTable[3]
            tmpVAL = string.sub(v,3,3)  -- #-prizes
            mtx[i][tmpNM] = tmpVAL
            tmpNM = ScoringTable[4]
            tmpVAL = Nprz[i]
            mtx[i][tmpNM] = tmpVAL
        elseif which=='legendary' then
            mtx[i][tmpNM] = i * tmpVAL * 3 -- 75 pts
            tmpNM = ScoringTable[3]
            tmpVAL = string.sub(v,4,4)  -- #-prizes
            mtx[i][tmpNM] = tmpVAL
            tmpNM = ScoringTable[4]
            tmpVAL = Lprz[i]
            mtx[i][tmpNM] = tmpVAL
        else
            -- unused ?
            mtx[i][tmpNM] = 1
            tmpNM = ScoringTable[3]
            tmpVAL = 0
            mtx[i][tmpNM] = tmpVAL
        end
        -- bonus is stored in KEYs, used for renum-locBs
        -- but dont need name-title or descs...
        chkBonus = string.sub(v,1,1)
        if chkBonus == 'B' then
            locBs[#locBs+1] = i
            -- could change-TITLE-back to generic-name
            -- titles[i] = '--BONUS--'
        end
    end
    -- need to split-apart prizes into 4-cols from first...
    for i,v in ipairs(keys) do
        local mkPrizes
        local pzs = {}
        tmpNM = ScoringTable[4]
        -- stupidities about pre/post evaluating of {{.}} 
        -- so use code: // instead...
        mkPrizes = utils.splitStrPat(mtx[i][tmpNM],'%/%/')
        -- override
        --mtx[i][tmpNM] = mkPrizes[1]
        for j = 1,4 do
            pzs[j] = ' '
            if mkPrizes[j] ~= nil then
                pzs[j] = pzs[j]..mkPrizes[j]
            end
        end
        mtx[i][tmpNM] = pzs[1]
        for j = 5,7 do
            tmpNM = ScoringTable[j]
            mtx[i][tmpNM] = pzs[j-3]
        end
    end
    -- now we have to 'undo' the level-numbering for bonuses
    mtx = updateFirstNumbers(mtx,locBs,ScoringTable)
    --return rows
    glbls.rows = utils.tableShallowCopy(mtx)
    return mtx
end



local function parseArgsStoryline()
    local keys,titles,descs
    local j,chkBonus,locBs
    local rows,mtx,tmpNM,tmpVAL
    keys = {}
    titles = {}
    descs = {}
    locBs = {}
    -- glbls.data is a table holding 'what' and sets-of-three things
    for i,v in ipairs(glbls.data) do
        j = (i-1) % 3
        if j==1 then keys[#keys+1] = tostring(v) end
        if j==2 then titles[#titles+1] = tostring(v) end
        if i ~= 1 and j==0 then descs[#descs+1] = tostring(v) end
    end
    --rows = utils.dumpTable(keys)..utils.dumpTable(titles)..utils.dumpTable(descs)
    if (#keys ~= #titles) or (#keys ~= #descs) then return nil end
    mtx = {}
    for m=1,#keys do mtx[m]={} end
    -- #StorylineTable is 7
    -- key is X### for cols 3,5-7
    for i,v in ipairs(keys) do
        -- others (do first...)
        tmpNM = StorylineTable[1]
        mtx[i][tmpNM] = i  -- level-#
        tmpNM = StorylineTable[2]
        mtx[i][tmpNM] = titles[i]
        tmpNM = StorylineTable[4]
        mtx[i][tmpNM] = descs[i]
        -- bonus is stored in KEYs
        chkBonus = string.sub(v,1,1)
        tmpNM = StorylineTable[3]
        if chkBonus == 'B' then
            mtx[i][tmpNM] = string.sub(titles[i],1,1)
            locBs[#locBs+1] = i
            -- change-TITLE-back from 'type'-CDS to generic-name
            mtx[i][StorylineTable[2]] = '--BONUS--'
        else
            mtx[i][tmpNM] = string.sub(v,1,1)
        end
        -- #ENL is stored in KEYs
        for j=2,4 do
            k=j+3
            tmpNM = StorylineTable[k]
            tmpVAL = string.sub(v,j,j)
            mtx[i][tmpNM]=tmpVAL
        end
    end
    -- create numbers needed...
    glbls.numBoni = #locBs
    glbls.numLvls = #titles
    glbls.numPrzEasy = 0
    glbls.numPrzNorm = 0
    glbls.numPrzLegd = 0
    for i = 1,#keys do
        glbls.numPrzEasy = glbls.numPrzEasy + utils.toNum(mtx[i]['#E'])
        glbls.numPrzNorm = glbls.numPrzNorm + utils.toNum(mtx[i]['#N'])
        glbls.numPrzLegd = glbls.numPrzLegd + utils.toNum(mtx[i]['#L'])
        for _,j in ipairs({'#E','#N','#L',}) do
            tmpVAL = mtx[i][j]
            if utils.toNum(tmpVAL) ~= 4 then 
                tmpVAL = "'''''"..tmpVAL.."'''''" 
                mtx[i][j] = tmpVAL
            end
        end
    end
    -- now we have to 'undo' the level-numbering for bonuses
    mtx = updateFirstNumbers(mtx,locBs,StorylineTable)
    --return rows
    glbls.rows = utils.tableShallowCopy(mtx)
    return mtx
end





local function cnvtStoryline2Story(inMtx,typ)
    local row = {}
    local xfer = {}
    local mtx = {}
    local toTbl,fromTbl
    -- VERY hacky assumptions 
    -- 1 - to is smaller than from
    -- 2 - to is in same-order as from
    -- 3 - enemies-table-didnt-work 
    --      so special-case hack-worse...
    -- 4 - rewards/scoring-table-skips-col-2 instead
    --      so another hacky-worse...
    if typ=='e' then
        -- enemies-tables
        -- last-col needed to match-correctly
        -- egads, hacky...
        toTbl = StoryEnemyTable
        fromTbl = EnemiesTable
        for i=1,#toTbl-1 do 
                xfer[toTbl[i]]=fromTbl[i]
        end
        xfer[toTbl[#toTbl]]=fromTbl[#fromTbl]
    elseif typ=='r' then
        -- scoring-rewards-tables
        toTbl = ScoringStoryTable
        fromTbl = ScoringTable
        xfer[toTbl[1]]=fromTbl[1]
        for i=2,#toTbl do 
                xfer[toTbl[i]]=fromTbl[i+1]
        end
    else -- 's' for original Storyline2Story
        toTbl = StoryTable
        fromTbl = StorylineTable
        for i=1,#toTbl do 
                xfer[toTbl[i]]=fromTbl[i]
        end
    end
    for lvl=1,#inMtx do
        local tmp = {}
        row = inMtx[lvl]
        for col,v in pairs(row) do
            for new,old in pairs(xfer) do
                if col==old then
                    tmp[new]=v
                end
            end
        end
        mtx[lvl]=tmp
    end
    return mtx
end





local function mkTable(what)
--    local allkeys = cc.getAK(fakeFrame)
    local r  -- to hold extra nodes/rows 
    local tblrows,useCols,tmprows
--    glbls.out = mw.html.create('table'):addClass('wikitable sortable')
    glbls.out = mw.html.create('table'):addClass('wikitable '..glbls.sortable)
    r = addHeader(what)
    glbls.out:node(r)  -- adds a child-node of (row) to current-instance (table)
    if what=='Enemies' or what=='StoryEnemy' then
        tmprows = parseArgsEnemies()
        if what=='StoryEnemy' then
            tblrows = cnvtStoryline2Story(tmprows,'e')
        else
            tblrows = tmprows
        end
    elseif what=='Storyline' or what=='Story' then
        tmprows = parseArgsStoryline()
        if what=='Story' then
            tblrows = cnvtStoryline2Story(tmprows)
        else
            tblrows = tmprows
        end
    elseif what=='RewardsPoints' then
        tblrows = parseArgsRewardsPoints()
--    elseif what=='RewardsPosition' then
--        tblrows = parseArgsRewardsPosition()
    elseif what=='RewardsEasy' then
        tblrows = parseArgsRewardsPosition('easy')
    elseif what=='RewardsNormal' then
        tblrows = parseArgsRewardsPosition('normal')
    elseif what=='RewardsLegendary' then
        tblrows = parseArgsRewardsPosition('legendary')
--    elseif what=='Scoring' then
--        tblrows = parseArgsScoring('easy')
    elseif what=='ScoringStory' then
        tmprows = parseArgsScoring('easy')
        useCols = 4
        -- hack to remove-points...
        tblrows = cnvtStoryline2Story(tmprows,'r')
    elseif what=='ScoringEasy' then
        tblrows = parseArgsScoring('easy')
        useCols = 4
    elseif what=='ScoringNormal' then
        tblrows = parseArgsScoring('normal')
        useCols = 4
    elseif what=='ScoringLegendary' then
        tblrows = parseArgsScoring('legendary')
        useCols = 4
    else
        tblrows = {}
    end    
    glbls.rows = tblrows  -- mtx[][]
    --
    for _,cols in ipairs(tblrows) do
        r = addRow(cols,useCols)
        glbls.out:node(r)
    end
    r = addHeader()
    glbls.out:node(r)
    return glbls.out
--    return utils.dumpTable(glbls.rows)
--    return 'inside mkTable()'
end
local function mkIndex()
    return 'inside mkIndex()'
end



--- hello-world to setup testcases correctly...
function p.main(frame)
    local a = getargs(frame)
    glbls.data = utils.tableShallowCopy(a)
    local what = a[1]
    local out,holdstr
    local tempstr=''
    if what=='index' then
        out = mkIndex()
    elseif (what=='Story') or (what=='Storyline') then 
        out = ''
        -- setup everything...
        holdstr = tostring(mkTable(what))
        if (what=='Storyline') then 
            -- storyline info...
            tempstr = 'Easy: ?/'..glbls.numLvls
            tempstr = tempstr..' and ?/'..glbls.numPrzEasy
            out = out..tostring(addParagraph(tempstr,'li'))
            tempstr = 'Normal: ?/'..glbls.numLvls
            tempstr = tempstr..' and ?/'..glbls.numPrzNorm
            out = out..tostring(addParagraph(tempstr,'li'))
            tempstr = 'Legendary: ?/'..glbls.numLvls
            tempstr = tempstr..' and ?/'..glbls.numPrzLegd
            out = out..tostring(addParagraph(tempstr,'li'))
            --
            tempstr = out
            out = tostring(addParagraph(tempstr,'ul'))
        end
        out = out..holdstr
--        out = glbls.choices
        --out = utils.dumpTable(glbls.rows)
    elseif what=='Scoring' then
        out = ''
        --out = '<br>'
        --out = out..tostring(addParagraph('===EASY==='))
        out = out..tostring(addParagraph('Easy','h4'))
        out = out..tostring(mkTable('ScoringEasy'))
        out = out..tostring(addParagraph('Normal','h4'))
        out = out..tostring(mkTable('ScoringNormal'))
        out = out..tostring(addParagraph('Legendary','h4'))
        out = out..tostring(mkTable('ScoringLegendary'))
    elseif what=='RewardsPosition' then
        --out = 'Doing RewardsPosition here...'
        -- setup everything...
        glbls.sortable = ''
        out = ''
        out = out..tostring(addParagraph('Easy','h4'))
        out = out..tostring(mkTable('RewardsEasy'))
        out = out..tostring(addParagraph('Normal','h4'))
        out = out..tostring(mkTable('RewardsNormal'))
        out = out..tostring(addParagraph('Legendary','h4'))
        out = out..tostring(mkTable('RewardsLegendary'))
        --holdstr = tostring(mkTable(what))
        --out = out..holdstr
        --out = out..utils.dumpTable(glbls.rows)
    elseif (what=='Enemies') or 
            (what=='StoryEnemy') or 
            (what=='RewardsPoints') or 
            (what=='ScoringStory') or 
            (what=='ScoringEasy') or 
            (what=='ScoringNormal') or 
            (what=='ScoringLegendary') then

        out = mkTable(what)
--        out = glbls.choices
        -- storyline info...
--[[        tempstr = tempstr..'E='..glbls.numPrzEasy
        tempstr = tempstr..'N='..glbls.numPrzNorm
        tempstr = tempstr..'L='..glbls.numPrzLegd
        tempstr = tempstr..'B='..glbls.numBoni
        tempstr = tempstr..'N='..glbls.numLvls
        out = tempstr
--]]
        --out = utils.dumpTable(glbls.rows)
    else
        out = "Hello, world! - doing..."..tostring(what)..
            "... with ==>"..utils.dumpTable(glbls.data)
    end    
    return tostring( out )
end

return p
Advertisement