非正式攻略组招募
如果你热爱女神转生 or 异闻录系列 并且愿意为女神异闻录WIKI添砖添瓦
可以加群一起共同建设,招募详情页见攻略组招募公告
模块:Persona
所有数据和关键字的修改请先在主站 w:模块:Persona 中完成,再同步到此处。【存在部分本地化差异,请留意!(差异:简繁转换)】
关于此模块的编写和修订,请至女神转生中文维基编辑者群(832689630)中进一步了解。可阅读 w:User:Greykid/参考手册 了解更多相关知识。
索引:
- 模块:Psk
- 模块:Nakama
- 模块:Nakama/Names
- {{Nakama}} = {{Persona}}
- 模块:Persona
- 模块:Arcana
- 模块:Arcana/data
- {{Arcana}}
local getArgs = require('Module:Arguments').getArgs
local getGames = require('Module:Psk/Gamedata')
local p = {}
-- 實現 #invoke 函数式調用
local function makeInvokeFunction(funcName)
return function (frame)
local args = getArgs(frame, {parentOnly = true})
return p[funcName](args)
end
end
-- 實現 #invoke 函数式調用,保留frame
local function makeInvokeFunctionWithFrame(funcName)
return function (frame)
local args = getArgs(frame, {parentOnly = true})
return p[funcName](frame, args)
end
end
-- 字符串MD5 Hash,调用Hash模板
local function hash(frame, text)
return frame:expandTemplate{ title = 'Hash', args = {text} }
end
-- 添加注释
local function refer(frame, refernote)
if mw.title.getCurrentTitle():inNamespace('') and refernote ~= nil and refernote ~= '' then
return frame:extensionTag( 'ref', refernote, { group = '註', name = hash(frame, refernote) } )
else
return ''
end
end
-- ruby格式
local function ruby(text1, text2, lang)
if lang == nil then
return '<ruby><rb>' .. text1 .. '</rb><rp> (</rp><rt style="font-size:.75em">' .. text2 .. '</rt><rp>) </rp></ruby>'
else
return '<ruby><rb>' .. text1 .. '</rb><rp> (</rp><rt style="font-size:.75em" lang="' .. lang .. '">' .. text2 .. '</rt><rp>) </rp></ruby>'
end
end
-- inline ruby格式
local function ilruby(text1, text2, lang)
if lang == nil then
return text1 .. '(' .. text2 .. ')'
else
return text1 .. '({{lj|' .. text2 .. '}})'
end
end
-- 简繁转换设置【BWIKI本地化处理】
local function sinotrans(zh, zhsc)
return '<abbr title="' .. zh .. '">' .. zhsc .. '</abbr>'
end
-- Hover效果,调用TextHover模板
local function hover(frame, text1, text2)
return frame:expandTemplate{ title = 'TextHover', args = {text1, text2, 'before', 'center', tag = 'span'} }
end
-- Wiki文本解析,调用Eval模板
local function wikitext(frame, text1)
return frame:expandTemplate{ title = 'Eval', args = {'wikitext', text1} }
end
-- 关键字消歧义
local function get_prop(args)
local prop = {}
for k, v in pairs(require('Module:Psk/Property_names')) do
for _, name in ipairs(v) do
if args[name] then
prop[k] = args[name]
break
end
end
prop[k] = prop[k] or v.default
end
return prop
end
-- 人格面具P5R特性信息模块
p.trait = makeInvokeFunctionWithFrame('_trait')
function p._trait(frame, args)
local data = require('Module:Persona/Traits')
local pname = args[1] or args.name or args.Name or ''
local result = ''
if args[1] == 'zh' or args[1] == 'zhsc' or args[1] == 'jp' then
pname = args[2] or args.name or args.Name or ''
for v, personaTrait in pairs(data.traits) do
if personaTrait.namezh == pname or personaTrait.namezhsc == pname or personaTrait.namejp == pname then
local result = ''
if personaTrait.namezh and personaTrait.namezh ~= '' then
if args[3] == 'lj' then
result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), personaTrait.namejp, 'ja')
else
result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), v)
end
else
result = result .. v
end
if personaTrait.effect and personaTrait.effect ~= '' then result = result .. ':' .. personaTrait.effect end
if personaTrait.note then result = result .. refer(frame, personaTrait.note) end
return result
end
end
return '<span style="color:red; font-weight:bold">未識別的特性。請手動添加至[[模块:psk/Trait]]。</span>'
end
personaTrait = data.traits[pname]
if personaTrait == nil then
for v, personaTrait in pairs(data.traits) do
if personaTrait.name2 == pname or personaTrait.namezh == pname or personaTrait.namezhsc == pname then
local result = ''
if personaTrait.namezh and personaTrait.namezh ~= '' then
if args[2] == 'lj' then
result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), personaTrait.namejp, 'ja')
else
result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), v)
end
else
result = result .. v
end
if personaTrait.effect and personaTrait.effect ~= '' then result = result .. ':' .. personaTrait.effect end
if personaTrait.note then result = result .. refer(frame, personaTrait.note) end
return result
end
end
return '<span style="color:red; font-weight:bold">未識別的特性。請手動添加至[[模块:psk/Trait]]。</span>'
end
local result = ''
if personaTrait.namezh and personaTrait.namezh ~= '' then
if args[2] == 'lj' then
result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), personaTrait.namejp, 'ja')
else
result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), pname)
end
else
result = result .. pname
end
if personaTrait.effect and personaTrait.effect ~= '' then result = result .. ':' .. personaTrait.effect end
if personaTrait.note then result = result .. refer(frame, personaTrait.note) end
return result
end
return p