置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:云图计划心智人形

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [创建] [刷新]
local dollName
local p = {}

--[[
参数str格式示例:
网安精英(默认投影)
*扩容Live2D
要伪装成他人对一个白帽客来说很容易,要安心做自己却很难。
----
天网深潜者(完型投影)
*Live2D
在对白帽客展开攻击时,好好想想自己是不是那条待钓的鱼。
----
最初口令(唤醒)
*模型
保护您的信息安全?从唤醒我的第一秒开始,我就在做了哦。
]]
local function structureSkinData(str)
	local raws = mw.text.split(str, '%s*\n%-%-%-%-\n%s*')
	local skins = {}
	local flag = false -- 是否专门写了“扩容投影”。不知道变量怎么起名了

	for i, v in ipairs(raws) do
		local name, series, desc
		local args = {}

		-- 提取args,在v中移除相应行
		v = mw.ustring.gsub(v, '\n%*[ \t]*([^\n]+)', function(s)
			args[mw.text.trim(s)] = true
			return ''
		end)

		-- 提取name, series, desc
		name, series, desc = mw.ustring.match(v, '([^\n]*)(%b())%s-\n%s*(.+)')

		if name then   -- 提取成功时
			if series == '()' then
				series = nil
			else
				series = mw.ustring.sub(series, 2, -2)  -- 去掉括号
				if series == '扩容投影' then
					flag = true
				end
			end
		else           -- 提取失败时
			name = '参数出错'
			series = nil
			desc = '请检查以下代码:<pre>'..raws[i]..'</pre>'
			args = {}
		end

		skins[i] = {
			name = name,
			series = series,
			desc = desc,
			args = args
		}
	end

	-- 在没有手动录入的情况下,自动添加扩容投影
	if not flag then
		local args = {
			['模型'] = skins[1].args['扩容模型'],
			['Live2D'] = skins[1].args['扩容Live2D'],
			['动态立绘'] = skins[1].args['扩容动态立绘']
		}
		table.insert(skins, 2, {
			name = skins[1].name,
			series = '扩容投影',
			desc = skins[1].desc,
			args = args
		})
	end
	return skins
end

-- 生成一个心智投影用到的tab
local function genSkinItem(frame, skin)
	local label = table.concat({
		skin.args['模型']
			and '<div class="pnc-figr-label" style="background:#00F2FE">模型</div>' or '',
		skin.args['Live2D']
			and '<div class="pnc-figr-label" style="background:#F6BF00">Live2D</div>' or '',
		skin.args['动态立绘']
			and '<div class="pnc-figr-label" style="background:#F6BF00"><div style="transform:scale(.9)">动态立绘</div></div>' or ''
	})

	return frame:expandTemplate{
		title = '云图计划心智人形/投影tab',
		args = {
			dollName = dollName,
			name = skin.name,
			series = skin.series,
			label = label,
			desc = skin.desc
		}
	}
end

function p.neursoulItems(frame)
	local parentArgs = frame:getParent().args
	dollName = parentArgs['姓名']
	local skins = structureSkinData(parentArgs['投影'] or frame.args['投影'])
	local items = {}
	for i, skin in ipairs(skins) do
		items[i] = genSkinItem(frame, skin)
	end
	return table.concat(items)
end

return p