此处为全站公告,通常对读者进行申明或对该WIKI某些规则进行公告,请在确认后修改本通告。
本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~
编辑全站公告 • 编辑帮助:目录 • BWIKI反馈留言板
全站通知:
模块:Affinity
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:Affinity/doc创建
local p = {}
local function formatSkillDesc(desc)
if not desc then return "" end
desc = tostring(desc)
desc = desc:gsub("\\u000b", "<br>")
desc = desc:gsub('\r\n', '<br>')
desc = desc:gsub('\n', '<br>')
desc = desc:gsub(string.char(11), "<br>")
desc = desc:gsub("##([^#]+)#%d+#", "%1")
desc = desc:gsub("<[Cc]olor=[^>]+>", '<span style="color:#fb8037;">')
desc = desc:gsub("</[Cc]olor>", "</span>")
desc = desc:gsub("<sprite name=\"acrchives_certified_richtext\">","[[file:默契_肯定.png|link=|35px]]")
desc = desc:gsub("<sprite name=\"acrchives_falsified_richtext\">","[[file:默契_存疑.png|link=|35px]]")
return desc
end
function p.main(frame)
local args = frame.args or {}
local char = args[1] or ""
local AffinityType = args[2] or ""
local IdTitle = mw.title.new('Mediawiki:Char.json')
local itemcontent = IdTitle and IdTitle:getContent() or nil
local IdData = mw.text.jsonDecode(itemcontent)
local id = tostring(IdData[char])
if not id then
return "角色不存在"
end
local title = mw.title.new('Mediawiki:char/' .. id .. '.json')
local content = title and title:getContent() or nil
local data = mw.text.jsonDecode(content or '{}')
local rawContent = content or ''
if AffinityType == '档案' then
local story = data.story or {}
local parts = {}
for i = 2, 13 do
local key = 'ArchiveContent' .. i
local item = story[key]
local title = ''
local desc = ''
if type(item) == 'table' then
title = item.title or ''
desc = item.desc or ''
else
title = ''
desc = item or ''
end
title = formatSkillDesc(title)
desc = formatSkillDesc(desc)
table.insert(parts, '<div class="sora_sora_affinity_archives_box ">')
table.insert(parts, '<div class="sora_sora_affinity_archives_title">' .. title .. '</div>')
table.insert(parts, '<div class="sora_sora_affinity_archives_desc">' .. desc .. '</div>')
table.insert(parts, '</div>')
end
return table.concat(parts, '\n')
end
if AffinityType == '语音' then
local voice = data.Voice or {}
local sections = {
{ key = 'Daily_Voice', cls = 'sora_sora_affinity_voice_daily', title = '日常语音' },
{ key = 'Combat_Voice', cls = 'sora_sora_affinity_voice_combat', title = '战斗语音' },
{ key = 'other_voice', cls = 'sora_sora_affinity_voice_other', title = '祝福语音' },
}
local parts = {}
for _, sec in ipairs(sections) do
local secdata = voice[sec.key] or {}
local keys = {}
local function extractTopLevelKeys(raw, objKey)
if not raw or raw == '' then return nil end
local pattern = '"' .. objKey .. '"%s*:%s*{'
local s, e = raw:find(pattern)
if not s then return nil end
local openPos = raw:find('{', e)
if not openPos then return nil end
local depth = 1
local i = openPos + 1
local len = #raw
local out = {}
while i <= len do
local c = raw:sub(i,i)
if c == '{' then
depth = depth + 1
i = i + 1
elseif c == '}' then
depth = depth - 1
if depth == 0 then break end
i = i + 1
elseif c == '"' and depth == 1 then
local j = i + 1
while j <= len do
local ch = raw:sub(j,j)
if ch == '"' then break end
if ch == '\\' then j = j + 2 else j = j + 1 end
end
if j > len then break end
local keyname = raw:sub(i+1, j-1)
table.insert(out, keyname)
local colonPos = raw:find(':', j)
if not colonPos then i = j + 1 else i = colonPos + 1 end
else
i = i + 1
end
end
return out
end
local ordered = extractTopLevelKeys(rawContent, sec.key)
if ordered and #ordered > 0 then
keys = ordered
else
for k, _ in pairs(secdata) do table.insert(keys, k) end
table.sort(keys, function(a, b)
local pa, na = a:match("^(.-)(%d+)$")
local pb, nb = b:match("^(.-)(%d+)$")
if pa and pb then
if pa == pb then
return tonumber(na) < tonumber(nb)
else
return pa < pb
end
end
return a < b
end)
end
if #keys > 0 then
table.insert(parts, '<div class="' .. sec.cls .. '">')
table.insert(parts, '<div class="' .. sec.cls .. '_title"><span>' .. sec.title .. '</span></div>')
for _, k in ipairs(keys) do
local item = secdata[k]
local ititle = ''
local desc = ''
if type(item) == 'table' then
ititle = item.title or k
desc = item.desc or ''
else
ititle = k
desc = item or ''
end
ititle = formatSkillDesc(ititle)
desc = formatSkillDesc(desc)
table.insert(parts, '<div class="sora_sora_affinity_voice_box">')
table.insert(parts, '<div class="sora_sora_affinity_voice_title">' .. ititle .. '</div>')
table.insert(parts, '<div class="sora_sora_affinity_voice_desc">' .. desc .. '</div>')
table.insert(parts, '</div>')
end
table.insert(parts, '</div>')
end
end
return table.concat(parts, '\n')
end
end
return p

沪公网安备 31011002002714 号