Module:Persona
跳到导航
跳到搜索
《真·女神转生》大系数据编纂和样式设计统一模块。已封装为各种模板,请参见模板说明。
与 Megami Tensei Wiki 同步修改,但有较大本地化差异。
结构
|
|
数据库
基础基础数据字段套组
|
技能《真·女神转生》系列《女神异闻录》系列
|
维护
可参与的维护工作
请至《真·女神转生》大系编辑者群(832689630)中进一步了解。
可阅读 User:Greykid/参考手册 了解更多相关知识。
更新日志
展开往期更新日志 |
---|
- 2020/11/7-8:大幅拆分、调整模块结构,为《真·女神转生III》《真·女神转生V》数据编写做准备。
- 2020/12/8:增「连携技能表」「合体表」,调格式。
- 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:expandTemplate{ title = 'refn', args = {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
- -- 简繁转换设置
- local function sinotrans(zh, zhsc)
- return '-{zh-hant:' .. zh .. '; zh-hans:' .. zhsc .. ';}-'
- 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 = '<span style="font-weight:bold">' .. result .. ':</span>' .. 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 = '<span style="font-weight:bold">' .. result .. ':</span>' .. 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 = '<span style="font-weight:bold">' .. result .. ':</span>' .. personaTrait.effect end
- if personaTrait.note then result = result .. refer(frame, personaTrait.note) end
- return result
- end
- return p