bugfix20250107.1
全站通知:

模块:弦能增幅网络

来自卡拉彼丘WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

local p = {}

local bombData = mw.loadData("模块:弦能增幅网络/BombData")
local escortData = mw.loadData("模块:弦能增幅网络/EscortData")
local skillData = mw.loadData("模块:角色/SkillData")
local roleValueData = mw.loadData("模块:弦能增幅网络/RoleValueData")
local acandy = require("模块:ACandy")
local stringUtil = require("模块:StringUtil")
local a, Raw, Fragment = acandy.a, acandy.Raw, acandy.Fragment
local div, span = a.div, a.span
local format = string.format

----行样式
local function rowStyle(text, cost, changeKey)
	local row_html =
		div { class = "upgrade-row", ['data-toggle'] = "collapse", ['data-parent'] = "#mc_accordion-"..changeKey, ['data-target'] = "#mc_collapse-"..changeKey,
			div { class = "left-shade" },
			div { class = "upgrade-text", text },
			div { class = "upgrade-cost", cost..'[[文件:图标-能量点.png|15px|link=]]' },
		}
	return tostring(row_html)
end

----组样式
local function groupStyle(type, icontype, partsname, value)
	local group_html =
		div { class = "upgrade-group",
			div { class = "upgrade-top",
				span { class = "upgrade-icon upgrade-icon"..type,
					span { class = "upgrade-icon-inner", icontype },
				},
				span { class = "upgrade-name", partsname },
				span { class = "upgrade-triangle" },
			},
			div { class = "upgrade-options", Raw(value) },
		}

	return group_html
end


function p.escortMode(frame)
	local args = frame.args
	local icon = frame.args['icon']
	local iconType = frame.args['type']
	local roleName = frame.args['name']
	local groupType = frame.args['grouptype']

	local groupIcons = {
		["1"] = "[[文件:图标-超弦进化系统 "..icon.."改.png|link=]]",
		["2"] = "[[文件:"..icon.."|link=]]",
		["3"] = "[[文件:图标-超弦进化系统 8改.png|link=]]",
		["4"] = "[[文件:图标-超弦进化系统_10改.png|link=]]",
		["5"] = "[[文件:图标-超弦进化系统_11改.png|link=]]",
	}
	local iconsType = groupIcons[iconType]
	assert(iconsType, "类型错误")

	local roleData = escortData[roleName]
	assert(roleData, "角色名称错误: "..(roleName or "未知"))
	local partsData = roleData[groupType]
	assert(partsData, "类型错误: "..(groupType or "未知"))
	local partsName = partsData['Name']

	-- 获取所有的Desc和Need
	local partsTexts = partsData['Desc']
	local partsCosts = partsData['Need']

	-- 处理技能觉醒内容
	local roleSkill = skillData[roleName]
	assert(roleSkill, "角色名称错误: "..(roleName or "未知"))
	local roleSkillTypeData = roleSkill["技能觉醒"]

	local awakeningSkillInfo1 = roleSkillTypeData[1]
	local awakeningSkillInfo2 = roleSkillTypeData[2]
	local awakeningSkillInfo3 = roleSkillTypeData[3]

	-- 动态生成分组内容
	local groupedRows = {}
	local keyTemplate = "Escort%sGroup%dChange"
	for i, desc in ipairs(partsTexts) do
		local desc = partsTexts[i]
		local cost = partsCosts[i]
		if desc and desc ~= "" then
			local changeIndex = i
			local currentChangeKey = format(keyTemplate, groupType, i)
			local changeValue = args[currentChangeKey] or ""
			local collapseHTML = ""

			local rowHTML = rowStyle(desc, cost, currentChangeKey)
			if currentChangeKey == "EscortParts6Group1Change" then
				changeValue = awakeningSkillInfo1['Intro']
			elseif currentChangeKey == "EscortParts7Group1Change" then
				changeValue = awakeningSkillInfo2['Intro']
			elseif currentChangeKey == "EscortParts7Group2Change" then
				changeValue = awakeningSkillInfo3['Intro']
			end
			collapseHTML = ('<div class="panel-collapse collapse growthcollapse" id="mc_collapse-%s">%s</div>'):format(
				currentChangeKey, changeValue)
			table.insert(groupedRows, rowHTML..collapseHTML)
		end
	end

	-- 构建最终输出(使用原始type参数)
	local rows = table.concat(groupedRows, '\n')  -- 添加换行增强可读性
	local Escort_html = groupStyle(iconType, iconsType, partsName, rows)
	return Escort_html
