用户: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 那里又有人捣鼓出活化石式写法了吧~