Line 8: |
Line 8: |
| !style="background-color:#3baef5;color:white;width:40%%"|Ship | | !style="background-color:#3baef5;color:white;width:40%%"|Ship |
| |colspan="4" style="background-color:#eef2f7"|%s<br>[[%s]]]=], | | |colspan="4" style="background-color:#eef2f7"|%s<br>[[%s]]]=], |
| + | choice_header = [=[|- |
| + | !style="background-color:#3baef5;color:white;width:40%"|Choice |
| + | !class="unsortable" style="background-color:#3baef5;color:white;width:15%"|丁<br>Casual |
| + | !class="unsortable" style="background-color:#3baef5;color:white;width:15%"|丙<br>Easy |
| + | !class="unsortable" style="background-color:#3baef5;color:white;width:15%"|乙<br>Medium |
| + | !class="unsortable" style="background-color:#3baef5;color:white;width:15%"|甲<br>Hard]=], |
| choice = [=[|- | | choice = [=[|- |
| !style="background-color:#eef2f7;color:red"|OR | | !style="background-color:#eef2f7;color:red"|OR |
| |colspan="4" style="background-color:#eef2f7"|]=], | | |colspan="4" style="background-color:#eef2f7"|]=], |
− | -- TODO: class="sortable"
| + | item_header = [[{|style="text-align:center;width:100%" class="sortable" |
− | item_header = [[{|style="text-align:center;width:100%" | + | !style="background-color:#3baef5;color:white;width:40%"|Reward |
− | !style="background-color:#3baef5;color:white;width:40%"|Item/Equipment | |
| !class="unsortable" style="background-color:#3baef5;color:white;width:15%"|丁<br>Casual | | !class="unsortable" style="background-color:#3baef5;color:white;width:15%"|丁<br>Casual |
| !class="unsortable" style="background-color:#3baef5;color:white;width:15%"|丙<br>Easy | | !class="unsortable" style="background-color:#3baef5;color:white;width:15%"|丙<br>Easy |
Line 24: |
Line 29: |
| |style="background-color:#eef2f7;font-size:18px"|%s | | |style="background-color:#eef2f7;font-size:18px"|%s |
| |style="background-color:#eef2f7;font-size:18px"|%s]=], | | |style="background-color:#eef2f7;font-size:18px"|%s]=], |
− | item_row_choice_top = [=[|-
| |
− | |data-sort-value="%s" style="background-color:#eef2f7;font-size:12px;line-height:14px;border-top:4px solid grey"|%s<br>[[%s]]]=],
| |
− | item_row_choice_middle = [=[|-
| |
− | |data-sort-value="%s" style="background-color:#eef2f7;font-size:12px;line-height:14px;"|%s<br>[[%s]]]=],
| |
− | item_row_choice_bottom = [=[|-
| |
− | |data-sort-value="%s" style="background-color:#eef2f7;font-size:12px;line-height:14px;border-bottom:4px solid grey"|%s<br>[[%s]]]=],
| |
− | item_row_amount_top = [=[|style="background-color:#eef2f7;font-size:18px;border-top:4px solid grey"|%s]=],
| |
− | item_row_amount_middle = [=[|style="background-color:#eef2f7;font-size:18px;"|%s]=],
| |
− | item_row_amount_bottom = [=[|style="background-color:#eef2f7;font-size:18px;border-bottom:4px solid grey"|%s]=],
| |
− | item_style_top = [=[|data-sort-value="%s" style="background-color:#eef2f7;color:red;font-size:12px;line-height:14px;width:auto;border-top:4px solid grey"|]=],
| |
− | item_style_bottom = [=[|data-sort-value="%s" style="background-color:#eef2f7;color:red;font-size:12px;line-height:14px;width:auto;border-bottom:4px solid grey"|]=],
| |
| } | | } |
| | | |
Line 51: |
Line 45: |
| local tbl = {} | | local tbl = {} |
| local types = {} | | local types = {} |
− | -- TODO: assuming 0-1 single ship reward on all difficulties | + | -- TODO: assuming 0-1 ship |
| + | -- TODO: assuming 0-1 choice |
| local ship = false | | local ship = false |
| + | local choice = false |
| + | local choiceFirstIndex = {} |
| + | local choiceSecondIndex = {} |
| local function setData(diff) | | local function setData(diff) |
| for _, v in ipairs(data[diff] or {}) do | | for _, v in ipairs(data[diff] or {}) do |
Line 62: |
Line 60: |
| types[name1] = v1.item and 'item' or v1.equipment and 'equipment' or v1.ship and 'ship' or '??' | | types[name1] = v1.item and 'item' or v1.equipment and 'equipment' or v1.ship and 'ship' or '??' |
| types[name2] = v2.item and 'item' or v2.equipment and 'equipment' or v2.ship and 'ship' or '??' | | types[name2] = v2.item and 'item' or v2.equipment and 'equipment' or v2.ship and 'ship' or '??' |
− | local names = {name1 .. '1', name2 .. '2'} | + | choice = true |
− | local name = names[1] .. '||' .. names[2] | + | tbl['choice1' .. name1] = tbl['choice1' .. name1] or {} |
− | types[name] = 'choice'
| + | tbl['choice1' .. name1][diff] = { count = v1.count or 1, level = v1.level } |
− | if not U.ifind(index, name) then table.insert(index, name) end
| + | tbl['choice2' .. name2] = tbl['choice2' .. name2] or {} |
− | tbl[name] = tbl[name] or {} | + | tbl['choice2' .. name2][diff] = { count = v2.count or 1, level = v2.level } |
− | tbl[name][diff] = { | + | if not U.ifind(choiceFirstIndex, name1) then table.insert(choiceFirstIndex, name1) end |
− | { name = name1, count = v1.count or 1, level = v1.level },
| + | if not U.ifind(choiceSecondIndex, name2) then table.insert(choiceSecondIndex, name2) end |
− | { name = name2, count = v2.count or 1, level = v2.level },
| |
− | } | |
| else | | else |
| local name = v.item or v.equipment or v.ship or '??' | | local name = v.item or v.equipment or v.ship or '??' |
Line 84: |
Line 80: |
| end | | end |
| end | | end |
− | local function getCount(name, diff, i) | + | local function getCount(name, diff) |
− | if i then | + | return ((tbl[name] or {})[diff] or {}).count or 0 |
− | return (((tbl[name] or {})[diff] or {})[i] or {}).count or 0
| |
− | else
| |
− | return ((tbl[name] or {})[diff] or {}).count or 0
| |
− | end
| |
| end | | end |
− | local function getLevel(name, diff, i) | + | local function getLevel(name, diff) |
− | local level | + | local level = ((tbl[name] or {})[diff] or {}).level |
− | if i then
| |
− | level = (((tbl[name] or {})[diff] or {})[i] or {}).level
| |
− | else
| |
− | level = ((tbl[name] or {})[diff] or {}).level
| |
− | end
| |
| return level and string.format(" (★%d)", level) or '' | | return level and string.format(" (★%d)", level) or '' |
| end | | end |
− | local function getCell(name, diff, i) | + | local function getCell(name, diff) |
− | local count = getCount(name, diff, i) | + | local count = getCount(name, diff) |
− | return (count == 0 and '' or count) .. getLevel(name, diff, i) | + | return (count == 0 and '' or count) .. getLevel(name, diff) |
| end | | end |
| local function getAsset(name) | | local function getAsset(name) |
Line 114: |
Line 101: |
| if ship then | | if ship then |
| table.insert(result, string.format(template.ship_row, getAsset(ship), ship)) | | table.insert(result, string.format(template.ship_row, getAsset(ship), ship)) |
| + | end |
| + | if choice then |
| + | table.insert(result, template.choice_header) |
| + | for i, name in ipairs(choiceFirstIndex) do |
| + | table.insert(result, string.format(template.item_row, 0, getAsset(name), name, |
| + | getCell('choice1' .. name, 'Casual'), getCell('choice1' .. name, 'Easy'), getCell('choice1' .. name, 'Medium'), getCell('choice1' .. name, 'Hard'))) |
| + | end |
| + | table.insert(result, template.choice) |
| + | for i, name in ipairs(choiceSecondIndex) do |
| + | table.insert(result, string.format(template.item_row, 0, getAsset(name), name, |
| + | getCell('choice2' .. name, 'Casual'), getCell('choice2' .. name, 'Easy'), getCell('choice2' .. name, 'Medium'), getCell('choice2' .. name, 'Hard'))) |
| + | end |
| end | | end |
| table.insert(result, template.footer) | | table.insert(result, template.footer) |
| table.insert(result, template.item_header) | | table.insert(result, template.item_header) |
− | --[[
| |
| local sortedIndex = U.imap(index, function(name, i) return { name = name, i = i, typ = types[name] } end) | | local sortedIndex = U.imap(index, function(name, i) return { name = name, i = i, typ = types[name] } end) |
| table.sort(sortedIndex, function (x, y) | | table.sort(sortedIndex, function (x, y) |
Line 129: |
Line 127: |
| local sortValues = {} | | local sortValues = {} |
| for i, e in ipairs(sortedIndex) do sortValues[e.name] = i end | | for i, e in ipairs(sortedIndex) do sortValues[e.name] = i end |
− | ]]--
| |
− | -- sortValues[name]
| |
| for i, name in ipairs(index) do | | for i, name in ipairs(index) do |
− | if types[name] == 'choice' then | + | table.insert(result, string.format(template.item_row, sortValues[name], getAsset(name), name, |
− | local names = U.split(name, '||')
| + | getCell(name, 'Casual'), getCell(name, 'Easy'), getCell(name, 'Medium'), getCell(name, 'Hard'))) |
− |
| |
− | local subNames = {}
| |
− | for j=1, #names do
| |
− | subNames[j] = names[j]:sub(1, -2)
| |
− | end
| |
− |
| |
− | local difficulty = {'Casual', 'Easy', 'Medium', 'Hard'}
| |
− |
| |
− | for c=1, #names do
| |
− | local str = ""
| |
− |
| |
− | if c==1 then str = template.item_row_choice_top
| |
− | elseif c==#names then str = template.item_row_choice_bottom
| |
− | else str = template.item_row_choice_middle end
| |
− | table.insert(result, string.format(str, 0, getAsset(subNames[c]), subNames[c]))
| |
− |
| |
− | str = ""
| |
− | for d=1, #difficulty do
| |
− | if c==1 then str = template.item_row_amount_top
| |
− | elseif c==#names then str = template.item_row_amount_bottom
| |
− | else str = template.item_row_amount_middle end
| |
− | table.insert(result, string.format(str, getCell(name, difficulty[d], c), c))
| |
− | end
| |
− |
| |
− | if c~=#names then table.insert(result, template.choice) end
| |
− | end
| |
− |
| |
− | else
| |
− | table.insert(result, string.format(template.item_row, 0, getAsset(name), name,
| |
− | getCell(name, 'Casual'), getCell(name, 'Easy'), getCell(name, 'Medium'), getCell(name, 'Hard')))
| |
− | end
| |
| end | | end |
| table.insert(result, template.footer) | | table.insert(result, template.footer) |
Line 175: |
Line 140: |
| | | |
| return { render = render, test = test } | | return { render = render, test = test } |
| + | |
| + | -- TEST: p.test() |