WIKI公告栏
欢迎各位引航者访问卡拉彼丘WIKI,由于游客访问页面会有一定的页面旧版缓存,建议你登陆B站账号进行浏览,如果您觉得本WIKI有帮助到你,欢迎推荐给身边的引航者。
欢迎各位引航者访问卡拉彼丘WIKI,由于游客访问页面会有一定的页面旧版缓存,建议你登陆B站账号进行浏览,如果您觉得本WIKI有帮助到你,欢迎推荐给身边的引航者。
全站通知:
模块:角色
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:角色/doc创建
local p = {}
local format = string.format
local data = mw.loadData("Module:角色/Data")
local a = require("Module:ACandy")
local tr, th, td = a.tr, a.th, a.td
local Raw = a.Raw
local RoleCommentsTitle = { ["令"] = "令的手工俱乐部",
["香奈美"] = "香奈美的粉丝团",
["芙拉薇娅"] = "芙拉薇娅的围棋室",
["加拉蒂亚·利里"] = "加拉蒂亚的魔术团",
["玛德蕾娜·利里"] = "玛德蕾娜的绘梦室",
["米雪儿·李"] = "米雪儿的猫猫军团",
["绯莎"] = "绯莎的秘训基地",
["伊薇特"] = "伊薇特的小熊团",
["信"]= "信的侦探推理社",
["奥黛丽·格罗夫"] = "奥黛丽的执事团",
["明"] = "明的暗影刺客团",
["梅瑞狄斯"] = "梅瑞狄斯科考团",
["星绘"]= "星绘的疗愈小屋",
["拉薇"]= "拉薇的茗香茶社",
["艾卡"] = "艾卡的吉他室",
["心夏"]= "心夏的无人机小队",
["白墨"] = "白墨的涂鸦社",
["珐格兰丝"] = "珐格兰丝的植物园"
}
local function getPageTitle()
return mw.title.getCurrentTitle().text
end
-------角色页角色模板角色信息部分-------
p["角色信息"] = function(frame)
local roleName = getPageTitle()
local RoleInfo = data[roleName]
assert(RoleInfo, "角色数据不存在")
local Th = th[{ colspan = 2, style = "text-align:center;border-radius: 0;" }]
local Td = td[{ style = "border-radius: 0;" }]
local CommentsTitle = RoleCommentsTitle[roleName]
local css = frame:callParserFunction('#css', '.comments-title { max-width: 0; white-space: nowrap; }' ..
'.comments-title::before { position: absolute; content: "' .. CommentsTitle .. '"; }')
--- 定位图标链接
local function ProfessionIconLink(profession)
return a.span { class = "badge rounded-pill bg-primary", style = "padding: 5px; border-radius: 5px; background-color: #DDD",
Raw(format(
'[[File:角色定位-%s.png|20px|link=角色定位#%s|alt=]] [[角色定位#%s|<span style="color: #000;">%s</span>]]',
profession, profession, profession, profession
))
}
end
--- 阵营图标链接
local function CampIconLink(camp)
return Raw(format(
'[[File:%s阵营小图标.png|30px|link=角色阵营#%s|alt=]] [[角色阵营#%s|<span style="color: #000;">%s</span>]]',
camp, camp, camp, camp
))
end
local Roletable = a.table { class = "klbqtable", style = "text-align: center; width: 100%; font-weight: bold;",
tr {
td { rowspan = 3, colspan = 2, style = "border-bottom-left-radius: 0;", "[[文件:", roleName, "头像.png|80px|class=radius50]]" },
td { style = "border-bottom-right-radius: 0;", roleName },
},
tr {
Td { RoleInfo.NameEn },
},
tr {
Td / a.span { lang = "ja", RoleInfo.NameJp }
},
tr {
Th "性别",
Td { RoleInfo.Sex },
},
tr {
Th "身份",
Td / a.span { class = "badge rounded-pill bg-primary", style = "color: #fff;padding: 5px;border-radius: 5px;background-color: #C02A35",
RoleInfo.Title,
},
},
tr {
Th "定位",
Td { ProfessionIconLink(RoleInfo.Profession) },
},
tr {
Th "阵营",
Td { CampIconLink(RoleInfo.Camp) },
},
tr {
th { colspan = 2, style = "text-align:center;border-top-left-radius: 0;", "简介" },
td { style = "border-top-right-radius: 0;", RoleInfo.Desc },
},
}
return a.h2 "角色信息", Roletable, a.br, css
end
-------角色页角色模板角色设定部分-------
p["角色设定"] = function()
local roleName = getPageTitle()
local RoleInfo = data[roleName]
assert(RoleInfo, "角色数据不存在")
local function Row(tableHeader, tableData)
return tr {
th[{ style = "width: 25%;" }](tableHeader),
td(tableData),
}
end
local zhcn = mw.language.new("zh-cn")
-- 检查生日是否为有效的日期格式
local formattedBirthday
if RoleInfo.Birthday == "" then
formattedBirthday = RoleInfo.Birthday
else
formattedBirthday = zhcn:formatDate("Mj日", RoleInfo.Birthday)
end
local Roletable = a.table { class = "klbqtable", style = "font-size: 14px; width: 100%; text-align: center;",
Row("声优", { "中文:", RoleInfo.CvCn, a.br, "日文:", RoleInfo.Cv }),
Row("画师", "卡丘画师协会"),
Row("生日", formattedBirthday),
Row("星座", RoleInfo.Constellation),
Row("年龄", RoleInfo.Age),
Row("身高", RoleInfo.Height),
Row("体重", RoleInfo.Weight),
Row("活动区域", RoleInfo.Apartment),
}
return a.h2 "角色设定", Roletable
end
-------角色页角色模板角色技能部分-------
p["角色技能"] = function(frame)
local args = frame:getParent().args
local role = getPageTitle()
local skillTypeToNum = {
["主动"] = 1,
["被动"] = 2,
["终极"] = 3,
}
local skills = {} -- 1、2、3分别为主动、被动、终极技能
for i = 1, 3 do
local prefix = "技能" .. i
skills[i] = {
name = args[prefix],
desc = args[prefix .. "描述"],
video = args[prefix .. "视频演示"],
analysis = args[prefix .. "解析"],
}
end
local div, span = a.div, a.span
local divtabs1 = div[{ class = "resp-tab-content", style = "display: block; text-align: left; height: 240px;" }]
local divtabs2 = div[{ class = "resp-tab-content", style = "text-align: left; height: 240px;overflow: scroll" }]
local function SkillDetail(skillType)
local num = skillTypeToNum[skillType]
local skill = skills[num]
local skilldata = mw.text.jsonDecode(mw.title.new('模块:弦能增幅网络/Skill.json'):getContent() or '{}')
local roleskill = skilldata[role]
assert(roleskill, "角色名称错误: " .. (role or "未知"))
local RoleSkillType1 = skillType .. "技能"
local RoleSkillType = roleskill[RoleSkillType1]
assert(RoleSkillType, "技能类型错误: " .. (RoleSkillType1 or "未知"))
local skillinfo = RoleSkillType[1]
assert(skillinfo, RoleSkillType1 .. " 中没有技能")
return {
tr / th { colspan = 2, style = "text-align:center;font-size: 18px", skillType, "技能" },
tr {
td { style = "width:20%;font-weight:bold;font-size: 20px;",
"[[文件:", role, "技能", num, ".png]]", a.br, Raw(skillinfo['Name']),
},
td[{ style = "height: 307px;" }] / div["main-line-wrap"] / div["resp-tabs"] {
a.ul { class = "resp-tabs-list clearfix",
a.li["active bili-list-style"] / span { class = "tab-panel", "技能描述" },
a.li["bili-list-style"] / span { class = "tab-panel", "视频演示" },
a.li["bili-list-style"] / span { class = "tab-panel", "技能解析" },
},
div { class = "resp-tabs-container", style = "padding:10px;font-size: 16px",
divtabs1 { Raw(skillinfo['Intro']) },
divtabs2 { Raw(skill.video) },
divtabs2 { Raw(skill.analysis) },
},
},
},
}
end
local Roleskilltable = a.table { class = "klbqtable", style = "width: 100%;text-align: center",
SkillDetail("主动"),
SkillDetail("被动"),
SkillDetail("终极"),
}
return a.h2 "角色技能", Roleskilltable
end
-------角色页角色模板角色武器部分-------
p["角色武器"] = function()
local RoleInfo = data[getPageTitle()]
assert(RoleInfo, "角色数据不存在")
local head = a.li "武器详情、原型资料等请前往武器页查看。"
local RoleWeapontable = a.table { class = "klbqtable", style = "text-align:center;width:100%",
tr {
td { style = "font-weight: bold; font-size: 18px;", "[[", RoleInfo.Weapon, "]]" },
td { style = "font-weight: bold;", RoleInfo.Weapontype },
},
tr / td { colspan = 2, RoleInfo.Weapondesc },
tr / td { colspan = 2, "[[File:", getPageTitle(), "-weapon.png|300px]]" },
}
return a.h2 "角色武器", head, RoleWeapontable
end
--- 角色筛选表页面模块
p["角色筛选"] = function()
local html = mw.html.create()
local resultList = {} -- 创建一个空表用于存储结果
for value, role in pairs(data) do
local roleHTML = html
:tag('tr'):addClass('divsort'):attr('data-param1', role.Camp):attr('data-param2', role.Profession):attr(
'data-param3', role.Weapontype)
:tag('td'):tag('div'):cssText(
'width: 80px; border-radius: 50%; margin: 0 auto; font-size: 15px; font-weight: bold; padding: 2px')
:wikitext('[[File:' .. role.Iconfile .. '|class=profilepicture|link=' .. value .. ']]<br>[[' .. value .. ']]')
:done():done()
:tag('td'):wikitext('[[文件:' .. role.Camp .. '阵营小图标.png|30px]]' .. role.Camp):done()
:tag('td'):wikitext('中文:' .. role.CvCn .. '<br>日文:' .. role.Cv):done()
:tag('td'):tag('span'):addClass('badge rounded-pill bg-primary')
:cssText('width: 60px; padding: 5px; border-radius: 5px; background-color: #DDD')
:wikitext('[[File:角色定位-' ..
role.Profession ..
'.png|20px|link=角色定位#' ..
role.Profession ..
'|alt=]] [[角色定位#' .. role.Profession .. '|<span style="color: #000">' .. role.Profession .. '</span>]]')
:done():done()
:tag('td'):wikitext(role.Weapontype):done()
:tag('td'):addClass('hidden-xs'):wikitext(role.Speed):done()
:tag('td'):addClass('hidden-xs'):wikitext(role.Armor):done()
table.insert(resultList, tostring(roleHTML)) -- 将生成的HTML代码添加到结果表中
end
local result = table.concat(resultList) -- 将结果表中的所有HTML代码连接在一起
return result -- 返回连接后的结果
end
-------角色单项信息拉取模块-------
function p.getInfo(frame)
local attr = frame.args[1]
assert(attr and attr ~= "", "缺少参数1")
attr = mw.text.trim(attr)
local name = mw.text.trim(frame.args[2] or "null")
local info = data[name]
if not (info and info[attr]) then
return mw.text.trim(frame.args[3] or "")
end
return info[attr]
end
p["角色设定卡"] = function(frame)
local rolename = frame.args[1]
local allrows = ""
local RoleInfo = data[rolename]
assert(RoleInfo, "角色数据不存在")
local zhcn = mw.language.new("zh-cn")
-- 检查生日是否为有效的日期格式
local formattedBirthday
if RoleInfo.Birthday == "" then
formattedBirthday = RoleInfo.Birthday
else
formattedBirthday = zhcn:formatDate("Mj日", RoleInfo.Birthday)
end
allrows = frame:expandTemplate {
title = '角色设定卡/core',
args = {
['中文名'] = rolename,
['中文全名'] = frame.args['中文全名'],
['相关人士'] = frame.args['相关人士'],
['角色介绍'] = frame.args['角色介绍'],
['萌点'] = frame.args['萌点'],
['英文名'] = RoleInfo.NameEn,
['日文名'] = RoleInfo.NameJp,
['阵营'] = RoleInfo.Camp,
['中文声优'] = RoleInfo.CvCn,
['日文声优'] = RoleInfo.Cv,
['年龄'] = RoleInfo.Age,
['星座'] = RoleInfo.Constellation,
['生日'] = formattedBirthday,
['身高'] = RoleInfo.Height,
['体重'] = RoleInfo.Weight,
['活动区域'] = RoleInfo.Apartment,
['Color'] = frame.args['Color']
}
}
return allrows
end
return p