• 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"

From Kancolle Wiki
Jump to navigation Jump to search
Line 2: Line 2:
  
 
local template = {
 
local template = {
top_header = [[<div style="position:relative;height:auto;align-items:center;justify-content:center;display:inline-flex;width:100%">
+
top_header = [[{|style="text-align:center"
{|style="width:100%;"
 
 
!colspan="5" style="background-color:#3baef5;color:white"|Rewards]],
 
!colspan="5" style="background-color:#3baef5;color:white"|Rewards]],
footer = [[|}
+
footer = [[|}]],
</div>]],
 
 
header = [[|-
 
header = [[|-
 
!style="background-color:#3baef5;color:white"|Equipment/Item
 
!style="background-color:#3baef5;color:white"|Equipment/Item
Line 14: Line 12:
 
!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:#3baef5;color:white"|All
 
|-
 
|-
|colspan="5" style="text-align:center;font-size:12px;line-height:12px"|%s<br>[[%s]]]=],
+
|colspan="5" style="background-color:#eef2f7"|%s<br>[[%s]]]=],
 
row = [=[|-
 
row = [=[|-
|style="text-align:center;background-color:#eef2f7;font-size:12px;line-height:12px"|%s<br>[[%s]]
+
|style="background-color:#eef2f7;font-size:12px"|%s<br>[[%s]]
|style="text-align:center;background-color:#eef2f7;font-size:20px"|%s
+
|style="background-color:#eef2f7;font-size:18px"|%s
|style="text-align:center;background-color:#eef2f7;font-size:20px"|%s
+
|style="background-color:#eef2f7;font-size:18px"|%s
|style="text-align:center;background-color:#eef2f7;font-size:20px"|%s
+
|style="background-color:#eef2f7;font-size:18px"|%s
|style="text-align:center;background-color:#eef2f7;font-size:20px"|%s]=],
+
|style="background-color:#eef2f7;font-size:18px"|%s]=],
 
}
 
}
  
Line 32: Line 30:
 
data = data[map]
 
data = data[map]
 
if not data then return "Unknown map: " .. map end
 
if not data then return "Unknown map: " .. map end
local result = { template.top_header, template.header }
 
 
local index = {}
 
local index = {}
 
local tbl = {}
 
local tbl = {}
Line 71: Line 68:
 
setData('Easy')
 
setData('Easy')
 
setData('Casual')
 
setData('Casual')
 +
local result = { template.top_header }
 
if ship then
 
if ship then
 
table.insert(result, string.format(template.all, getAsset(ship), ship))
 
table.insert(result, string.format(template.all, getAsset(ship), ship))
 
end
 
end
 +
table.insert(result, template.header)
 
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, getAsset(name), name, getCell(name, 'Casual'), getCell(name, 'Easy'), getCell(name, 'Medium'), getCell(name, 'Hard')))

Revision as of 23:52, 24 June 2022

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

local U = require('Module:Core')

local template = {
	top_header = [[{|style="text-align:center"
!colspan="5" style="background-color:#3baef5;color:white"|Rewards]],
	footer = [[|}]],
	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:#3baef5;color:white"|All
|-
|colspan="5" style="background-color:#eef2f7"|%s<br>[[%s]]]=],
	row = [=[|-
|style="background-color:#eef2f7;font-size:12px"|%s<br>[[%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
|style="background-color:#eef2f7;font-size:18px"|%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 index = {}
	local tbl = {}
	local types = {}
	-- TODO: assuming 0-1 single 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
			local name = v.item or v.equipment or v.ship or '??'
			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
				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')
	local result = { template.top_header }
	if ship then
		table.insert(result, string.format(template.all, getAsset(ship), ship))
	end
	table.insert(result, template.header)
	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 }