- Welcome to the Kancolle Wiki!
- If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord
Difference between revisions of "Module:MapRewards"
Jump to navigation
Jump to search
Line 13: | Line 13: | ||
!style="background-color:#3baef5;color:white;width:15%"|乙<br>Medium | !style="background-color:#3baef5;color:white;width:15%"|乙<br>Medium | ||
!style="background-color:#3baef5;color:white;width:15%"|甲<br>Hard]], | !style="background-color:#3baef5;color:white;width:15%"|甲<br>Hard]], | ||
− | all = [[|- | + | all = [=[|- |
!colspan="5" style="background-color:white"|All | !colspan="5" style="background-color:white"|All | ||
|- | |- | ||
− | |colspan="5" style="text-align:center"|%s]], | + | |colspan="5" style="text-align:center;font-size:12px;line-height:12px"|%s<br>[[%s]]]=], |
row = [=[|- | row = [=[|- | ||
|style="text-align:center;background-color:#eef2f7;font-size:12px;line-height:12px"|%s<br>[[%s]] | |style="text-align:center;background-color:#eef2f7;font-size:12px;line-height:12px"|%s<br>[[%s]] | ||
Line 36: | Line 36: | ||
local tbl = {} | local tbl = {} | ||
local types = {} | local types = {} | ||
+ | -- TODO: assuming 0-1 ship rewards on all difficulties | ||
+ | local ship = false | ||
local assetTypes = { item = 'Item Icon', equipment = 'Equipment Card', ship = 'Ship Banner' } | local assetTypes = { item = 'Item Icon', equipment = 'Equipment Card', ship = 'Ship Banner' } | ||
local assetSizes = { item = '75px', equipment = '75px', ship = '240px' } | local assetSizes = { item = '75px', equipment = '75px', ship = '240px' } | ||
local function setData(diff) | local function setData(diff) | ||
for _, v in ipairs(data[diff] or {}) do | for _, v in ipairs(data[diff] or {}) do | ||
− | |||
− | |||
types[name] = v.item and 'item' or v.equipment and 'equipment' or v.ship and 'ship' or '??' | types[name] = v.item and 'item' or v.equipment and 'equipment' or v.ship and 'ship' or '??' | ||
− | tbl[name] = tbl[name] or {} | + | if v.ship then |
− | + | ship = v.ship | |
+ | else | ||
+ | local name = v.item or v.equipment | ||
+ | if not U.ifind(index, name) then table.insert(index, name) end | ||
+ | tbl[name] = tbl[name] or {} | ||
+ | tbl[name][diff] = { count = v.count or 1, level = v.level } | ||
+ | end | ||
end | end | ||
end | end | ||
Line 56: | Line 62: | ||
local function getCell(name, diff) | local function getCell(name, diff) | ||
return getCount(name, diff) .. getLevel(name, diff) | return getCount(name, diff) .. getLevel(name, diff) | ||
+ | end | ||
+ | local function getAsset(name) | ||
+ | local typ = types[name] | ||
+ | return string.format("[[File:%s %s.png|%s|link=%s]]", assetTypes[typ] or '??', name, assetSizes[typ] or '??', name) | ||
end | end | ||
setData('Hard') | setData('Hard') | ||
Line 61: | Line 71: | ||
setData('Easy') | setData('Easy') | ||
setData('Casual') | setData('Casual') | ||
+ | if ship then | ||
+ | table.insert(result, string.format(template.all, getAsset(name), name)) | ||
+ | end | ||
for _, name in ipairs(index) do | for _, name in ipairs(index) do | ||
− | + | table.insert(result, string.format(template.row, getAsset(name), name, getCell(name, 'Casual'), getCell(name, 'Easy'), getCell(name, 'Medium'), getCell(name, 'Hard'))) | |
− | |||
− | table.insert(result, string.format(template.row, | ||
end | end | ||
table.insert(result, template.footer) | table.insert(result, template.footer) |
Revision as of 23:40, 24 June 2022
Documentation for this module may be created at Module:MapRewards/doc
local U = require('Module:Core')
local template = {
top_header = [[<div style="position:relative;height:auto;align-items:center;justify-content:center;display:inline-flex;width:100%">
{|style="width:100%;"
!colspan="5" style="background-color:#3baef5;color:white"|Rewards]],
footer = [[|}
</div>]],
header = [[|-
!style="background-color:#3baef5;color:white"|Equipment/Item
!style="background-color:#3baef5;color:white;width:15%"|丁<br>Casual
!style="background-color:#3baef5;color:white;width:15%"|丙<br>Easy
!style="background-color:#3baef5;color:white;width:15%"|乙<br>Medium
!style="background-color:#3baef5;color:white;width:15%"|甲<br>Hard]],
all = [=[|-
!colspan="5" style="background-color:white"|All
|-
|colspan="5" style="text-align:center;font-size:12px;line-height:12px"|%s<br>[[%s]]]=],
row = [=[|-
|style="text-align:center;background-color:#eef2f7;font-size:12px;line-height:12px"|%s<br>[[%s]]
|style="text-align:center;background-color:#eef2f7;font-size:20px"|%s
|style="text-align:center;background-color:#eef2f7;font-size:20px"|%s
|style="text-align:center;background-color:#eef2f7;font-size:20px"|%s
|style="text-align:center;background-color:#eef2f7;font-size:20px"|%s]=],
}
local function render(frame)
local event = frame.args[1] or "??"
local map = frame.args[2] or "??"
local success, data = U.loadData("Data/Map/" .. event)
if not success then return "Unknown event: " .. event end
data = data[map]
if not data then return "Unknown map: " .. map end
local result = { template.top_header, template.header }
local index = {}
local tbl = {}
local types = {}
-- TODO: assuming 0-1 ship rewards on all difficulties
local ship = false
local assetTypes = { item = 'Item Icon', equipment = 'Equipment Card', ship = 'Ship Banner' }
local assetSizes = { item = '75px', equipment = '75px', ship = '240px' }
local function setData(diff)
for _, v in ipairs(data[diff] or {}) do
types[name] = v.item and 'item' or v.equipment and 'equipment' or v.ship and 'ship' or '??'
if v.ship then
ship = v.ship
else
local name = v.item or v.equipment
if not U.ifind(index, name) then table.insert(index, name) end
tbl[name] = tbl[name] or {}
tbl[name][diff] = { count = v.count or 1, level = v.level }
end
end
end
local function getCount(name, diff)
return ((tbl[name] or {})[diff] or {}).count or ''
end
local function getLevel(name, diff)
local level = ((tbl[name] or {})[diff] or {}).level
return level and string.format(" (★%d)", level) or ''
end
local function getCell(name, diff)
return getCount(name, diff) .. getLevel(name, diff)
end
local function getAsset(name)
local typ = types[name]
return string.format("[[File:%s %s.png|%s|link=%s]]", assetTypes[typ] or '??', name, assetSizes[typ] or '??', name)
end
setData('Hard')
setData('Medium')
setData('Easy')
setData('Casual')
if ship then
table.insert(result, string.format(template.all, getAsset(name), name))
end
for _, name in ipairs(index) do
table.insert(result, string.format(template.row, getAsset(name), name, getCell(name, 'Casual'), getCell(name, 'Easy'), getCell(name, 'Medium'), getCell(name, 'Hard')))
end
table.insert(result, template.footer)
return table.concat(result, "\n")
end
return { render = render }