end

function p.bombMode(frame)
	local args = frame.args
	local icon = frame.args['icon']
	local iconType = frame.args['type']
	local roleName = frame.args['name']
	local groupType = frame.args['grouptype']

	local groupIcons = {
		["1"] = "[[文件:图标-超弦进化系统 "..icon.."改.png|link=]]",
		["2"] = "[[文件:"..icon.."|link=]]",
		["3"] = "[[文件:图标-超弦进化系统 8改.png|link=]]",
		["4"] = "[[文件:图标-超弦进化系统_10改.png|link=]]",
	}
	local iconsType = groupIcons[iconType]
	assert(iconsType, "类型错误")

	local roleData = bombData[roleName]
	assert(roleData, "角色名称错误: "..(roleName or "未知"))
	local partsData = roleData[groupType]
	assert(partsData, "类型错误: "..(groupType or "未知"))
	local partsName = partsData['Name']

	-- 获取所有的Desc和Need
	local partsTexts = partsData['Desc']
	local partsCosts = partsData['Need']

	-- 动态生成分组内容
	local groupedRows = {}
	local keyTemplate = "Bomb%sGroup%dChange"
	for i, desc in ipairs(partsTexts) do
		local desc = partsTexts[i]
		local cost = partsCosts[i]
		if desc and desc ~= "" then
			local changeIndex = i
			local currentChangeKey = format(keyTemplate, groupType, i)
			local changeValue = args[currentChangeKey] or ""

			local rowHTML = rowStyle(desc, cost, currentChangeKey)
			local collapseHTML = ('<div class="panel-collapse collapse growthcollapse" id="mc_collapse-%s" style="padding: 5px;">%s</div>')
				:format(currentChangeKey, changeValue)

			table.insert(groupedRows, rowHTML..collapseHTML)
		end
	end

	-- 构建最终输出(使用原始type参数)
	local rows = table.concat(groupedRows, '\n')  -- 添加换行增强可读性
	local bomb_html = groupStyle(iconType, iconsType, partsName, rows)
	return bomb_html
end

function p.teamMode(frame)
	local args = frame.args
	local icon = args['icon']
	local roleName = args['name']
	local groupType = args['grouptype']

	local icons = table.concat({ "[[文件:图标-超弦进化系统 ", icon, "改.png|link=]]" })

	local roleData = bombData[roleName]
	assert(roleData, "角色名称错误: "..(roleName or "未知"))
	local partsData = roleData[groupType]
	assert(partsData, "类型错误: "..(groupType or "未知"))
	local partsname = partsData['Name']

	-- 获取所有的Desc和Need
	local partstexts = partsData['Desc']
	local partscosts = partsData['Need']

	-- 动态生成分组内容
	local groupedRows = {}
	local keyTemplate = "Team%sGroup%dChange"
	for i, desc in ipairs(partstexts) do
		local desc = partstexts[i]
		local cost = partscosts[i]
		if desc and desc ~= "" then
			local changeIndex = i
			local currentChangeKey = format(keyTemplate, groupType, i)
			local changeValue = args[currentChangeKey] or ""

			local rowHTML = rowStyle(desc, cost, currentChangeKey)
			local collapseHTML = ('<div class="panel-collapse collapse growthcollapse" id="mc_collapse-%s" style="padding: 5px;">%s</div>')
				:format(currentChangeKey, changeValue)

			table.insert(groupedRows, rowHTML..collapseHTML)
		end
	end

	-- 构建最终输出(使用原始type参数)
	local rows = table.concat(groupedRows, '\n')  -- 添加换行增强可读性
	local team_html = groupStyle('1', icons, partsname, rows)
	return team_html
