2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

User:Greykid/参考手册/从缩写推断作品

萌娘百科,万物皆可萌的百科全书!转载请标注来源页面的网页链接,并声明引自萌娘百科。内容不可商用。
跳转到导航 跳转到搜索

真·女神转生》大系数据编纂和样式设计统一模块 “模块:Psk” 的参考手册。操作细则和贡献方式,请进入《真·女神转生》大系编辑者群(832689630寻求进一步帮助。

本文讲述从作品的「维基标准英文缩写」推断作品,进而读取作品信息的的实现方法。

读取 Gamedata 数据库

在代码开头添加:

local getGames = require('Module:Psk/Gamedata')

Gamedata 数据库 的关键字,由下表规定:

Gamedata 数据库关键字说明
表头 游戏 名称缩写
name 游戏 萌娘百科标准名称(例如,女神异闻录5 乱战真·女神转生III
name2 游戏 完整名称(如果与 name 不同)
colorb 主色调
colorbg 信息表、信息infobox 一级表头 背景色
colorbg2 信息表、信息infobox 二级表头 背景色
font 信息表、信息infobox 一级表头 前景色
font2 信息表、信息infobox 二级表头 前景色
hp HP色带 填充颜色
mp SP色带 填充颜色
hp2 技能条 消耗HP 前景色
mp2 技能条 消耗SP 前景色
statt 信息表 五维文字 前景色
statb 信息表 五维条形图 填充颜色
fallback 遊戲對應序號作(如果有)
(表示未罗列项目均与上级一致)

其中,游戏名称缩写由下表规定:

附表 - 《真·女神转生》大系全作品
维基标准英文缩写对照表
中文标题 英文标题 维基缩写
数码恶魔物语 女神转生I Megami Tensei mt1
数码恶魔物语 女神转生II Megami Tensei II mt2
旧约·女神转生 Kyūyaku Megami Tensei kmt
女神转生I Megami Tensei kmt1
女神转生II Megami Tensei II kmt2
伪典·女神转生 东京默示录 Giten Megami Tensei: Tokyo Mokushiroku giten / gmt
真·女神转生I Shin Megami Tensei smt1
真·女神转生II Shin Megami Tensei II smt2
真·女神转生if… Shin Megami Tensei: if... smtif
真·女神转生if… 哈扎马篇 Shin Megami Tensei: if... Hazama's Chapter smtifhc
真·女神转生20XX Shin Megami Tensei: 20XX 20xx
真·女神转生20XX 恶魔角斗场 Shin Megami Tensei: 20XX Devil's Colosseum 20xxdc
真·女神转生III—夜曲 Shin Megami Tensei III: Nocturne smt3
真·女神转生 奇妙之旅 Shin Megami Tensei: Strange Journey smtsj
真·女神转生IV Shin Megami Tensei IV smt4
真·女神转生IV FINAL Shin Megami Tensei IV Apocalypse smt4a / smt4f
真·女神转生IMAGINE Shin Megami Tensei IMAGINE smtim
真·女神转生NINE Shin Megami Tensei NINE smt9
D×2 真·女神转生 解放 Shin Megami Tensei: Liberation Dx2 ldx2
最后的圣经 Last Bible lb1
最后的圣经II Last Bible II lb2
最后的圣经III Last Bible III lb3
另一部圣经 Another Bible ab
最后的圣经 特别版 Last Bible Special lbs
魔神转生 Majin Tensei majin1
魔神转生II 螺旋因果 Majin Tensei II: Spiral Nemesis majin2
RONDE —轮舞曲— Ronde ronde
真·女神转生 恶魔召唤师 Shin Megami Tensei: Devil Summoner smtds
恶魔召唤师 灵魂黑客 Devil Summoner: Soul Hackers sh
恶魔召唤师 葛叶雷道对超力军团 Devil Summoner: Raidou Kuzunoha vs. The Soulless Army raidou1
恶魔召唤师 葛叶雷道对阿巴顿王 Devil Summoner: Raidou Kuzunoha vs. King Abaddon raidou2
恶魔之子 黑之书/红之书 Devil Children Black/Red Book dkb / dkr
恶魔之子 白之书 Devil Children White Book dkw
恶魔之子 光之书/暗之书 DemiKids Light/Dark Version dkl / dkd
恶魔之子 火之书/冰之书 Devil Children Fire/Ice Book dkf / dki
恶魔之子 弥赛亚辐射 Devil Children Messiah Riser dkmr
女神异闻录Persona Megami Ibunroku Persona p1
女神异闻录2 罪 Persona 2: Innocent Sin p2is
女神异闻录2 罚 Persona 2: Eternal Punishment p2ep
女神异闻录3 Persona 3 p3
女神异闻录3 FES Persona 3 FES p3f
女神异闻录3 FES 艾吉斯篇 Persona 3 FES: The Answer p3ta
女神异闻录3 携带版 Persona 3 Portable p3p
女神异闻录 圣洁之魂 Persona -trinity soul- pts
女神异闻录4 Persona 4 p4
女神异闻录4 黄金版 Persona 4 Golden p4g
女神异闻录4 终极深夜斗技场 Persona 4 Arena p4a / p4u
女神异闻录4 无敌究极后桥背摔 Persona 4 Arena Ultimax p4au / p4u2
女神异闻录4 通宵热舞 Persona 4: Dancing All Night p4d
女神异闻录Q 迷宫暗影 Persona Q: Shadow of the Labyrinth pq
女神异闻录Q2 迷宫电影院 Persona Q2: New Cinema Labyrinth pq2
女神异闻录5 Persona 5 p5
女神异闻录5 皇家版 Persona 5 Royal p5r
女神异闻录5 乱战:魅影攻手 Persona 5 Strikers p5s
真·女神转生 卡牌召唤师 Shin Megami Tensei Trading Card: Card Summoner cs
数码恶魔传说 同调化身 Digital Devil Saga: Avatar Tuner ddsaga1
数码恶魔传说 同调化身2 Digital Devil Saga: Avatar Tuner 2 ddsaga2
女神异闻录 恶魔幸存者 Devil Survivor desu1
恶魔幸存者 超时极限 Devil Survivor Overclocked desu1oc
恶魔幸存者2 Devil Survivor 2 desu2
恶魔幸存者2 记录突破 Devil Survivor 2 Record Breaker desu2rb
魔剑X Maken X mx
幻影异闻录♯FE Tokyo Mirage Sessions ♯FE tmsfe

从缩写推断作品

在函数开头添加:

local game = args[1] or args.game or args.Game or ''
game = game:lower()

-- 英文縮寫消歧義
if game == 'mt' then game = 'mt1' end
if game == 'kmt' then game = 'kmt1' end
if game == 'smt' then game = 'smt1' end
if game == 'smtii' then game = 'smt2' end
if game == 'if' or game == 'if...' then game = 'smtif' end
if game == 'smtn' or game == 'smt3n' then game = 'smt3' end
if game == 'smtiv' then game = 'smt4' end
if game == 'imagine' or game == 'smti' then game = 'smtim' end
if game == 'gmt' or game == 'smti' then game = 'giten' end
if game == 'lb' then game = 'lb1' end
if game == 'majin' or game == 'mjt' then game = 'majin1' end
if game == 'majin2sn' or game == 'mt2sn' then game = 'majin2' end
if game == 'dssh' then game = 'sh' end
if game == 'dsrksa' then game = 'raidou1' end
if game == 'dsrkka' then game = 'raidou2' end
if game == 'desu' or game == 'smtdesur' or game == 'desur' then game = 'desu1' end
if game == 'smtdesur2' or game == 'desur2' then game = 'desu2' end

-- 被fallback的作品根據此參數重新返回下級
if args.HazamaCh then game = 'smtifhc' end
if args.FES then game = 'p3f' end
if args.P3P then game = 'p3p' end
if args.P4G then game = 'p4g' end
if args.P5R then game = 'p5r' end -- Grey:这两行是玄学,参见「#更多」部分
if args.P5S then game = 'p5s' end -- Grey:这两行是玄学,参见「#更多」部分
if args.BR or args.RB then game = 'desu2rb' end
if args.DC then game = '20xxdc' end
if args.TMSFE then game = 'tmsfe' end -- Grey:这行确定不是搞笑的?

local gameg -- 遊戲的總樣式
if getGames.games[game].fallback then
	gameg = getGames.games[game].fallback -- 遊戲對應序號作
	else gameg = game
end
local gamen = getGames.games[game].name -- 遊戲全名
local gamegn = getGames.games[gameg].name -- 遊戲對應序號作全名
local gamed
if gameg then
	gamed = gameg:upper()
end

Grey:这是一段打满补丁的优雅的祖传代码。似乎没什么必要重构此代码~

更多

「被 fallback 的作品根據此參數重新返回下級」是什么意思?以 P3F 为例,对于如下写法:

{{Stats|p3f|...}}

与在 Gamedata 数据库 中规定的 fallback 上级的写法:

{{Stats|p3|...}}

并没有区别。为了部分涉及到 P3 与 P3F 差异功能的实现,需要写成:

{{Stats|p3|FES=1|...}}

从而「被 fallback 的作品根據此參數重新返回下級」,使得 game == 'p3f'。Grey:我目前还没见到过 P3 与 P3F 的功能差异。

不难发现:P5R 和 P5S 两部作品在 Gamedata 数据库 中未使用 fallback,而是完全指定了各种格式数据。也就是说,被看作完全独立的作品。为什么呢?

因为两部作品拥有完全独立的技能表。

这样,两部作品就无需在「被 fallback 的作品根據此參數重新返回下級」中标记。在所有涉及到 gameg == 'p5' 的位置,都需要考虑另外添加上 gameg == 'p5r'gameg == 'p5s'

Grey:理论上是无需在「被 fallback 的作品根據此參數重新返回下級」中标记的,但是现实中还是要标记上,否则会惊喜地获得「Script error - Lua error in Module:Skills/sandbox at line 444」。原因嘛,我猜应该是 Megami Tensei Wiki 那里又有人捣鼓出活化石式写法了吧~