模块:EventShopList

来自Mooncell - 玩家共同构筑的FGO中文Wiki
跳到导航 跳到搜索

用于显示活动素材兑换的表格,可勾选部分素材计算需要的活动道具总数。

参数:
token_alias(必须):活动道具的名称。
token_icon(可选):活动道具图标的文件名,默认是以token_alias为名的png文件。
token_icon_size(可选):活动道具图标的大小,默认30px。

data(必须):兑换的素材的信息,每一行对应一种素材。举个例子
1;;[[文件:凶骨.jpg|30px|link=凶骨]] 凶骨;;30;;40;;#FFEDD6
;;是分隔符,从左往右的每项分别为:是否初始选中(1/0),显示的名称,兑换次数,单价,背景色(可省略)。

local p = {}

function p.list(frame)
	local args = (frame == mw.getCurrentFrame() and frame.args) or frame
	
	local token_name = mw.text.trim(args["token_alias"] or "")
	local token_icon_file = mw.text.trim(args["token_icon"] or token_name .. ".png")
	local token_icon_size = mw.text.trim(args["token_icon_size"] or "30px")
	
	local data_str = mw.text.trim(args["data"] or "")
	
	local token_icon = string.format("[[File:%s|%s|link=]]", token_icon_file, token_icon_size)
	
	local selectall_str = frame:callParserFunction{name = '#Widget:ShopItemSelectAll', args = {item = token_name}}
	
	res_table = {}
	table.insert(res_table, '{| class="wikitable logo" style="white-space:normal;width:600px;max-width:100%;display:table;"\n')
	table.insert(res_table, string.format('!style="width:1.5em;"|%s!!可兑换道具!!style="width:5.0em;"|兑换次数!!style="width:6.0em;"|单价\n', selectall_str))
	
	local data_table = mw.text.split(data_str, "\n", true)
	for i = 1, #data_table do
		local datum_table = mw.text.split(data_table[i], ";;", true)
		local name = mw.text.trim(datum_table[2] or "")
		if datum_table[1]=='X' then
			table.insert(res_table, '|-\n')
			if datum_table[3] or datum_table[4] then
				local str = "|style=\"text-align:center; "
				if datum_table[3] then str = str.."background:"..datum_table[3].."; " end
				if datum_table[4] then str = str.."color:"..datum_table[4]..";" end
				str = str..string.format("\" colspan=4|'''%s'''\n", name)
				table.insert(res_table, str)
			else
				table.insert(res_table, string.format("!colspan=4|%s\n", name))
			end
		elseif datum_table[1]=='X2' then
			table.insert(res_table, '|-\n')
			table.insert(res_table, string.format("!colspan=2|%s\n", name))
			table.insert(res_table, string.format("!colspan=4|%s\n", datum_table[3]))
		else
			local color = mw.text.trim(datum_table[5] or "")
			local checkbox_str = ""
			
			local num_limit = tonumber(mw.text.trim(datum_table[3] or ""))
			local unit_price = tonumber(mw.text.trim(datum_table[4] or ""))
			if num_limit ~= nil and unit_price ~= nil then
				checkbox_str = frame:expandTemplate{title = "商店列表复选框", args = { token_name, num_limit * unit_price, ((datum_table[1] == '1') and "是" or "否")}}
			end
			
			local num_limit_str = (num_limit ~= nil) and num_limit .. "次" or mw.text.trim(datum_table[3] or "----")
			local unit_price_str = (unit_price ~= nil) and tostring(unit_price) or mw.text.trim(datum_table[4] or "----")
			table.insert(res_table, (color ~= "") and (string.format('|-style="background:%s"\n', color)) or ('|-\n'))
			table.insert(res_table, string.format("|%s||%s||%s||%s%s\n", checkbox_str, name, num_limit_str, token_icon, unit_price_str))
		end
	end
	
	local total_str = frame:callParserFunction{name = '#Widget:ShopItemTotalCost', args = {item = token_name}}
	table.insert(res_table, '|-\n')
	table.insert(res_table, string.format('| ||colspan="2"|勾选素材总计需要||%s%s\n', token_icon, total_str))
	table.insert(res_table, '|}')
	
	return table.concat(res_table)
end

return p