end

--角色属性表格
function p.roleProperties(frame)
	local roleName = frame.args[1]

	local formatter = stringUtil.Formatter [=[
{{| class="klbqtable" style="width:100%;"
|-
! colspan="4" style="background-color: #d9edf7;" class="text-center"|超弦体数值
|-
! style="width: 25%"|生命值
| 130
! style="width: 25%"|护甲值
| {护甲值}
|-
! 护甲每次回复值
| {护甲每次回复值}
! 移速变化
| {移速变化}
|-
! 弦化移速
| 66
! 弦化减伤比例
| 33
|}}
]=]

	local role = roleValueData[roleName]
	assert(roleName, "角色名称错误")
	local function replacer(key)
		return role[key] or ""
	end
	return formatter(replacer)
end

--爆破模式角色技能觉醒
local function awakeningicons(icons)
	local awakeningicons = {
		["方"] = "[[文件:图标-超弦进化-方形.png]]",
		["圆"] = "[[文件:图标-超弦进化-圆形.png]]",
		["角"] = "[[文件:图标-超弦进化-三角.png]]",
	}
	local icons = awakeningicons[icons]
	assert(icons, "形状名称错误")
	return icons
end

function p.awakening(frame)
	local roleName = frame.args['name']

	local roleskillinfo = skillData[roleName]
	assert(roleskillinfo, "角色名称错误: "..(roleName or "未知"))
	local RoleSkill1 = roleskillinfo["技能觉醒"][1]
	local RoleSkill2 = roleskillinfo["技能觉醒"][2]
	local RoleSkill3 = roleskillinfo["技能觉醒"][3]

	local roleskillawakening = bombData[roleName]
	assert(roleskillawakening, "角色名称错误: "..(roleName or "未知"))
	local RoleSkill1awakening = mw.text.split(roleskillawakening["技能觉醒"]["Active1Need"], ',')
	local RoleSkill2awakening = mw.text.split(roleskillawakening["技能觉醒"]["Active2Need"], ',')
	local RoleSkill3awakening = mw.text.split(roleskillawakening["技能觉醒"]["Active3Need"], ',')

	local iconsHTML1, iconsHTML2, iconsHTML3 = "", "", ""
	for _, icon in ipairs(RoleSkill1awakening) do
		iconsHTML1 = iconsHTML1..awakeningicons(icon).." "
	end
	for _, icon in ipairs(RoleSkill2awakening) do
		iconsHTML2 = iconsHTML2..awakeningicons(icon).." "
	end
	for _, icon in ipairs(RoleSkill3awakening) do
		iconsHTML3 = iconsHTML3..awakeningicons(icon).." "
	end

	local awakeningSkill1 = p.AwakeningRow(iconsHTML1, RoleSkill1["Name"], RoleSkill1["Intro"])
	local awakeningSkill2 = p.AwakeningRow(iconsHTML2, RoleSkill2["Name"], RoleSkill2["Intro"])
	local awakeningSkill3 = p.AwakeningRow(iconsHTML3, RoleSkill3["Name"], RoleSkill3["Intro"])

	local awakeningHTML = Fragment {
		div { class = "col-sm-4", Raw(awakeningSkill1) },
		div { class = "col-sm-4", Raw(awakeningSkill2) },
		div { class = "col-sm-4", Raw(awakeningSkill3) },
	}
	return awakeningHTML
end

--爆破模式角色技能觉醒行样式
function p.AwakeningRow(icons_html, Name, Intro)
	local awakeningHTML = div { class = "awakening-container",
		div { class = "awakening-icons", icons_html },
		div { class = "awakening-name", "'''觉醒"..":"..Name.."'''" },
		div { class = "awakening-text", Intro },
	}
	return awakeningHTML
end

return p