如果你看到本段文字,说明该页面未正常加载全局JS,部分功能将无法使用,请点击 刷新 重新加载页面。
如果打开页面显示缩略图创建出错,请点击刷新或页面右上WIKI功能中的刷新按钮清除页面缓存并刷新,如果还有问题,请多尝试几次。
全站通知:

模块:关卡图鉴

来自碧蓝航线WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:关卡图鉴/doc创建

--[[
{{#invoke: 关卡图鉴| 生成掉落列表
| 分隔符=、
| 1 =  拉菲、  Z23、  标枪、  狐提、 麦考尔、  天后、  唐斯、  卡辛、  彗星、  新月、  小天鹅、  克雷文
| 2 = 赤城、加贺
| 3 = 厌战、胡德、威尔士亲王
| 标题1= 驱逐
| 属性1= 掉落驱逐
| 标题2= 航母
| 属性2= 掉落航母
| 标题3= 战舰
| 属性3= 掉落战舰
}}

--]]

local p = {}

SEPARATOR = '、'

Text = mw.text
--------------------------------------------------
--主要过程
--------------------------------------------------

--生成掉落列表并设置行内属性
function p.GenerateDropList(frame)
	local chapterID = frame.args['地图编号']
	local arg = parseArgument(frame.args)
	_G.frame = frame
	local sep = arg['分隔符'] or SEPARATOR
-- {| style="width:100%;" class="table-DropList"
	local content = [[
]]
	
	for i, list in ipairs(arg) do
		if list and #list > 0 and Text.trim(list[1]) ~= '' then
			content = content..([[
|-
! %s
| ]]):format(arg['标题'..i] or arg['属性'..i] or i)
			
			content = content..joinShiplist(list, sep)..'\n'
			if arg['属性'..i] then
				if string.upper(mw.title.getCurrentTitle().fullText) == string.upper(chapterID) then
					callSetProperty(list, arg['属性'..i], frame)
					callSetProperty(list, "掉落舰船", frame)
				end
			else
				mw.log('警告:未能找到参数"属性'..i..'",未调用#set')
			end
		end
	end
	
	--content = content.. '|}'
	return content
end

--设置行内属性
function callSetProperty(list, property, frame)
	for _, ship in ipairs(list) do
		frame:callParserFunction('#set', property, ship)
	end
end

--生成一行舰船列表
--todo 通过lua实现模板
function joinShiplist(list, sep)
	local tmp = {}
	for i, ship in ipairs(list) do
		ship = Text.trim(ship)
		if ship ~= '' then
			tmp[#tmp+1] = frame:expandTemplate {
				title = '小图标',
				args = { ship }
			}
		end
	end
	return table.concat(tmp, sep)
end

--解析invoke参数
function parseArgument(args)
	local result = {}
	for k, v in pairs(args) do
		if type(k) == 'number' then
			result[k] = Text.split(v, args['分隔符'] or SEPARATOR)
		elseif type(v) == 'string' then
			result[k] = Text.trim(v)
		else
			result[k] = v
		end
	end
	return result
end


--------------------------------------------------
-- 公开函数
--------------------------------------------------

p['生成掉落列表内容'] = p.GenerateDropList

return p