Module:MapRewards

Revision as of 23:21, 24 June 2022 by がか (talk | contribs) (Created page with "local U = require('Module:Core') local template = { top_header = [[<div style="position:relative;height:auto;align-items:center;justify-content:center;display:inline-flex;wi...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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"|%s]],
	row = [=[|-
|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
|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 function setData(diff)
		for _, v in ipairs(data[diff] or {}) do
			local name = v.item or v.equipment or v.ship or '??'
			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
	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
	setData('Hard')
	setData('Medium')
	setData('Easy')
	setData('Casual')
	for _, name in ipairs(index) do
		table.insert(result, string.format(template.row, 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 }