Line 62: |
Line 62: |
| 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 '??' |
− | tbl['choice1' .. name1] = tbl['choice1' .. name1] or {}
| |
− | tbl['choice1' .. name1][diff] = { count = v1.count or 1, level = v1.level }
| |
− | tbl['choice2' .. name2] = tbl['choice2' .. name2] or {}
| |
− | tbl['choice2' .. name2][diff] = { count = v2.count or 1, level = v2.level }
| |
| if not U.ifind(choice1Index, name1) then table.insert(choice1Index, name1) end | | if not U.ifind(choice1Index, name1) then table.insert(choice1Index, name1) end |
| if not U.ifind(choice2Index, name2) then table.insert(choice2Index, name2) end | | if not U.ifind(choice2Index, name2) then table.insert(choice2Index, name2) end |
− | if not U.ifindBy(choiceIndex, function(e) return e[1] == name1 and e[2] == name2 end) then table.insert(choiceIndex, {name1, name2}) end
| + | if version == 0 then |
| + | local names = table.concat({name1, name2}, '|') |
| + | tbl[names] = tbl[names] or {} |
| + | tbl[names][diff] = {{ count = v1.count or 1, level = v1.level }, { count = v2.count or 1, level = v2.level }} |
| + | if not U.ifind(choiceIndex, names) then table.insert(choiceIndex, names) end |
| + | else |
| + | tbl['choice1' .. name1] = tbl['choice1' .. name1] or {} |
| + | tbl['choice1' .. name1][diff] = { count = v1.count or 1, level = v1.level } |
| + | tbl['choice2' .. name2] = tbl['choice2' .. name2] or {} |
| + | tbl['choice2' .. name2][diff] = { count = v2.count or 1, level = v2.level } |
| + | if not U.ifindBy(choiceIndex, function(e) return e[1] == name1 and e[2] == name2 end) then table.insert(choiceIndex, {name1, name2}) end |
| + | end |
| 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 82: |
Line 89: |
| end | | end |
| end | | end |
− | local function getCount(name, diff) | + | local function getCount(name, diff, i) |
− | return ((tbl[name] or {})[diff] or {}).count or 0
| + | local data = (tbl[name] or {})[diff] or {} |
| + | return data[i] and (data[i].count or 0) or data.count or 0 |
| end | | end |
− | local function getLevel(name, diff) | + | local function getLevel(name, diff, i) |
− | local level = ((tbl[name] or {})[diff] or {}).level
| + | local data = (tbl[name] or {})[diff] or {} |
| + | local level = data[i] and data[i].level or data.level |
| return level and string.format(" (★%d)", level) or '' | | return level and string.format(" (★%d)", level) or '' |
| end | | end |
− | local function getCell(name, diff) | + | local function getCell(name, diff, i) |
− | local count = getCount(name, diff) | + | local count = getCount(name, diff, i) |
− | return (count == 0 and '' or count) .. getLevel(name, diff) | + | return (count == 0 and '' or count) .. getLevel(name, diff, i) |
| end | | end |
| local function getAsset(name, size) | | local function getAsset(name, size) |
Line 103: |
Line 112: |
| local deep_plot1 = {} | | local deep_plot1 = {} |
| local deep_plot2 = {} | | local deep_plot2 = {} |
− | for _, choice in ipairs(choiceIndex) do | + | if version >= 2 then |
− | deep_plot1[choice[1]] = deep_plot1[choice[1]] or {}
| + | for _, choice in ipairs(choiceIndex) do |
− | table.insert(deep_plot1[choice[1]], 1, choice[2])
| + | deep_plot1[choice[1]] = deep_plot1[choice[1]] or {} |
− | deep_plot2[choice[2]] = deep_plot2[choice[2]] or {}
| + | table.insert(deep_plot1[choice[1]], 1, choice[2]) |
− | table.insert(deep_plot2[choice[2]], 1, choice[1])
| + | deep_plot2[choice[2]] = deep_plot2[choice[2]] or {} |
| + | table.insert(deep_plot2[choice[2]], 1, choice[1]) |
| + | end |
| end | | end |
| if version >= 3 then | | if version >= 3 then |
Line 176: |
Line 187: |
| end | | end |
| end | | end |
− | else | + | elseif version == 0 then |
− | if #choice1Index == #choice2Index or version == 0 then
| + | for i, names in ipairs(choiceIndex) do |
− | for i, e in ipairs(choiceIndex) do
| + | local names_ = U.split(names, '|') |
− | local name = e[1]
| + | for j, name in ipairs(names_) do |
| table.insert(result, string.format(template.item_row, 0, getAsset(name), name, | | 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'))) | + | getCell(names, 'Casual', j), getCell(names, 'Easy', j), getCell(names, 'Medium', j), getCell(names, 'Hard', j))) |
− | table.insert(result, template.choice)
| + | if j < #names_ then |
− | name = e[2]
| + | table.insert(result, template.choice) |
− | 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')))
| |
− | if i < #choiceIndex then | |
− | table.insert(result, template.choice_separator) | |
| end | | end |
| end | | end |
− | else
| + | if i < #choiceIndex then |
− | for i, name in ipairs(choice1Index) do | + | table.insert(result, template.choice_separator) |
− | 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 | | end |
| + | end |
| + | elseif #choice1Index == #choice2Index then |
| + | for i, e in ipairs(choiceIndex) do |
| + | local name = e[1] |
| + | 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'))) |
| table.insert(result, template.choice) | | table.insert(result, template.choice) |
− | for i, name in ipairs(choice2Index) do | + | name = e[2] |
− | table.insert(result, string.format(template.item_row, 0, getAsset(name), name,
| + | 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')))
| + | getCell('choice2' .. name, 'Casual'), getCell('choice2' .. name, 'Easy'), getCell('choice2' .. name, 'Medium'), getCell('choice2' .. name, 'Hard'))) |
| + | if i < #choiceIndex then |
| + | table.insert(result, template.choice_separator) |
| end | | end |
| + | end |
| + | else |
| + | for i, name in ipairs(choice1Index) 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(choice2Index) 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 | | end |
Line 225: |
Line 248: |
| | | |
| local function test() | | local function test() |
− | -- mw.log(render(nil, 'Summer 2022 Event', 'E-1'))
| + | mw.log(render(nil, 'Summer 2023 Event', 'E-7')) |
− | -- mw.log(render(nil, 'Early Spring 2023 Event', 'E-1'))
| |
− | mw.log(render(nil, 'Summer 2023 Event', 'E-3')) | |
| end | | end |
| | | |