置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Persona

猛汉♂百科,万男皆可猛的百科全书!转载请标注来源页面的网页链接,并声明引自猛汉百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [查看] [编辑] [历史] [刷新]

真·女神转生》大系数据编纂和样式设计统一模块。已封装为各种模板,请参见模板说明。

Megami Tensei Wiki 同步修改,但有较大本地化差异。

结构

数据库

维护

可参与的维护工作

请至《真·女神转生》大系编辑者群(832689630中进一步了解。

可阅读 User:Greykid/参考手册 了解更多相关知识。

更新日志

往期更新日志
  • 2020/5/10:完成移植工作,原始范本借鉴自Megami Tensei Wiki 2020/3/12版本。完成汉化工作,简化部分关键词,修改部分水土不服的样式。
  • 2020/6/30:跟进更新Megami Tensei Wiki 2020/6/2。紧急修复“祝”“咒”关键字。完善部分汉化,补充部分关键词。从现在开始已经可以使用标准“弱点和抗性”写法了。为避免版权争议完全重构了样式,暂时还没想好怎么样比较好看,先调成标准wikitable了。
  • 2020/7/10:增加{{Arcana}}(原位替代){{Skill}}(替代{{Pskill}}){{SkillTable}}(替代psk废案)模板。调整格式,添加功能。现在已经和范本相去甚远啦。
  • 2020/7/13-16:增加第一个中英日语言转换模板{{Persona}}。未来还会尝试解决其他地方的语言输入问题。修复部分问题。终于解决了hover+ruby问题。添加P5R特性专用填写模板{{PersonaTrait}}。
  • 2020/8/7:修复{{SkillTable}}的问题,已达成预期效果。
  • 2020/8/10-11:完善样式,添加中英技能名称、人格面具名称的填写规则,现在可以直接用中文填写啦!
  • 2020/8/20-21:现在已经可以完全替代旧模板了。
  • 2020/9/5:添加更多自定义功能。
  • 2020/11/7-8:大幅拆分、调整模块结构,为《真·女神转生III》《真·女神转生V》数据编写做准备。
  • 2020/12/8:增「连携技能表」「合体表」,调格式。
  1. local getArgs = require('Module:Arguments').getArgs
  2. local getGames = require('Module:Psk/Gamedata')
  3. local p = {}
  4. -- 實現 #invoke 函数式調用
  5. local function makeInvokeFunction(funcName)
  6. return function (frame)
  7. local args = getArgs(frame, {parentOnly = true})
  8. return p[funcName](args)
  9. end
  10. end
  11. -- 實現 #invoke 函数式調用,保留frame
  12. local function makeInvokeFunctionWithFrame(funcName)
  13. return function (frame)
  14. local args = getArgs(frame, {parentOnly = true})
  15. return p[funcName](frame, args)
  16. end
  17. end
  18. -- 字符串MD5 Hash,调用Hash模板
  19. local function hash(frame, text)
  20. return frame:expandTemplate{ title = 'Hash', args = {text} }
  21. end
  22. -- 添加注释
  23. local function refer(frame, refernote)
  24. if mw.title.getCurrentTitle():inNamespace('') and refernote ~= nil and refernote ~= '' then
  25. return frame:expandTemplate{ title = 'refn', args = {refernote, group = '注', name = hash(frame, refernote) } }
  26. else
  27. return ''
  28. end
  29. end
  30. -- ruby格式
  31. local function ruby(text1, text2, lang)
  32. if lang == nil then
  33. return '<ruby><rb>' .. text1 .. '</rb><rp> (</rp><rt style="font-size:.75em">' .. text2 .. '</rt><rp>) </rp></ruby>'
  34. else
  35. return '<ruby><rb>' .. text1 .. '</rb><rp> (</rp><rt style="font-size:.75em" lang="' .. lang .. '">' .. text2 .. '</rt><rp>) </rp></ruby>'
  36. end
  37. end
  38. -- inline ruby格式
  39. local function ilruby(text1, text2, lang)
  40. if lang == nil then
  41. return text1 .. '(' .. text2 .. ')'
  42. else
  43. return text1 .. '({{lj|' .. text2 .. '}})'
  44. end
  45. end
  46. -- 简繁转换设置
  47. local function sinotrans(zh, zhsc)
  48. return '-{zh-hant:' .. zh .. '; zh-hans:' .. zhsc .. ';}-'
  49. end
  50. -- Hover效果,调用TextHover模板
  51. local function hover(frame, text1, text2)
  52. return frame:expandTemplate{ title = 'TextHover', args = {text1, text2, 'before', 'center', tag = 'span'} }
  53. end
  54. -- Wiki文本解析,调用Eval模板
  55. local function wikitext(frame, text1)
  56. return frame:expandTemplate{ title = 'Eval', args = {'wikitext', text1} }
  57. end
  58. -- 关键字消歧义
  59. local function get_prop(args)
  60. local prop = {}
  61. for k, v in pairs(require('Module:Psk/Property_names')) do
  62. for _, name in ipairs(v) do
  63. if args[name] then
  64. prop[k] = args[name]
  65. break
  66. end
  67. end
  68. prop[k] = prop[k] or v.default
  69. end
  70. return prop
  71. end
  72. -- 人格面具P5R特性信息模块
  73. p.trait = makeInvokeFunctionWithFrame('_trait')
  74. function p._trait(frame, args)
  75. local data = require('Module:Persona/Traits')
  76. local pname = args[1] or args.name or args.Name or ''
  77. local result = ''
  78. if args[1] == 'zh' or args[1] == 'zhsc' or args[1] == 'jp' then
  79. pname = args[2] or args.name or args.Name or ''
  80. for v, personaTrait in pairs(data.traits) do
  81. if personaTrait.namezh == pname or personaTrait.namezhsc == pname or personaTrait.namejp == pname then
  82. local result = ''
  83. if personaTrait.namezh and personaTrait.namezh ~= '' then
  84. if args[3] == 'lj' then
  85. result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), personaTrait.namejp, 'ja')
  86. else
  87. result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), v)
  88. end
  89. else
  90. result = result .. v
  91. end
  92. if personaTrait.effect and personaTrait.effect ~= '' then result = '<span style="font-weight:bold">' .. result .. ':</span>' .. personaTrait.effect end
  93. if personaTrait.note then result = result .. refer(frame, personaTrait.note) end
  94. return result
  95. end
  96. end
  97. return '<span style="color:red; font-weight:bold">未識別的特性。請手動添加至[[模块:psk/Trait]]。</span>'
  98. end
  99. personaTrait = data.traits[pname]
  100. if personaTrait == nil then
  101. for v, personaTrait in pairs(data.traits) do
  102. if personaTrait.name2 == pname or personaTrait.namezh == pname or personaTrait.namezhsc == pname then
  103. local result = ''
  104. if personaTrait.namezh and personaTrait.namezh ~= '' then
  105. if args[2] == 'lj' then
  106. result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), personaTrait.namejp, 'ja')
  107. else
  108. result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), v)
  109. end
  110. else
  111. result = result .. v
  112. end
  113. if personaTrait.effect and personaTrait.effect ~= '' then result = '<span style="font-weight:bold">' .. result .. ':</span>' .. personaTrait.effect end
  114. if personaTrait.note then result = result .. refer(frame, personaTrait.note) end
  115. return result
  116. end
  117. end
  118. return '<span style="color:red; font-weight:bold">未識別的特性。請手動添加至[[模块:psk/Trait]]。</span>'
  119. end
  120. local result = ''
  121. if personaTrait.namezh and personaTrait.namezh ~= '' then
  122. if args[2] == 'lj' then
  123. result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), personaTrait.namejp, 'ja')
  124. else
  125. result = result .. ruby(sinotrans(personaTrait.namezh, personaTrait.namezhsc), pname)
  126. end
  127. else
  128. result = result .. pname
  129. end
  130. if personaTrait.effect and personaTrait.effect ~= '' then result = '<span style="font-weight:bold">' .. result .. ':</span>' .. personaTrait.effect end
  131. if personaTrait.note then result = result .. refer(frame, personaTrait.note) end
  132. return result
  133. end
  134. return p