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

用戶: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 那裏又有人搗鼓出活化石式寫法了吧~