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