Module:Character
用于管理角色数据存储与格式化的方法。
character.act(frame)(function)- 格式化信息框中的敌人 ACT 字段。
- Parameter:
frameScribunto 框架对象 (table) - Returns: 格式化后的 ACT 列表 (string)
character.paramcat(frame)(function)- 当提供
gold参数时附加“敌人”分类, 当提供wares参数时附加“商人”分类。 (通过这些参数判断应应用哪个分类。) - Parameter:
frameScribunto 框架对象 (table) - Returns: 添加分类后的原始内容 (string)
character.undertale(frame)(function)- 格式化用于链接回 Undertale Wiki 的参数。 仅在 Deltarune Wiki 使用。
- Parameter:
frameScribunto 框架对象 (table) - Returns: 格式化后的回归角色参数 (string)
character.classification(frame)(function)- 格式化光之民/暗之民分类字段, 并自动为页面添加分类。 仅在 Deltarune Wiki 使用。
- Parameter:
frameScribunto 框架对象 (table) - Returns: 所有主体分类的列表 (string)
--- 用于管理角色数据存储与格式化的方法。
-- @module character
-- @require Module:Util
-- @require Module:Yesno
-- @author KockaAdmiralac
-- @author Jacky720
require('strict')
local character = {}
-- 导入依赖模块。
local util = require('Module:Util')
local yesno = require('Module:Yesno')
-- 模块变量。
local title = mw.title.getCurrentTitle()
local bucket = mw.ext.bucket
--- 格式化信息框中的敌人 ACT 字段。
-- @function character.act
-- @param {table} frame Scribunto 框架对象
-- @returns {string} 格式化后的 ACT 列表
function character.act(frame)
local str = {}
local index = 0
local nocheck = frame.args[2]
nocheck = mw.text.trim(nocheck)
nocheck = mw.text.split(nocheck, '%s*,%s*')
for _, battle in ipairs(mw.text.split(frame.args[1], '*', true)) do
-- battle:某场战斗对应的 ACT 列表
-- 例如:"Cry (First box encounter)"
--
-- acts:除 Check 之外的 ACT
-- 例如:"Cry"
--
-- form:这些 ACT 所对应的形态或战斗
-- 例如:"First box encounter"
--
-- "nocheck" 参数(frame.args[2])
-- 用于阻止自动添加 Check。
battle = mw.text.trim(battle)
if battle ~= '' then
index = index + 1
if index == 2 then
table.insert(str, '* ')
end
if index > 1 then
table.insert(str, '\n* ')
end
local acts, form = mw.ustring.match(
battle,
'^([^(]*)%s*%(?([^)]*)%)?$'
)
if not yesno(nocheck[index] or nocheck[1], false) then
if acts ~= '' then
table.insert(str, '检查、')
else
table.insert(str, '检查、')
end
end
table.insert(str, acts)
if form ~= '' then
table.insert(str, ' (')
table.insert(str, form)
table.insert(str, ')')
end
end
end
return table.concat(str)
end
--- 当提供 <code>gold</code> 参数时附加“敌人”分类,
-- 当提供 <code>wares</code> 参数时附加“商人”分类。
-- (通过这些参数判断应应用哪个分类。)
--
-- @function character.paramcat
-- @param {table} frame Scribunto 框架对象
-- @returns {string} 添加分类后的原始内容
function character.paramcat(frame)
local param = frame.args[1]
if param == nil or param == '' then
return
end
local str = {param}
util.addCategory(str, frame.args[2])
return table.concat(str)
end
--- 格式化用于链接回 Undertale Wiki 的参数。
-- 仅在 Deltarune Wiki 使用。
--
-- @function character.undertale
-- @param {table} frame Scribunto 框架对象
-- @returns {string} 格式化后的回归角色参数
function character.undertale(frame)
local str = {}
local names = frame.args[1]
if names == nil or names == '' then
return
end
if yesno(names, false) then
if frame.args[2] == '' then
-- 未指定名称
names = title.text
else
names = frame.args[2]
end
end
-- 遍历多个名称
local namesList = {}
for _, splitName in ipairs(mw.text.split(names, '、', true)) do
local name = mw.text.trim(splitName)
table.insert(
namesList,
string.format('[[ut:%s|%s]]', name, name)
)
end
table.insert(str, table.concat(namesList, '、'))
if frame.args[2] == '' then
-- 对拥有独立信息框的 NPC 页面不添加分类
util.addCategory(str, '回归角色')
end
return table.concat(str)
end
--- 格式化光之民/暗之民分类字段,
-- 并自动为页面添加分类。
-- 仅在 Deltarune Wiki 使用。
--
-- @function character.classification
-- @param {table} frame Scribunto 框架对象
-- @returns {string} 所有主体分类的列表
function character.classification(frame)
local out = {}
for cat in mw.text.gsplit(frame.args[1], '、', true) do
local trimmedCat = mw.text.trim(cat)
if trimmedCat == 'Lightner' or trimmedCat == '光之民' then
util.addCategory(out, '光之民')
table.insert(out, '\n* [[光之民]]')
elseif trimmedCat == 'Darkner' or trimmedCat == '暗之民' then
util.addCategory(out, '暗之民')
table.insert(out, '\n* [[暗之民]]')
end
end
return table.concat(out)
end
return character